void ASVolume_parseGnomeIconString (ASVolume *v) { if (v) { static char signature[] = ". GThemedIcon "; destroy_string (&(v->idString)); if (v->icon) { ASImage *tmp = GIcon2ASImage (v->icon); gchar* str = g_icon_to_string (v->icon); show_activity ("volume added with icon \"%s\".", str); if (str) { if (strncmp (str, signature, sizeof(signature)-1) == 0) parse_token (&str [sizeof(signature)-1], &(v->idString)); safefree (str); } if (tmp) { int l, t, r, b; get_asimage_closure (tmp, &l, &t, &r, &b, 10); v->iconIm = tile_asimage (Scr.asv, tmp, l, t, r+1-l, b+1-t, 0x4F7F7F7F, ASA_ASImage, 100, ASIMAGE_QUALITY_DEFAULT); safe_asimage_destroy (tmp); } LOCAL_DEBUG_OUT ("Icon asim = %p", v->iconIm); } if (!v->idString) v->idString = mystrdup ("unknown"); } }
void updateVolumeContents (ASVolume *v){ int align = Config->Align, h_spacing = 1, v_spacing = 1; ASFlagType context_mask = 0; if (v->contents == NULL ) { v->contents = create_astbar (); v->contents->context = C_TITLE ; } else /* delete label if it was previously created : */ delete_astbar_tile (v->contents, -1 ); if (!ASVolume_isRequestPending(v)) { if (ASVolume_isEjectable(v)) set_flags (context_mask, EJECT_CONTEXT); if (ASVolume_isMounted(v)) set_flags (context_mask, UNMOUNT_CONTEXT); else set_flags (context_mask, MOUNT_CONTEXT); } LOCAL_DEBUG_OUT ("volume %s context mask 0x%lx", v->name, context_mask); set_astbar_style_ptr (v->contents, -1, Scr.Look.MSWindow[ASVolume_isMounted(v)?BACK_UNFOCUSED:BACK_FOCUSED] ); set_astbar_hilite (v->contents, BAR_STATE_FOCUSED, Config->MountedBevel); set_astbar_hilite (v->contents, BAR_STATE_UNFOCUSED, Config->UnmountedBevel); set_astbar_composition_method(v->contents, BAR_STATE_FOCUSED, TEXTURE_TRANSPIXMAP_ALPHA); set_astbar_composition_method(v->contents, BAR_STATE_UNFOCUSED, TEXTURE_TRANSPIXMAP_ALPHA); if (v->iconIm){ safe_asimage_destroy (v->iconImScaled); #if 0 v->iconImScaled = scale_asimage (Scr.asv, v->iconIm, AppState.tileWidth-5, AppState.tileHeight-5-(AppState.buttons[0]->height + 4), ASA_ASImage, 100, ASIMAGE_QUALITY_DEFAULT); add_astbar_icon(v->contents, 0, 0, False, 0, v->iconImScaled); #else v->iconImScaled = scale_asimage (Scr.asv, v->iconIm, AppState.tileWidth*2/3, (AppState.tileHeight-(AppState.buttons[0]->height + 4)), ASA_ASImage, 100, ASIMAGE_QUALITY_DEFAULT); add_astbar_icon(v->contents, 0, 0, False, ALIGN_CENTER, v->iconImScaled); #endif } add_astbar_label (v->contents, 0, 0, False, align|AS_TilePadRight, h_spacing, v_spacing, v->name, AS_Text_UTF8 ); LOCAL_DEBUG_OUT ("mount_button.width = %d, mount_button.height = %d, image %dx%d", AppState.buttons[0]->width, AppState.buttons[0]->height, AppState.buttons[0]->pressed.image->width, AppState.buttons[0]->pressed.image->height); add_astbar_btnblock (v->contents, 0, 2, True, align, AppState.buttons, context_mask, BUTTONS_NUM, 2, 2, 5, 0); if (get_flags(Config->flags, ASMOUNT_ShowHints)) { char* hint = ASVolume_toString (v); set_astbar_balloon (v->contents, C_TITLE, hint, AS_Text_UTF8); safefree(hint); set_astbar_balloon (v->contents, MOUNT_CONTEXT, "Mount volume", AS_Text_UTF8); set_astbar_balloon (v->contents, EJECT_CONTEXT, "Eject drive", AS_Text_UTF8); set_astbar_balloon (v->contents, UNMOUNT_CONTEXT, "Un-mount volume", AS_Text_UTF8); } }
void ASVolume_freeData( ASVolume *v) { destroy_string (&(v->name)); if (v->icon) { if (v->iconIm) safe_asimage_destroy (v->iconIm); g_object_unref (v->icon); v->icon = NULL; } destroy_string (&(v->idString)); }
void asgtk_image_view_refresh (ASGtkImageView * iv, Bool reload_file) { g_return_if_fail (ASGTK_IS_IMAGE_VIEW (iv)); if (iv->image_entry) { if (reload_file && iv->image_entry->type <= ASIT_Supported) { if (iv->image_entry->preview) { safe_asimage_destroy (iv->image_entry->preview); iv->image_entry->preview = NULL; } /* show empty screen while loading background for now : */ display_image_view (iv); LOCAL_DEBUG_OUT ("imman = %p, fullname = \"%s\"", get_screen_image_manager (NULL), iv->image_entry->fullfilename); iv->image_entry->preview = get_asimage (get_screen_image_manager (NULL), iv->image_entry->fullfilename, 0xffffffff, 100); LOCAL_DEBUG_OUT (" ASGtk image view loaded image %p", iv->image_entry->preview); } if (iv->image_entry->preview) { Bool ratio_changed = False; char *details_text; details_text = format_asimage_list_entry_details (iv->image_entry, GTK_IS_VBUTTON_BOX (iv-> details_hbox)); gtk_label_set_text (GTK_LABEL (iv->details_label), details_text); free (details_text); if (iv->aspect_x <= 0 || iv->aspect_y <= 0) ratio_changed = set_aspect_ratio_from_image (iv); LOCAL_DEBUG_OUT (" ASGtk image view refreshing image %p", iv->image_entry->preview); /* redisplay */ if (!ratio_changed) display_image_view (iv); else gtk_image_set_from_stock (GTK_IMAGE (iv->view), GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON); } } }
void FreeMyAppResources() { cleanup_default_balloons(); destroy_asdatabase(); mystyle_destroy_all(); mylook_init( &(ASDefaultScr->Look), True, ASFLAGS_EVERYTHING ); destroy_image_manager( ASDefaultScr->image_manager, False ); destroy_font_manager( ASDefaultScr->font_manager, False ); clientprops_cleanup (); destroy_wmprops (ASDefaultScr->wmprops, False); wmprops_cleanup (); free_func_hash(); flush_keyword_ids(); purge_asimage_registry(); asxml_var_cleanup(); custom_color_cleanup(); build_xpm_colormap( NULL ); destroy_screen_gcs(ASDefaultScr); if( ASDefaultScr->RootImage ) { safe_asimage_destroy( ASDefaultScr->RootImage ); ASDefaultScr->RootImage = NULL ; } destroy_asvisual( ASDefaultScr->asv, False ); free_as_app_args(); destroy_assession( Session ); Session = NULL ; destroy_asenvironment( &Environment ); is_executable_in_path ( NULL ); #ifdef XSHMIMAGE flush_shm_cache(); #endif free( ASDefaultScr ); flush_default_asstorage(); flush_asbidirlist_memory_pool(); flush_ashash_memory_pool(); }
void DispatchEvent (ASEvent * event) { ASVolume *event_volume = NULL; SHOW_EVENT_TRACE(event); if( (event->eclass & ASE_POINTER_EVENTS) != 0 ) { XKeyEvent *xk = &(event->x.xkey); int pointer_root_x = xk->x_root; int pointer_root_y = xk->y_root; event_volume = position2Volume (pointer_root_x,// - (int)AppState.mainCanvas->bw, pointer_root_y);// - (int)AppState.mainCanvas->bw); LOCAL_DEBUG_OUT ("event_volume = %p, name = \"%s\"", event_volume, event_volume ? event_volume->name : "(none)"); if(is_balloon_click( &(event->x) ) ) { withdraw_balloon(NULL); return; } if (event_volume) event->context = check_astbar_point( event_volume->contents, pointer_root_x, pointer_root_y ); } event->client = NULL ; switch (event->x.type) { case ConfigureNotify: { ASFlagType changes = handle_canvas_config (AppState.mainCanvas); if( changes != 0 ) { volumeWindowMoved_AuxData aux; aux.backgroundChanged = False; set_root_clip_area( AppState.mainCanvas ); iterate_asbidirlist (AppState.volumes, volumeWindowMoved, &aux, NULL, False); } show_activity ("changes = 0x%lx", changes); } break; case KeyPress : return ; case KeyRelease : return ; case ButtonPress: pressButton (event_volume, event); return; case ButtonRelease: LOCAL_DEBUG_OUT( "state(0x%X)->state&ButtonAnyMask(0x%X)", event->x.xbutton.state, event->x.xbutton.state&ButtonAnyMask ); if( (event->x.xbutton.state&ButtonAnyMask) == (Button1Mask<<(event->x.xbutton.button-Button1)) ) releaseButton(); return ; case EnterNotify : if( event->x.xcrossing.window == Scr.Root ) withdraw_active_balloon(); return ; case LeaveNotify : case MotionNotify : { static Bool root_pointer_moved = True ; if( event->x.type == MotionNotify ) root_pointer_moved = True ; if (event_volume) { on_astbar_pointer_action (event_volume->contents, event->context, (event->x.type == LeaveNotify), root_pointer_moved); root_pointer_moved = False ; } return ; } case ClientMessage: LOCAL_DEBUG_OUT("ClientMessage(\"%s\",format = %d, data=(%8.8lX,%8.8lX,%8.8lX,%8.8lX,%8.8lX)", XGetAtomName( dpy, event->x.xclient.message_type ), event->x.xclient.format, event->x.xclient.data.l[0], event->x.xclient.data.l[1], event->x.xclient.data.l[2], event->x.xclient.data.l[3], event->x.xclient.data.l[4]); if ( event->x.xclient.format == 32 && event->x.xclient.data.l[0] == _XA_WM_DELETE_WINDOW ) { DeadPipe(0); } return ; case PropertyNotify: if( event->x.xproperty.atom == _XA_NET_WM_STATE ) { LOCAL_DEBUG_OUT( "_XA_NET_WM_STATE updated!%s",""); return; } handle_wmprop_event (Scr.wmprops, &(event->x)); if( event->x.xproperty.atom == _AS_BACKGROUND ) { volumeWindowMoved_AuxData aux; aux.backgroundChanged = True; LOCAL_DEBUG_OUT( "root background updated!%s",""); safe_asimage_destroy( Scr.RootImage ); Scr.RootImage = NULL ; iterate_asbidirlist (AppState.volumes, volumeWindowMoved, &aux, NULL, False); }else if( event->x.xproperty.atom == _AS_STYLE ) { volumeWindowMoved_AuxData aux; aux.backgroundChanged = False; LOCAL_DEBUG_OUT( "AS Styles updated!%s",""); mystyle_list_destroy_all(&(Scr.Look.styles_list)); LoadColorScheme(); SetASMountLook(); /* now we need to update everything */ redecorateVolumes (); iterate_asbidirlist (AppState.volumes, volumeWindowMoved, &aux, NULL, False); } return ; default: #ifdef XSHMIMAGE LOCAL_DEBUG_OUT( "XSHMIMAGE> EVENT : completion_type = %d, event->type = %d ", Scr.ShmCompletionEventType, event->x.type ); if( event->x.type == Scr.ShmCompletionEventType ) handle_ShmCompletion( event ); #endif /* SHAPE */ return; } /*update_pager_shape();*/ }
void DispatchEvent (ASEvent * event) { SHOW_EVENT_TRACE(event); switch (event->x.type) { case ConfigureNotify: { ASFlagType changes = handle_canvas_config( IdentState.main_canvas ); if( changes != 0 ) set_root_clip_area( IdentState.main_canvas ); if( get_flags( changes, CANVAS_RESIZED ) ) { }else if( changes != 0 ) /* moved - update transparency ! */ { /* int i ; for( i = 0 ; i < Ident.windows_num ; ++i ) update_astbar_transparency( WinListState.window_order[i]->bar, WinListState.main_canvas, False ); */ } } break; case ButtonPress: break; case ButtonRelease: break; case EnterNotify : case LeaveNotify : case MotionNotify : break ; case ClientMessage: if ((event->x.xclient.format == 32) && (event->x.xclient.data.l[0] == _XA_WM_DELETE_WINDOW)) { DeadPipe(0); } break; case PropertyNotify: LOCAL_DEBUG_OUT( "property %s(%lX), _XROOTPMAP_ID = %lX, event->w = %lX, root = %lX", XGetAtomName(dpy, event->x.xproperty.atom), event->x.xproperty.atom, _XROOTPMAP_ID, event->w, Scr.Root ); handle_wmprop_event (Scr.wmprops, &(event->x)); if( event->x.xproperty.atom == _AS_BACKGROUND ) { /*int i ;*/ LOCAL_DEBUG_OUT( "root background updated!%s",""); safe_asimage_destroy( Scr.RootImage ); Scr.RootImage = NULL ; /* for( i = 0 ; i < WinListState.windows_num ; ++i ) if( update_astbar_transparency( WinListState.window_order[i]->bar, WinListState.main_canvas, True ) ) render_astbar( WinListState.window_order[i]->bar, WinListState.main_canvas ); */ if( is_canvas_dirty( IdentState.main_canvas ) ) { update_canvas_display( IdentState.main_canvas ); } }else if( event->x.xproperty.atom == _AS_STYLE ) { /*int i ;*/ LOCAL_DEBUG_OUT( "AS Styles updated!%s",""); mystyle_list_destroy_all(&(Scr.Look.styles_list)); LoadColorScheme(); CheckConfigSanity(); /* now we need to update everything */ } break; } }