ASDesktopEntry * name2desktop_entry( const char *name, ASCategoryTree **tree_return ) { int offset = 0 ; ASCategoryTree *ct = name2desktop_category_tree( name, &offset ); if( tree_return ) *tree_return = ct ; return fetch_desktop_entry( ct, name+offset ); }
void dirtree_fill_from_reference( dirtree_t *tree, const char *reference ) { ASCategoryTree *ct = CombinedCategories ; ASDesktopCategory *dc = NULL ; ASDesktopEntry *de = NULL ; ASSERT_TREE(tree); dc = name2desktop_category( reference, &ct ); if (!dc) return; de = fetch_desktop_entry( ct, dc->index_name?dc->index_name:dc->name ); if( dup_desktop_entry_Name( de, &(tree->name) ) ) set_flags( tree->flags, DIRTREE_NAME_IS_UTF8 ); if( dup_desktop_entry_Comment( de, &(tree->Comment) ) ) set_flags( tree->flags, DIRTREE_COMMENT_IS_UTF8 ); if( de->fulliconname ) { set_string(&(tree->icon), mystrdup(de->fulliconname)); set_flags(tree->flags, DIRTREE_ICON_IS_SMALL); } }
void fill_window_data() { ASWindowData *wd; INT32 encoding; char *name, *names[5]; static char buf[4096], buf2[4096]; ASRawHints raw ; ASDatabaseRecord db_rec ; wd = fetch_window_by_id( MyArgs.src_window ); LOCAL_DEBUG_OUT( "src_window = %lX, wd = %p", MyArgs.src_window, wd ); encoding = AS_Text_ASCII ; name = get_window_name(wd, ASN_Name, &encoding ); add_property( "Window name:", name, encoding, True ); name = get_window_name(wd, ASN_NameMatched, &encoding ); add_property( "Window name matched:", name, encoding, True ); name = get_window_name(wd, ASN_IconName, &encoding ); add_property( "Icon name:", name, encoding, True ); name = get_window_name(wd, ASN_ResClass, &encoding ); add_property( "Resource class:", name, encoding, False ); name = get_window_name(wd, ASN_ResName, &encoding ); add_property( "Resource name:", name, encoding, False ); sprintf( buf, "0x%lX ( %ld )", wd->client, wd->client ); add_property("Client Window ID:", buf, AS_Text_ASCII, False); sprintf( buf, "0x%lX ( %ld )", wd->frame, wd->frame ); add_property("Frame Window ID:", buf, AS_Text_ASCII, False); sprintf( buf, "%ldx%ld%+ld%+ld", wd->frame_rect.width, wd->frame_rect.height, wd->frame_rect.x, wd->frame_rect.y ); add_property("Frame Geometry:", buf, AS_Text_ASCII, False); #define SHOW_FLAG(flags,flg) \ do{ if( get_flags( flags, AS_##flg)){ if( buf[0] != '\0' ) strcat( buf, ", "); strcat( buf, #flg );}}while(0) #define SHOW_WM_FLAG(flags,flg) \ do{ if( get_flags( flags, flg)){ if( buf[0] != '\0' ) strcat( buf, ", "); strcat( buf, #flg );}}while(0) #define SHOW_MWM_FLAG(flags,type,flg) \ do{ if( get_flags( flags, MWM_##type##_##flg)){ if( buf[0] != '\0' ) strcat( buf, ", "); strcat( buf, #flg );}}while(0) #define SHOW_EXTWM_FLAG(flags,type,flg) \ do{ if( get_flags( flags, EXTWM_##type##flg)){ if( buf[0] != '\0' ) strcat( buf, ", "); strcat( buf, #flg );}}while(0) #define SHOW_GNOME_FLAG(flags,type,flg) \ do{ if( get_flags( flags, WIN_##type##_##flg)){ if( buf[0] != '\0' ) strcat( buf, ", "); strcat( buf, #flg );}}while(0) buf[0] = '\0' ; if( (wd->state_flags & (AS_MaximizedX|AS_MaximizedY)) == (AS_MaximizedX|AS_MaximizedY) ) { strcpy( buf, "Maximized"); }else { SHOW_FLAG(wd->state_flags,MaximizedX); SHOW_FLAG(wd->state_flags,MaximizedY); } SHOW_FLAG(wd->state_flags,Iconic); SHOW_FLAG(wd->state_flags,Fullscreen); SHOW_FLAG(wd->state_flags,Sticky); SHOW_FLAG(wd->state_flags,Shaded); SHOW_FLAG(wd->state_flags,Withdrawn); SHOW_FLAG(wd->state_flags,Dead); SHOW_FLAG(wd->state_flags,Mapped); SHOW_FLAG(wd->state_flags,IconMapped); SHOW_FLAG(wd->state_flags,Hidden); SHOW_FLAG(wd->state_flags,Shaped); SHOW_FLAG(wd->state_flags,ShapedDecor); SHOW_FLAG(wd->state_flags,ShapedIcon); SHOW_FLAG(wd->state_flags,Urgent); add_property("Current state flags:", buf, AS_Text_ASCII, True); buf[0] = '\0' ; SHOW_FLAG(wd->flags,Iconic); SHOW_FLAG(wd->flags,Transient); SHOW_FLAG(wd->flags,AcceptsFocus); SHOW_FLAG(wd->flags,ClickToFocus); SHOW_FLAG(wd->flags,Titlebar); SHOW_FLAG(wd->flags,VerticalTitle); SHOW_FLAG(wd->flags,Border); SHOW_FLAG(wd->flags,Handles); SHOW_FLAG(wd->flags,Frame); SHOW_FLAG(wd->flags,SkipWinList); SHOW_FLAG(wd->flags,DontCirculate); SHOW_FLAG(wd->flags,AvoidCover); SHOW_FLAG(wd->flags,IconTitle); SHOW_FLAG(wd->flags,Icon); SHOW_FLAG(wd->client_icon_flags,ClientIcon); SHOW_FLAG(wd->client_icon_flags,ClientIconPixmap); SHOW_FLAG(wd->client_icon_flags,ClientIconPosition); SHOW_FLAG(wd->flags,FocusOnMap); SHOW_FLAG(wd->flags,ShortLived); SHOW_FLAG(wd->flags,Module); SHOW_FLAG(wd->flags,IgnoreConfigRequest); SHOW_FLAG(wd->flags,IgnoreRestackRequest); SHOW_FLAG(wd->flags,WMDockApp); add_property("Current hints flags:", buf, AS_Text_ASCII, True); buf[0] = '\0' ; SHOW_FLAG(wd->flags,Windowbox); SHOW_FLAG(wd->flags,Aspect); SHOW_FLAG(wd->flags,PID); SHOW_FLAG(wd->flags,MinSize); SHOW_FLAG(wd->flags,MaxSize); SHOW_FLAG(wd->flags,SizeInc); SHOW_FLAG(wd->flags,BaseSize); SHOW_FLAG(wd->flags,Gravity); add_property("Specified hint values:", buf, AS_Text_ASCII, True); if( collect_hints( ASDefaultScr, wd->client, HINT_ANY, &raw ) ) { ExtendedWMHints *eh = &(raw.extwm_hints); GnomeHints *gh = &(raw.gnome_hints); if (raw.wm_hints) { if( raw.wm_hints->flags != 0 ) { buf[0] = '\0' ; SHOW_WM_FLAG(raw.wm_hints->flags,UrgencyHint ); SHOW_WM_FLAG(raw.wm_hints->flags,InputHint); SHOW_WM_FLAG(raw.wm_hints->flags,StateHint); SHOW_WM_FLAG(raw.wm_hints->flags,IconPixmapHint); SHOW_WM_FLAG(raw.wm_hints->flags,IconWindowHint); SHOW_WM_FLAG(raw.wm_hints->flags,IconPositionHint); SHOW_WM_FLAG(raw.wm_hints->flags,IconMaskHint); SHOW_WM_FLAG(raw.wm_hints->flags,WindowGroupHint); add_property("WM Hints flags:", buf, AS_Text_ASCII, True); if( get_flags (raw.wm_hints->flags, WindowGroupHint) ) { sprintf( buf, "0x%lX ( %ld )", raw.wm_hints->window_group, raw.wm_hints->window_group ); add_property("WM Group leader:", buf, AS_Text_ASCII, True); } } } if (raw.wm_normal_hints) { if( raw.wm_normal_hints->flags != 0 ) { buf[0] = '\0' ; SHOW_WM_FLAG(raw.wm_normal_hints->flags,USPosition ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,USSize ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,PPosition ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,PSize ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,PMinSize ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,PMaxSize ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,PResizeInc ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,PAspect ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,PBaseSize ); SHOW_WM_FLAG(raw.wm_normal_hints->flags,PWinGravity ); add_property("WM Size Hints flags:", buf, AS_Text_ASCII, True); } if( get_flags(raw.wm_normal_hints->flags, PWinGravity ) && raw.wm_normal_hints->win_gravity >= 0 && raw.wm_normal_hints->win_gravity <= StaticGravity ) { static char *gravity_types[] = {"Forget","NorthWest","North","NorthEast","West", "Center","East","SouthWest","South","SouthEast", "Static" }; add_property("Gravity:", gravity_types[raw.wm_normal_hints->win_gravity], AS_Text_ASCII, True); } } if( raw.transient_for) { sprintf( buf, "0x%lX", raw.transient_for->flags ); add_property("flags:", buf, AS_Text_ASCII, False); sprintf( buf, "0x%lX ( %ld )", raw.transient_for->parent, raw.transient_for->parent ); add_property("Transient For:", buf, AS_Text_ASCII, False); sprintf( buf, "%+d%+d", raw.transient_for->viewport_x, raw.transient_for->viewport_y); add_property("Transient viewport:", buf, AS_Text_ASCII, False); sprintf( buf, "%d", raw.transient_for->desktop ); add_property("Transient desktop:", buf, AS_Text_ASCII, False); } if (raw.motif_hints) { buf[0] = '\0' ; if (get_flags (raw.motif_hints->flags, MWM_HINTS_INPUT_MODE)) { INT32 input_mode = raw.motif_hints->inputMode; if (input_mode == MWM_INPUT_SYSTEM_MODAL) add_property("Motif Input mode:", "System modal", AS_Text_ASCII, False); else if (input_mode == MWM_INPUT_FULL_APPLICATION_MODAL) add_property("Motif Input mode:", "Full application modal", AS_Text_ASCII, False); } check_motif_hints_sanity( raw.motif_hints ); if (get_flags (raw.motif_hints->flags, MWM_HINTS_FUNCTIONS)) { ASFlagType funcs = raw.motif_hints->functions; buf[0] = '\0' ; SHOW_MWM_FLAG(funcs,FUNC,RESIZE); SHOW_MWM_FLAG(funcs,FUNC,MOVE); SHOW_MWM_FLAG(funcs,FUNC,MINIMIZE); SHOW_MWM_FLAG(funcs,FUNC,MAXIMIZE); SHOW_MWM_FLAG(funcs,FUNC,CLOSE); add_property("Motif Functionality hints:", buf, AS_Text_ASCII, False); } if (get_flags (raw.motif_hints->flags, MWM_HINTS_DECORATIONS)) { ASFlagType decor = raw.motif_hints->decorations; buf[0] = '\0' ; SHOW_MWM_FLAG(decor,DECOR,BORDER); SHOW_MWM_FLAG(decor,DECOR,RESIZEH); SHOW_MWM_FLAG(decor,DECOR,TITLE); SHOW_MWM_FLAG(decor,DECOR,MENU); SHOW_MWM_FLAG(decor,DECOR,MINIMIZE); SHOW_MWM_FLAG(decor,DECOR,MAXIMIZE); add_property("Motif decor hints:", buf, AS_Text_ASCII, False); } } /* window state hints : */ if (get_flags (eh->state_flags, EXTWM_StateEverything)) { buf[0] = '\0' ; SHOW_EXTWM_FLAG(eh->state_flags,State,Modal ); SHOW_EXTWM_FLAG(eh->state_flags,State,Sticky ); SHOW_EXTWM_FLAG(eh->state_flags,State,MaximizedV ); SHOW_EXTWM_FLAG(eh->state_flags,State,MaximizedH ); SHOW_EXTWM_FLAG(eh->state_flags,State,Shaded ); SHOW_EXTWM_FLAG(eh->state_flags,State,SkipTaskbar ); SHOW_EXTWM_FLAG(eh->state_flags,State,SkipPager ); SHOW_EXTWM_FLAG(eh->state_flags,State,Fullscreen ); SHOW_EXTWM_FLAG(eh->state_flags,State,Above ); SHOW_EXTWM_FLAG(eh->state_flags,State,Below ); SHOW_EXTWM_FLAG(eh->state_flags,State,Hidden ); SHOW_EXTWM_FLAG(eh->state_flags,State,DemandsAttention ); add_property("Extended WM status flags:", buf, AS_Text_ASCII, True); } /* window type hints : */ if (get_flags (eh->type_flags, EXTWM_TypeEverything)) { buf[0] = '\0' ; SHOW_EXTWM_FLAG(eh->type_flags,Type,Desktop); SHOW_EXTWM_FLAG(eh->type_flags,Type,Dock); SHOW_EXTWM_FLAG(eh->type_flags,Type,Toolbar); SHOW_EXTWM_FLAG(eh->type_flags,Type,Menu); SHOW_EXTWM_FLAG(eh->type_flags,Type,Dialog); SHOW_EXTWM_FLAG(eh->type_flags,Type,Normal); SHOW_EXTWM_FLAG(eh->type_flags,Type,Utility); SHOW_EXTWM_FLAG(eh->type_flags,Type,Splash); add_property("Extended WM type flags:", buf, AS_Text_ASCII, True); } if (get_flags (eh->flags, EXTWM_PID)) { sprintf( buf, "%d", (int)eh->pid ); add_property("Extended WM PID:", buf, AS_Text_ASCII, False); } if (get_flags (eh->flags, EXTWM_DoesWMPing)) add_property("Extended WM protocols:", "DoesWMPing", AS_Text_ASCII, False); if (get_flags (eh->flags, EXTWM_WINDOW_OPACITY)) { sprintf( buf, "%d", (int)eh->window_opacity ); add_property("ExtWM Window Opacity :", buf, AS_Text_ASCII, False); } if (get_flags (eh->flags, EXTWM_DESKTOP)) { if (eh->desktop == 0xFFFFFFFF) strcpy(buf, "sticky"); else sprintf( buf, "%d", (int)eh->desktop ); add_property("Extended WM desktop:", buf, AS_Text_ASCII, False); } if (get_flags (gh->flags, GNOME_LAYER)) { sprintf( buf, "%d", (int)gh->layer ); add_property("Gnome hints layer:", buf, AS_Text_ASCII, False); } if (get_flags (gh->flags, GNOME_WORKSPACE)) { sprintf( buf, "%d", (int)gh->workspace ); add_property("Gnome hints desktop:", buf, AS_Text_ASCII, False); } if (get_flags (gh->flags, GNOME_STATE) && gh->state != 0) { buf[0] = '\0' ; SHOW_GNOME_FLAG(gh->state,STATE,STICKY); SHOW_GNOME_FLAG(gh->state,STATE,MINIMIZED); SHOW_GNOME_FLAG(gh->state,STATE,MAXIMIZED_VERT); SHOW_GNOME_FLAG(gh->state,STATE,MAXIMIZED_HORIZ); SHOW_GNOME_FLAG(gh->state,STATE,SHADED); add_property("Gnome state flags:", buf, AS_Text_ASCII, False); } if (get_flags (gh->flags, GNOME_HINTS) && gh->hints != 0) { buf[0] = '\0' ; SHOW_GNOME_FLAG(gh->state,HINTS,SKIP_FOCUS); SHOW_GNOME_FLAG(gh->state,HINTS,SKIP_WINLIST); SHOW_GNOME_FLAG(gh->state,HINTS,SKIP_TASKBAR); SHOW_GNOME_FLAG(gh->state,HINTS,FOCUS_ON_CLICK); add_property("Gnome hints flags:", buf, AS_Text_ASCII, False); } } names[0] = get_window_name(wd, ASN_NameMatched, &encoding ); names[1] = get_window_name(wd, ASN_IconName, &encoding ); names[2] = get_window_name(wd, ASN_ResClass, &encoding ); names[3] = get_window_name(wd, ASN_ResName, &encoding ); names[4] = NULL ; #define APPEND_DBSTYLE_TEXT(text) \ do { if( !first ) strcat( buf, ", "); else first = False ; strcat( buf, text); } while(0) if ( fill_asdb_record (Database, names, &db_rec, False) != NULL ) { int i ; add_property("Matched Styles:", "", AS_Text_ASCII, True); for( i = 0 ; Database->match_list[i] >= 0 ; ++i ) { ASDatabaseRecord *dr = get_asdb_record (Database, Database->match_list[i]); int f ; Bool first = True ; if( is_default_asdb_record(Database, dr) ) sprintf(buf, "\"*\" \t"); else if( dr->regexp ) sprintf( buf, "\"%s\" \t", dr->regexp->raw ); else sprintf( buf, "\"(none)\" \t" ); for( f = 0 ; DatabaseFlagsList[f].name_set != NULL ; ++f ) { if( get_flags( dr->set_flags, DatabaseFlagsList[f].flag ) ) { name = get_flags( dr->flags, DatabaseFlagsList[f].flag )? DatabaseFlagsList[f].name_set : DatabaseFlagsList[f].name_unset ; APPEND_DBSTYLE_TEXT(name); } } if( get_flags( dr->set_data_flags, STYLE_ICON ) ) { sprintf( buf2, "Icon \"%s\"", dr->icon_file ); APPEND_DBSTYLE_TEXT(buf2); } #if 1 if( get_flags( dr->set_data_flags, STYLE_STARTUP_DESK ) ) { sprintf( buf2, "StartsOnDesk %d", dr->desk ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_BORDER_WIDTH ) ) { sprintf( buf2, "BorderWidth %d", dr->border_width ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_HANDLE_WIDTH ) ) { sprintf( buf2, "HandleWidth %d", dr->resize_width ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_DEFAULT_GEOMETRY ) ) { sprintf( buf2, "DefaultGeometry %dx%d%+d%+d", dr->default_geometry.width, dr->default_geometry.height, dr->default_geometry.x, dr->default_geometry.y ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_VIEWPORTX ) ) { sprintf( buf2, "ViewportX %d", dr->viewport_x ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_VIEWPORTY ) ) { sprintf( buf2, "ViewportY %d", dr->viewport_y ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_GRAVITY ) ) { sprintf( buf2, "OverrideGravity %s", Gravity2text[dr->gravity] ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_LAYER ) ) { sprintf( buf2, "Layer %d", dr->layer ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_FRAME ) ) { sprintf( buf2, "Frame \"%s\"", dr->frame_name ); APPEND_DBSTYLE_TEXT(buf2); } if( get_flags( dr->set_data_flags, STYLE_WINDOWBOX ) ) { sprintf( buf2, "WindowBox \"%s\"", dr->windowbox_name ); APPEND_DBSTYLE_TEXT(buf2); } #endif add_property("Style:", buf, AS_Text_ASCII, True); } } { ASDesktopEntry *de = fetch_desktop_entry( CombinedCategories, names[2]); if( de == NULL ) de = fetch_desktop_entry( CombinedCategories, names[3]); if( de ) { char *categories = make_desktop_entry_categories( de ); add_property("Categories:", categories?categories:"<none>", AS_Text_ASCII, False); destroy_string( &categories ) ; add_property(".desktop Entry Name:", de->Name, AS_Text_ASCII, False); add_property(".desktop Entry Comment:", de->Comment, AS_Text_ASCII, True); add_property(".desktop Entry Icon:", de->Icon, AS_Text_ASCII, True); } } }