From bfb4126ca008c306bee68f7c181e836344da0fb9 Mon Sep 17 00:00:00 2001 From: Sasha Vasko <sasha@aftercode.net> Date: Sun, 28 Dec 2014 21:12:26 -0600 Subject: [PATCH 12/18] Added desktop categories entries deduplication to allow for files in home dir to override system-wide settings --- libAfterBase/aslist.c | 43 ++++--- libAfterBase/aslist.h | 1 + libAfterConf/ASetRoot.c | 15 ++- libAfterConf/DesktopEntry.c | 44 ++++---- libAfterConf/afterconf.h | 216 ++++++++++++++++++------------------ libAfterStep/afterstep.h | 3 +- libAfterStep/background.h | 1 + libAfterStep/mylook.h | 17 +-- libAfterStep/screen.c | 80 +++++++------ libAfterStep/screen.h | 7 +- src/Banner/Makefile.in | 12 +- src/afterstep/events.c | 6 + 12 files changed, 245 insertions(+), 200 deletions(-) diff --git a/libAfterBase/aslist.c b/libAfterBase/aslist.c index 13ba89bf..54dddf5d 100644 --- a/libAfterBase/aslist.c +++ b/libAfterBase/aslist.c @@ -300,7 +300,7 @@ extract_last_bidirelem( ASBiDirList *l) return data; } -void +void bubblesort_asbidirlist( ASBiDirList *l, compare_data_handler compare_func ) { if( l && compare_func ) @@ -308,31 +308,48 @@ bubblesort_asbidirlist( ASBiDirList *l, compare_data_handler compare_func ) int swaps; do - { + { ASBiDirElem *curr = l->head; swaps = 0; while( curr != NULL && curr->next != NULL ) { ASBiDirElem *next = curr->next ; - if( compare_func( curr->data, next->data ) > 0 ) + if( compare_func( curr->data, next->data ) > 0 ) { /* swapping elements */ - ASBiDirElem *prev = curr->prev ; - next->prev = prev ; - curr->next = next->next ; - curr->prev = next ; - next->next = curr ; - if( prev == NULL ) - l->head = next ; + ASBiDirElem *prev = curr->prev ; + next->prev = prev ; + curr->next = next->next ; + curr->prev = next ; + next->next = curr ; + if( prev == NULL ) + l->head = next ; else - prev->next = next ; + prev->next = next ; if( l->tail == next ) l->tail = curr ; ++swaps ; }else - curr = next ; + curr = next ; } }while( swaps > 0 ); } } - + +void +dedup_asbidirlist( ASBiDirList *l, compare_data_handler compare_func ) +{ + if( l && compare_func ) { + ASBiDirElem *curr; + for (curr = l->head; curr != NULL ; curr = curr->next) { + ASBiDirElem *maybeDup = curr->next; + while (maybeDup != NULL) { + ASBiDirElem *next = maybeDup->next; + if (compare_func (curr->data, maybeDup->data) == 0){ + destroy_bidirelem (l, maybeDup); + } + maybeDup = next; + } + } + } +} diff --git a/libAfterBase/aslist.h b/libAfterBase/aslist.h index 247bc73a..e9aaf8bd 100644 --- a/libAfterBase/aslist.h +++ b/libAfterBase/aslist.h @@ -43,6 +43,7 @@ void iterate_asbidirlist( ASBiDirList *l, iter_list_data_handler iter_func, void void *start_from, Bool reverse); void bubblesort_asbidirlist( ASBiDirList *l, compare_data_handler compare_func ); +void dedup_asbidirlist( ASBiDirList *l, compare_data_handler compare_func ); void *append_bidirelem( ASBiDirList *l, void *data ); void *prepend_bidirelem( ASBiDirList *l, void *data ); diff --git a/libAfterConf/ASetRoot.c b/libAfterConf/ASetRoot.c index b4f7753e..b69c5db8 100644 --- a/libAfterConf/ASetRoot.c +++ b/libAfterConf/ASetRoot.c @@ -49,10 +49,9 @@ TermDef MyBackgroundTerms[] = { , {TF_NO_MYNAME_PREPENDING, "Scale", 5, TT_GEOMETRY, BGR_SCALE, NULL} , - {TF_NO_MYNAME_PREPENDING, "Align", 5, TT_INTEGER, BGR_ALIGN, NULL} - , - {TF_NO_MYNAME_PREPENDING | TF_INDEXED, "Pad", 3, TT_COLOR, BGR_PAD, NULL} - , + {TF_NO_MYNAME_PREPENDING, "Align", 5, TT_INTEGER, BGR_ALIGN, NULL}, + {TF_NO_MYNAME_PREPENDING, "Mirror", 6, TT_INTEGER, BGR_MIRROR, NULL}, + {TF_NO_MYNAME_PREPENDING | TF_INDEXED, "Pad", 3, TT_COLOR, BGR_PAD, NULL}, {TF_NO_MYNAME_PREPENDING | TF_SYNTAX_TERMINATOR, "~MyBackground", 13, TT_FLAG, BGR_MYBACKGROUND_END, NULL} , @@ -254,6 +253,10 @@ MyBackgroundConfig *ParseMyBackgroundOptions (FreeStorageElem * Storage, config->scale = item.data.geometry; config->flags |= BGFLAG_SCALE; break; + case BGR_MIRROR: + config->mirror = item.data.integer; + config->flags |= BGFLAG_MIRROR; + break; case BGR_ALIGN: config->flags &= ~(BGFLAG_ALIGN_CENTER | BGFLAG_ALIGN_RIGHT | @@ -487,6 +490,10 @@ void myback_parse (char *tline, FILE * fd, char **myname, int *mylook) else myback->align_flags = ALIGN_LEFT; } + myback->mirror = 0; + if (get_flags (back_config->flags, BGFLAG_MIRROR)) { + myback->mirror = back_config->mirror; + } if (get_flags (back_config->flags, BGFLAG_PAD_VERT)) { if (get_flags (back_config->flags, BGFLAG_ALIGN_BOTTOM)) myback->align_flags |= ALIGN_BOTTOM; diff --git a/libAfterConf/DesktopEntry.c b/libAfterConf/DesktopEntry.c index 1b57d9e9..87de8f22 100644 --- a/libAfterConf/DesktopEntry.c +++ b/libAfterConf/DesktopEntry.c @@ -18,7 +18,7 @@ */ -/* #define LOCAL_DEBUG */ +/*#define LOCAL_DEBUG */ /*#define DO_CLOCKING */ #include "../configure.h" @@ -341,6 +341,9 @@ parse_desktop_entry_list (const char *fullfilename, if (fp) { static char rb[MAXLINELENGTH + 1]; +#define FIX_DE do {if (de) {fix_desktop_entry (de, default_category, icon_path, fullfilename, applnk); \ + append_bidirelem (entry_list, de); de = NULL;} } while(0) + while (fgets (&(rb[0]), MAXLINELENGTH, fp) != NULL) { /*LOCAL_DEBUG_OUT( "rb = \"%s\", de = %p", &(rb[0]), de ); */ if (rb[0] == '[') { @@ -350,27 +353,15 @@ parse_desktop_entry_list (const char *fullfilename, || (rb[1] == 'K' && mystrncasecmp (&(rb[2]), "DE Desktop Entry]", 17) == 0)) { - if (de) { - fix_desktop_entry (de, default_category, icon_path, - fullfilename, applnk); - append_bidirelem (entry_list, de); - } + FIX_DE; de = create_desktop_entry (default_type); ++count; - } else if (de) { - fix_desktop_entry (de, default_category, icon_path, fullfilename, - applnk); - append_bidirelem (entry_list, de); - de = NULL; - } + } else + FIX_DE; } else if (de) parse_desktop_entry_line (de, &(rb[0])); } - if (de) { - fix_desktop_entry (de, default_category, icon_path, fullfilename, - applnk); - append_bidirelem (entry_list, de); - } + FIX_DE; fclose (fp); } return count; @@ -467,6 +458,13 @@ static Bool register_desktop_entry_list_item (void *data, void *aux_data) /* public methods : */ /*************************************************************************/ +int compareDesktopEntry (void *data1, void *data2) { + ASDesktopEntry *de1 = (ASDesktopEntry*)data1; + ASDesktopEntry *de2 = (ASDesktopEntry*)data2; + return (de1->type == ASDE_TypeApplication && + de2->type == ASDE_TypeApplication)? mystrcasecmp(de1->Name, de2->Name) : 1; +} + Bool load_category_tree (ASCategoryTree * ct) { if (ct && ct->dir_list) { @@ -478,7 +476,7 @@ Bool load_category_tree (ASCategoryTree * ct) Bool applnk = (strstr (ct->dir_list[i], "/applnk") != NULL); if (CheckDir (ct->dir_list[i]) == 0) { -/* fprintf( stderr, "location : \"%s\", applnk == %d\n", ct->dir_list[i], applnk ); +/* fprintf( stderr, "location : \"%s\", applnk == %d\n", ct->dir_list[i], applnk ); */ parse_desktop_entry_tree (ct->dir_list[i], NULL, entry_list, NULL, ct->icon_path, ct->name, applnk); @@ -487,7 +485,9 @@ Bool load_category_tree (ASCategoryTree * ct) ASDE_TypeDirectory, ct->icon_path, applnk); } - LOCAL_DEBUG_OUT ("Done parsing for tree %s", ct->name); + LOCAL_DEBUG_OUT ("Done parsing for tree %s, total entris %d", ct->name, entry_list->count); + dedup_asbidirlist(entry_list, compareDesktopEntry); + LOCAL_DEBUG_OUT ("Done deduping for tree %s, total entris %d", ct->name, entry_list->count); iterate_asbidirlist (entry_list, register_desktop_entry_list_item, ct, NULL, False); destroy_asbidirlist (&entry_list); @@ -716,15 +716,15 @@ int main (int argc, char **argv) #define REDHAT_APPLNK "/etc/X11/applnk" #define DEBIAN_APPLNK "/usr/share/applications" -/* - * From e-mail : +/* + * From e-mail : * The paths to the directories should be given by the DESKTOP_FILE_PATH * enviromental variable if other directories then /usr/share/applications/ are * needed. This environment variable has the same format as the PATH * evironment variable, ':'separating entries. If DESKTOP_FILE_PATH is present, * /usr/share/applications is not checked by default, and thus shoul dbe included * in the path. - * + * * see: https://listman.redhat.com/archives/xdg-list/2002-July/msg00049.html * http://standards.freedesktop.org/menu-spec/menu-spec-0.9.html#paths * http://www.freedesktop.org/Standards/desktop-entry-spec diff --git a/libAfterConf/afterconf.h b/libAfterConf/afterconf.h index 3fabfd2b..07e87d5f 100644 --- a/libAfterConf/afterconf.h +++ b/libAfterConf/afterconf.h @@ -46,7 +46,7 @@ extern struct SyntaxDef AlignSyntax; extern struct SyntaxDef *BevelSyntaxPtr; /* All top level syntax definitions are listed below : */ -extern struct SyntaxDef ArrangeSyntax; /* really is an empty syntax */ +extern struct SyntaxDef ArrangeSyntax; /* really is an empty syntax */ extern struct SyntaxDef AnimateSyntax; extern struct SyntaxDef SoundSyntax; extern struct SyntaxDef BaseSyntax; @@ -82,12 +82,12 @@ extern struct SyntaxDef PagerSyntax; extern struct SyntaxDef PagerPrivateSyntax; extern struct SyntaxDef PagerLookSyntax; extern struct SyntaxDef PagerFeelSyntax; -extern struct SyntaxDef WharfFeelSyntax; +extern struct SyntaxDef WharfFeelSyntax; extern struct SyntaxDef WharfLookSyntax; extern struct SyntaxDef WharfPrivateSyntax; extern struct SyntaxDef WharfFolderSyntax; extern struct SyntaxDef WharfSyntax; -extern struct SyntaxDef WinCommandSyntax; +extern struct SyntaxDef WinCommandSyntax; extern struct SyntaxDef WinListSyntax; extern struct SyntaxDef WinListPrivateSyntax; extern struct SyntaxDef WinListLookSyntax; @@ -253,13 +253,13 @@ typedef struct ASModuleConfig { int type ; /* any of the CONFIG_ values above */ struct ASModuleConfigClass *class ; - + struct MyStyleDefinition *style_defs ; - + struct balloonConfig **balloon_configs; /* in the same order as class->balloon_types */ struct FreeStorageElem *more_stuff; - + }ASModuleConfig; #define AS_MODULE_CONFIG(p) ((ASModuleConfig*)(p)) @@ -269,28 +269,28 @@ typedef struct ASModuleConfig -void init_asmodule_config( ASModuleConfig *config, Bool free_resources ); +void init_asmodule_config( ASModuleConfig *config, Bool free_resources ); struct flag_options_xref; typedef struct ASModuleConfigClass { - + int type ; /* any of the CONFIG_ values */ -#define ASMC_HandlePublicLookOptions (0x01<<0) -#define ASMC_HandlePublicFeelOptions (0x01<<1) -#define ASMC_HandleLookMyStyles (0x01<<2) +#define ASMC_HandlePublicLookOptions (0x01<<0) +#define ASMC_HandlePublicFeelOptions (0x01<<1) +#define ASMC_HandleLookMyStyles (0x01<<2) ASFlagType flags ; int config_struct_size ; /* sizeof(ConfigType) */ - + char *private_config_file ; - + void (*init_config_func)( ASModuleConfig *config, Bool free_resources); void (*free_storage2config_func)(ASModuleConfig *config, struct FreeStorageElem *storage); void (*merge_config_func)( ASModuleConfig *to, ASModuleConfig *from); - - struct SyntaxDef *module_syntax ; - struct SyntaxDef *look_syntax ; - struct SyntaxDef *feel_syntax ; + + struct SyntaxDef *module_syntax ; + struct SyntaxDef *look_syntax ; + struct SyntaxDef *feel_syntax ; struct flag_options_xref *flags_xref ; ptrdiff_t set_flags_field_offset ; @@ -341,12 +341,12 @@ struct FreeStorageElem *MyStyleDefinitionsList2free_storage (struct MyStyleDefin typedef struct { -#define BASE_NO_SHARED_MEMORY (0x01<<0) -#define BASE_NO_KDEGLOBALS_THEMING (0x01<<1) -#define BASE_DESKTOP_SIZE_SET (0x01<<16) -#define BASE_DESKTOP_SCALE_SET (0x01<<17) +#define BASE_NO_SHARED_MEMORY (0x01<<0) +#define BASE_NO_KDEGLOBALS_THEMING (0x01<<1) +#define BASE_DESKTOP_SIZE_SET (0x01<<16) +#define BASE_DESKTOP_SCALE_SET (0x01<<17) #define BASE_NoModuleNameCollisions_SET (0x01<<18) - ASFlagType flags, set_flags ; + ASFlagType flags, set_flags ; char *module_path; char *sound_path; char *icon_path; @@ -358,11 +358,11 @@ typedef struct char *gtkrc20_path; ASGeometry desktop_size; int desktop_scale; - int NoModuleNameCollisions; + int NoModuleNameCollisions; #define MAX_TOOL_COMMANDS 8 - char *term_command[MAX_TOOL_COMMANDS] ; - char *browser_command[MAX_TOOL_COMMANDS] ; - char *editor_command[MAX_TOOL_COMMANDS] ; + char *term_command[MAX_TOOL_COMMANDS] ; + char *browser_command[MAX_TOOL_COMMANDS] ; + char *editor_command[MAX_TOOL_COMMANDS] ; char *IconTheme; char *IconThemePath; char *IconThemeFallback; @@ -384,7 +384,7 @@ void ExtractPath (BaseConfig * config, void BaseConfig2ASEnvironment( register BaseConfig *config, ASEnvironment **penv ); void ReloadASImageManager( ASImageManager **old_imageman ); -Bool ReloadASEnvironment( struct ASImageManager **old_imageman, struct ASFontManager **old_fontman, BaseConfig **config_return, +Bool ReloadASEnvironment( struct ASImageManager **old_imageman, struct ASFontManager **old_fontman, BaseConfig **config_return, Bool flush_images, Bool support_shared_images ); /* @@ -474,7 +474,7 @@ typedef struct MyStyleDefinition char *Name; char *Comment; - + char *Font; char *ForeColor, *BackColor; int TextStyle; @@ -619,17 +619,17 @@ struct FreeStorageElem *MyStyleSpecialTerms2FreeStorage (MyStyleDefinition *msd, #define MYFRAME_TitleBackgroundAlign_ID_END (MYFRAME_TitleBackgroundAlign_ID_START+MYFRAME_TITLE_BACKS) -#define MYFRAME_CondenseTitlebar_ID (MYFRAME_TitleBackgroundAlign_ID_END+1) +#define MYFRAME_CondenseTitlebar_ID (MYFRAME_TitleBackgroundAlign_ID_END+1) #define MYFRAME_LeftTitlebarLayout_ID (MYFRAME_TitleBackgroundAlign_ID_END+2) #define MYFRAME_RightTitlebarLayout_ID (MYFRAME_TitleBackgroundAlign_ID_END+3) #define MYFRAME_LeftBtnAlign_ID (MYFRAME_TitleBackgroundAlign_ID_END+4) #define MYFRAME_RightBtnAlign_ID (MYFRAME_TitleBackgroundAlign_ID_END+5) -#define MYFRAME_NoBorder_ID (MYFRAME_TitleBackgroundAlign_ID_END+6) -#define MYFRAME_AllowBorder_ID (MYFRAME_NoBorder_ID+1) +#define MYFRAME_NoBorder_ID (MYFRAME_TitleBackgroundAlign_ID_END+6) +#define MYFRAME_AllowBorder_ID (MYFRAME_NoBorder_ID+1) -#define MYFRAME_SideSlicing_ID (MYFRAME_AllowBorder_ID+1) +#define MYFRAME_SideSlicing_ID (MYFRAME_AllowBorder_ID+1) #define MYFRAME_TitleBackSlicing_ID_START (MYFRAME_SideSlicing_ID+1) #define MYFRAME_LeftBtnBackSlicing_ID (MYFRAME_TitleBackSlicing_ID_START+MYFRAME_TITLE_BACK_LBTN ) @@ -734,8 +734,8 @@ struct FreeStorageElem *MyStyleSpecialTerms2FreeStorage (MyStyleDefinition *msd, * [TitleUnfocusedCompositionMethod testure_type] * [TitleStickyCompositionMethod testure_type] * [CondenseTitlebar] - * [LeftTitlebarLayout Buttons,Spacer,TitleSpacer] - * [RightTitlebarLayout Buttons,Spacer,TitleSpacer] + * [LeftTitlebarLayout Buttons,Spacer,TitleSpacer] + * [RightTitlebarLayout Buttons,Spacer,TitleSpacer] * ~MyFrame */ @@ -770,7 +770,7 @@ typedef struct MyFrameDefinition ASFlagType title_backs_align[MYFRAME_TITLE_BACKS]; ASGeometry title_backs_slicing[MYFRAME_TITLE_BACKS]; int title_fcm, title_ucm, title_scm; - char *title_fhue, *title_uhue, *title_shue; + char *title_fhue, *title_uhue, *title_shue; int title_fsat, title_usat, title_ssat; int title_h_spacing, title_v_spacing; ASFlagType condense_titlebar ; @@ -885,7 +885,7 @@ void myframe_parse (char *tline, FILE * fd, char **myname, int *myframe_list); extern int ASDefaultBalloonTypes[]; -/* this flags aren't really part of ballon config, and could be used by different +/* this flags aren't really part of ballon config, and could be used by different modules in their own ways */ #define BALLOON_SHOW_Name (0x01<<BALLOON_SHOW_Name_OFFSET) #define BALLOON_SHOW_IconName (0x01<<BALLOON_SHOW_IconName_OFFSET) @@ -901,7 +901,7 @@ typedef struct balloonConfig int type ; /* == CONFIG_Balloons_ID */ unsigned long set_flags; /* identifyes what option is set */ - unsigned long flags; + unsigned long flags; #define BALLOON_Balloons (0x01<<0) #define BALLOON_USED BALLOON_Balloons #define BALLOON_BorderHilite (0x01<<1) @@ -917,13 +917,13 @@ typedef struct balloonConfig unsigned int Delay, CloseDelay; char *Style ; int TextPaddingX, TextPaddingY; - + struct balloonConfig *next ; /* we may have different kinds of balloons */ }balloonConfig; balloonConfig *Create_balloonConfig (); void Destroy_balloonConfig (balloonConfig * config); -balloonConfig *Process_balloonOptions ( struct FreeStorageElem * options, +balloonConfig *Process_balloonOptions ( struct FreeStorageElem * options, balloonConfig *config, int id_base ); void Print_balloonConfig (balloonConfig * config); @@ -1072,9 +1072,10 @@ void DestroyPagerConfig (PagerConfig * config); #define BGR_SCALE BGR_ID_START+4 #define BGR_ALIGN BGR_ID_START+5 #define BGR_PAD BGR_ID_START+6 -#define BGR_MYBACKGROUND_END BGR_ID_START+7 +#define BGR_MIRROR BGR_ID_START+7 +#define BGR_MYBACKGROUND_END BGR_ID_START+8 -#define BGR_DESK_BACK BGR_ID_START+8 +#define BGR_DESK_BACK BGR_ID_START+9 #define BGR_ID_END BGR_ID_START+20 typedef struct my_background_config @@ -1087,6 +1088,7 @@ typedef struct my_background_config char *tint; ASGeometry scale; char *pad; + int mirror; struct my_background_config *next; } MyBackgroundConfig; @@ -1256,7 +1258,7 @@ typedef struct WinListConfig #define WINLIST_ScaleIconToTextHeight (0x01<<24) #define WINLIST_NoCollidesSpacing (0x01<<25) #define WINLIST_ShowHints (0x01<<26) - + #define ASWL_RowsFirst WINLIST_FillRowsFirst #define ASWL_UseSkipList WINLIST_UseSkipList @@ -1267,7 +1269,7 @@ typedef struct WinListConfig ASFlagType flags ; ASFlagType set_flags ; - + ASGeometry Geometry ; ASGeometry MinSize ; ASGeometry MaxSize ; @@ -1295,7 +1297,7 @@ typedef struct WinListConfig ASGeometry IconSize ; char **Action[MAX_MOUSE_BUTTONS]; - + char **NoCollides ; int NoCollides_nitems ; char **AllowCollides ; @@ -1324,7 +1326,7 @@ int WriteWinListOptions (const char *filename, char *myname, WinListConfig * con WinListConfig *ParseWinListOptions (const char *filename, char *myname); void MergeWinListOptions ( ASModuleConfig *to, ASModuleConfig *from); ASFlagType DigestWinListAlign( WinListConfig *Config, ASFlagType align ); -void CheckWinListConfigSanity(WinListConfig *Config, +void CheckWinListConfigSanity(WinListConfig *Config, ASGeometry *default_geometry, int default_gravity, int max_columns_override, int max_rows_override ); @@ -1334,7 +1336,7 @@ void CheckWinListConfigSanity(WinListConfig *Config, /* ASMount config : * * *ASMountTileSize WxH - * *ASMountVertical + * *ASMountVertical * *ASMountUnmountedStyle "style" * *ASMountMountedStyle "style" * *ASMountAlign Left,Right,Top,Bottom @@ -1377,7 +1379,7 @@ typedef struct ASMountConfig ASFlagType flags ; ASFlagType set_flags ; - + ASGeometry TileSize; /* phony flags */ @@ -1706,7 +1708,7 @@ typedef struct #define WHARF_SHOW_HINT_GenericName BALLOON_SHOW_GenericName #define WHARF_DEFAULT_ShowHints (WHARF_SHOW_HINT_Name|WHARF_SHOW_HINT_Comment|WHARF_SHOW_HINT_Exec) ASFlagType ShowHints ; - + balloonConfig *balloon_conf; MyStyleDefinition *style_defs; @@ -1805,27 +1807,27 @@ int WriteWharfOptions (const char *filename, char *myname, /* non depreciated options : */ #define LOOK_SUPPORTED_ID_START (LOOK_DEPRECIATED_ID_END) -#define LOOK_IconBox_ID (LOOK_SUPPORTED_ID_START+1) -#define LOOK_MyStyle_ID (LOOK_SUPPORTED_ID_START+3) +#define LOOK_IconBox_ID (LOOK_SUPPORTED_ID_START+1) +#define LOOK_MyStyle_ID (LOOK_SUPPORTED_ID_START+3) #define LOOK_MyBackground_ID (LOOK_SUPPORTED_ID_START+4) -#define LOOK_DeskBack_ID (LOOK_SUPPORTED_ID_START+5) +#define LOOK_DeskBack_ID (LOOK_SUPPORTED_ID_START+5) #define LOOK_asetrootDeskBack_ID (LOOK_SUPPORTED_ID_START+6) -#define LOOK_MyFrame_ID (LOOK_SUPPORTED_ID_START+7) -#define LOOK_DefaultFrame_ID (LOOK_SUPPORTED_ID_START+8) +#define LOOK_MyFrame_ID (LOOK_SUPPORTED_ID_START+7) +#define LOOK_DefaultFrame_ID (LOOK_SUPPORTED_ID_START+8) #define LOOK_DontDrawBackground_ID (LOOK_SUPPORTED_ID_START+9) #define LOOK_CustomCursor_ID (LOOK_SUPPORTED_ID_START+10) -#define LOOK_CursorFore_ID (LOOK_SUPPORTED_ID_START+11) +#define LOOK_CursorFore_ID (LOOK_SUPPORTED_ID_START+11) #define LOOK_CursorBack_ID (LOOK_SUPPORTED_ID_START+12) -#define LOOK_Cursor_ID (LOOK_SUPPORTED_ID_START+13) -#define LOOK_MenuPinOn_ID (LOOK_SUPPORTED_ID_START+14) -#define LOOK_MArrowPixmap_ID (LOOK_SUPPORTED_ID_START+15) -#define LOOK_TitlebarNoPush_ID (LOOK_SUPPORTED_ID_START+16) +#define LOOK_Cursor_ID (LOOK_SUPPORTED_ID_START+13) +#define LOOK_MenuPinOn_ID (LOOK_SUPPORTED_ID_START+14) +#define LOOK_MArrowPixmap_ID (LOOK_SUPPORTED_ID_START+15) +#define LOOK_TitlebarNoPush_ID (LOOK_SUPPORTED_ID_START+16) #define LOOK_TextureMenuItemsIndividually_ID (LOOK_SUPPORTED_ID_START+17) #define LOOK_MenuMiniPixmaps_ID (LOOK_SUPPORTED_ID_START+18) #define LOOK_TitleTextAlign_ID (LOOK_SUPPORTED_ID_START+19) #define LOOK_TitleButtonSpacingLeft_ID (LOOK_SUPPORTED_ID_START+20) #define LOOK_TitleButtonSpacingRight_ID (LOOK_SUPPORTED_ID_START+21) -#define LOOK_TitleButtonSpacing_ID (LOOK_SUPPORTED_ID_START+22) +#define LOOK_TitleButtonSpacing_ID (LOOK_SUPPORTED_ID_START+22) #define LOOK_TitleButtonXOffsetLeft_ID (LOOK_SUPPORTED_ID_START+23) #define LOOK_TitleButtonXOffsetRight_ID (LOOK_SUPPORTED_ID_START+24) #define LOOK_TitleButtonXOffset_ID (LOOK_SUPPORTED_ID_START+25) @@ -1837,46 +1839,46 @@ int WriteWharfOptions (const char *filename, char *myname, #define LOOK_ResizeMoveGeometry_ID (LOOK_SUPPORTED_ID_START+31) #define LOOK_StartMenuSortMode_ID (LOOK_SUPPORTED_ID_START+32) #define LOOK_DrawMenuBorders_ID (LOOK_SUPPORTED_ID_START+33) -#define LOOK_ButtonSize_ID (LOOK_SUPPORTED_ID_START+34) -#define LOOK_ButtonIconSpacing_ID (LOOK_SUPPORTED_ID_START+35) -#define LOOK_ButtonBevel_ID (LOOK_SUPPORTED_ID_START+36) -#define LOOK_ButtonAlign_ID (LOOK_SUPPORTED_ID_START+37) +#define LOOK_ButtonSize_ID (LOOK_SUPPORTED_ID_START+34) +#define LOOK_ButtonIconSpacing_ID (LOOK_SUPPORTED_ID_START+35) +#define LOOK_ButtonBevel_ID (LOOK_SUPPORTED_ID_START+36) +#define LOOK_ButtonAlign_ID (LOOK_SUPPORTED_ID_START+37) #define LOOK_SeparateButtonTitle_ID (LOOK_SUPPORTED_ID_START+38) -#define LOOK_RubberBand_ID (LOOK_SUPPORTED_ID_START+39) +#define LOOK_RubberBand_ID (LOOK_SUPPORTED_ID_START+39) #define LOOK_WindowStyle_ID_START (LOOK_SUPPORTED_ID_START+40) #define LOOK_IconsGrowVertically_ID (LOOK_SUPPORTED_ID_START+41) -#define LOOK_DefaultStyle_ID LOOK_WindowStyle_ID_START -#define LOOK_FWindowStyle_ID (LOOK_WindowStyle_ID_START+1) -#define LOOK_UWindowStyle_ID (LOOK_WindowStyle_ID_START+2) -#define LOOK_SWindowStyle_ID (LOOK_WindowStyle_ID_START+3) +#define LOOK_DefaultStyle_ID LOOK_WindowStyle_ID_START +#define LOOK_FWindowStyle_ID (LOOK_WindowStyle_ID_START+1) +#define LOOK_UWindowStyle_ID (LOOK_WindowStyle_ID_START+2) +#define LOOK_SWindowStyle_ID (LOOK_WindowStyle_ID_START+3) #define LOOK_WindowStyle_ID_END (LOOK_WindowStyle_ID_START+3) #define LOOK_MenuStyle_ID_START (LOOK_WindowStyle_ID_END+1) -#define LOOK_MenuItemStyle_ID (LOOK_MenuStyle_ID_START) -#define LOOK_MenuTitleStyle_ID (LOOK_MenuStyle_ID_START+1) -#define LOOK_MenuHiliteStyle_ID (LOOK_MenuStyle_ID_START+2) -#define LOOK_MenuStippleStyle_ID (LOOK_MenuStyle_ID_START+3) -#define LOOK_MenuSubItemStyle_ID (LOOK_MenuStyle_ID_START+4) +#define LOOK_MenuItemStyle_ID (LOOK_MenuStyle_ID_START) +#define LOOK_MenuTitleStyle_ID (LOOK_MenuStyle_ID_START+1) +#define LOOK_MenuHiliteStyle_ID (LOOK_MenuStyle_ID_START+2) +#define LOOK_MenuStippleStyle_ID (LOOK_MenuStyle_ID_START+3) +#define LOOK_MenuSubItemStyle_ID (LOOK_MenuStyle_ID_START+4) #define LOOK_MenuHiTitleStyle_ID (LOOK_MenuStyle_ID_START+6) -#define LOOK_MenuStyle_ID_END (LOOK_MenuStyle_ID_START+6) -#define LOOK_MenuItemCompositionMethod_ID (LOOK_MenuStyle_ID_END+1) +#define LOOK_MenuStyle_ID_END (LOOK_MenuStyle_ID_START+6) +#define LOOK_MenuItemCompositionMethod_ID (LOOK_MenuStyle_ID_END+1) #define LOOK_MenuHiliteCompositionMethod_ID (LOOK_MenuStyle_ID_END+2) #define LOOK_MenuStippleCompositionMethod_ID (LOOK_MenuStyle_ID_END+3) -#define LOOK_ShadeAnimationSteps_ID (LOOK_MenuStyle_ID_END+4) +#define LOOK_ShadeAnimationSteps_ID (LOOK_MenuStyle_ID_END+4) #define LOOK_TitleButtonBalloonBorderHilite_ID (LOOK_MenuStyle_ID_END+5) #define LOOK_TitleButtonBalloonXOffset_ID (LOOK_MenuStyle_ID_END+6) #define LOOK_TitleButtonBalloonYOffset_ID (LOOK_MenuStyle_ID_END+7) -#define LOOK_TitleButtonBalloonDelay_ID (LOOK_MenuStyle_ID_END+8) +#define LOOK_TitleButtonBalloonDelay_ID (LOOK_MenuStyle_ID_END+8) #define LOOK_TitleButtonBalloonCloseDelay_ID (LOOK_MenuStyle_ID_END+9) #define LOOK_TitleButtonBalloonStyle_ID (LOOK_MenuStyle_ID_END+10) #define LOOK_TitleButtonBalloons_ID (LOOK_MenuStyle_ID_END+11) #define LOOK_TitleButton_ID (LOOK_MenuStyle_ID_END+12) #define LOOK_KillBackgroundThreshold_ID (LOOK_MenuStyle_ID_END+13) #define LOOK_DontAnimateBackground_ID (LOOK_MenuStyle_ID_END+14) -#define LOOK_CoverAnimationSteps_ID (LOOK_MenuStyle_ID_END+15) +#define LOOK_CoverAnimationSteps_ID (LOOK_MenuStyle_ID_END+15) #define LOOK_CoverAnimationType_ID (LOOK_MenuStyle_ID_END+16) -#define LOOK_SupportedHints_ID (LOOK_MenuStyle_ID_END+17) +#define LOOK_SupportedHints_ID (LOOK_MenuStyle_ID_END+17) #define LOOK_MinipixmapSize_ID (LOOK_MenuStyle_ID_END+18) #define LOOK_SUPPORTED_ID_END (LOOK_MenuStyle_ID_END+32) @@ -1990,16 +1992,16 @@ struct FreeStorageElem **ComplexFunction2FreeStorage( struct SyntaxDef *syntax, /***************************************************************************/ #define INCLUDE_ID_START (LOOK_ID_END+1) -#define INCLUDE_include_ID (INCLUDE_ID_START) -#define INCLUDE_keepname_ID (INCLUDE_ID_START+1) -#define INCLUDE_extension_ID (INCLUDE_ID_START+2) +#define INCLUDE_include_ID (INCLUDE_ID_START) +#define INCLUDE_keepname_ID (INCLUDE_ID_START+1) +#define INCLUDE_extension_ID (INCLUDE_ID_START+2) #define INCLUDE_miniextension_ID (INCLUDE_ID_START+3) #define INCLUDE_minipixmap_ID (INCLUDE_ID_START+4) -#define INCLUDE_command_ID (INCLUDE_ID_START+5) +#define INCLUDE_command_ID (INCLUDE_ID_START+5) #define INCLUDE_order_ID (INCLUDE_ID_START+6) #define INCLUDE_RecentSubmenuItems_ID (INCLUDE_ID_START+7) -#define INCLUDE_name_ID (INCLUDE_ID_START+8) -#define INCLUDE_ID_END (INCLUDE_ID_START+9) +#define INCLUDE_name_ID (INCLUDE_ID_START+8) +#define INCLUDE_ID_END (INCLUDE_ID_START+9) #define FEEL_ID_START (INCLUDE_ID_END+1) @@ -2012,7 +2014,7 @@ struct FreeStorageElem **ComplexFunction2FreeStorage( struct SyntaxDef *syntax, #define FEEL_DontMoveOff_ID (FEEL_ID_START+4) #define FEEL_NoPPosition_ID (FEEL_ID_START+5) #define FEEL_StubbornPlacement_ID (FEEL_ID_START+6) - + #define FEEL_MenusHigh_ID (FEEL_ID_START+9) #define FEEL_CenterOnCirculate_ID (FEEL_ID_START+10) @@ -2065,7 +2067,7 @@ struct FreeStorageElem **ComplexFunction2FreeStorage( struct SyntaxDef *syntax, #define FEEL_RecentSubmenuItems_ID (FEEL_ID_START+53) #define FEEL_WinListSortOrder_ID (FEEL_ID_START+54) #define FEEL_WinListHideIcons_ID (FEEL_ID_START+55) -#define FEEL_AnimateDeskChange_ID (FEEL_ID_START+56) +#define FEEL_AnimateDeskChange_ID (FEEL_ID_START+56) /* obsolete stuff : */ #define FEEL_MWMFunctionHints_ID (FEEL_ID_START+45) @@ -2075,10 +2077,10 @@ struct FreeStorageElem **ComplexFunction2FreeStorage( struct SyntaxDef *syntax, #define FEEL_PLACEMENT_START_ID (FEEL_ID_START+48) #define FEEL_SmartPlacement_ID (FEEL_PLACEMENT_START_ID+0) #define FEEL_RandomPlacement_ID (FEEL_PLACEMENT_START_ID+1) -#define FEEL_Tile_ID (FEEL_PLACEMENT_START_ID+2) -#define FEEL_Cascade_ID (FEEL_PLACEMENT_START_ID+3) -#define FEEL_UnderPointer_ID (FEEL_PLACEMENT_START_ID+4) -#define FEEL_WarpPointer_ID (FEEL_PLACEMENT_START_ID+5) +#define FEEL_Tile_ID (FEEL_PLACEMENT_START_ID+2) +#define FEEL_Cascade_ID (FEEL_PLACEMENT_START_ID+3) +#define FEEL_UnderPointer_ID (FEEL_PLACEMENT_START_ID+4) +#define FEEL_WarpPointer_ID (FEEL_PLACEMENT_START_ID+5) #define FEEL_Manual_ID (FEEL_PLACEMENT_START_ID+6) #define FEEL_ID_END (FEEL_PLACEMENT_START_ID+11) @@ -2397,7 +2399,7 @@ typedef struct WinTabsConfig int ucm, fcm, scm; /* composition methods */ unsigned int h_spacing, v_spacing ; char *title, *icon_title ; - + char *GroupNameSeparator; balloonConfig *balloon_conf; @@ -2457,11 +2459,11 @@ typedef enum { typedef struct { -#define ANIMATE_SET_DELAY (0x01<<0) -#define ANIMATE_SET_ITERATIONS (0x01<<1) -#define ANIMATE_SET_TWIST (0x01<<2) -#define ANIMATE_SET_WIDTH (0x01<<3) -#define ANIMATE_SET_RESIZE (0x01<<4) +#define ANIMATE_SET_DELAY (0x01<<0) +#define ANIMATE_SET_ITERATIONS (0x01<<1) +#define ANIMATE_SET_TWIST (0x01<<2) +#define ANIMATE_SET_WIDTH (0x01<<3) +#define ANIMATE_SET_RESIZE (0x01<<4) ASFlagType set_flags ; char *color; @@ -2532,7 +2534,7 @@ void DestroyCleanConfig (CleanConfig * config); #define EVENT_WindowDeiconified 6 #define EVENT_WindowShaded 7 #define EVENT_WindowUnshaded 8 -#define EVENT_WindowStuck 9 +#define EVENT_WindowStuck 9 #define EVENT_WindowUnstuck 10 #define EVENT_WindowMaximized 11 #define EVENT_WindowRestored 12 @@ -2549,9 +2551,9 @@ void DestroyCleanConfig (CleanConfig * config); #define EVENT_ID_START (CLEAN_ID_END+1) #define EVENT_WindowAdded_ID (EVENT_ID_START+EVENT_WindowAdded) -#define EVENT_WindowNames_ID (EVENT_ID_START+EVENT_WindowNames) +#define EVENT_WindowNames_ID (EVENT_ID_START+EVENT_WindowNames) #define EVENT_WindowDestroyed_ID (EVENT_ID_START+EVENT_WindowDestroyed) -#define EVENT_WindowActivated_ID (EVENT_ID_START+EVENT_WindowActivated) +#define EVENT_WindowActivated_ID (EVENT_ID_START+EVENT_WindowActivated) #define EVENT_WindowRaised_ID (EVENT_ID_START+EVENT_WindowRaised) #define EVENT_WindowIconified_ID (EVENT_ID_START+EVENT_WindowIconified) #define EVENT_WindowDeiconified_ID (EVENT_ID_START+EVENT_WindowDeiconified) @@ -2564,13 +2566,13 @@ void DestroyCleanConfig (CleanConfig * config); #define EVENT_BackgroundChanged_ID (EVENT_ID_START+EVENT_BackgroundChanged) #define EVENT_DeskViewportChanged_ID (EVENT_ID_START+EVENT_DeskViewportChanged) #define EVENT_Startup_ID (EVENT_ID_START+EVENT_Startup) -#define EVENT_Shutdown_ID (EVENT_ID_START+EVENT_Shutdown) -#define EVENT_Config_ID (EVENT_ID_START+EVENT_Config) -#define EVENT_ModuleConfig_ID (EVENT_ID_START+EVENT_ModuleConfig) +#define EVENT_Shutdown_ID (EVENT_ID_START+EVENT_Shutdown) +#define EVENT_Config_ID (EVENT_ID_START+EVENT_Config) +#define EVENT_ModuleConfig_ID (EVENT_ID_START+EVENT_ModuleConfig) #define EVENT_ID_END (EVENT_ID_START+AFTERSTEP_EVENTS_NUM) -#define SOUND_ID_START (EVENT_ID_END+1) +#define SOUND_ID_START (EVENT_ID_END+1) #define SOUND_PCMDEVICE_ID (SOUND_ID_START+1) #define SOUND_DELAY_ID (SOUND_ID_START+2) #define SOUND_RPLAY_HOST_ID (SOUND_ID_START+3) @@ -2594,7 +2596,7 @@ typedef struct #define SOUND_SET_RPLAY_HOST (0x01<<1) #define SOUND_SET_RPLAY_PRIORITY (0x01<<2) #define SOUND_SET_RPLAY_VOLUME (0x01<<3) -*/ +*/ ASFlagType set_flags ; int delay; @@ -2630,9 +2632,9 @@ typedef struct { #define IDENT_SET_GEOMETRY (0x01<<0) ASFlagType set_flags ; - + ASGeometry geometry; - + MyStyleDefinition *style_defs; struct FreeStorageElem *more_stuff; diff --git a/libAfterStep/afterstep.h b/libAfterStep/afterstep.h index 93536bf6..f942f8f0 100644 --- a/libAfterStep/afterstep.h +++ b/libAfterStep/afterstep.h @@ -61,7 +61,7 @@ extern "C" { #define ASS_PointerOutOfScreen (0x01<<8) /* */ #define ASS_ScreenGrabbed (0x01<<9) /* XGrabScreen had been issued - we should try and avoid deadlocks ! */ -#define ASS_SuppressDeskBack (0x01<<10) +#define ASS_SuppressDeskBack (0x01<<10) #define AS_Text_ASCII 0 #define AS_Text_UTF8 1 @@ -384,6 +384,7 @@ struct ASTBarData; #define AS_ROOT_EVENT_MASK (LeaveWindowMask | \ EnterWindowMask | \ PropertyChangeMask | \ + StructureNotifyMask| \ SubstructureRedirectMask | \ /* SubstructureNotifyMask | */\ KeyPressMask | \ diff --git a/libAfterStep/background.h b/libAfterStep/background.h index f49c6141..c90f56f9 100644 --- a/libAfterStep/background.h +++ b/libAfterStep/background.h @@ -17,6 +17,7 @@ extern "C" { #define BGFLAG_PAD (1<<10) #define BGFLAG_PAD_VERT (1<<11) #define BGFLAG_PAD_HOR (1<<12) +#define BGFLAG_MIRROR (1<<13) #define BGFLAG_BAD (1<<14) #define BGFLAG_COMPLETE (1<<15) diff --git a/libAfterStep/mylook.h b/libAfterStep/mylook.h index 7bff0b89..cd2e3cba 100644 --- a/libAfterStep/mylook.h +++ b/libAfterStep/mylook.h @@ -112,9 +112,10 @@ typedef struct MyBackground ARGB32 tint; ARGB32 pad_color; ASFlagType align_flags; + int mirror; int ref_count ; - + char *loaded_im_name ; Pixmap loaded_pixmap ; }MyBackground; @@ -142,13 +143,13 @@ typedef struct MyDesktopConfig #define MYFRAME_TITLE_BACK_SPACER 1 #define MYFRAME_TITLE_BACK_TITLE_SPACER 2 #define MYFRAME_TITLE_BACK_INVALID 3 -#define MYFRAME_TITLE_SIDE_MASK 0x03 /* ORed values of everything above */ -#define MYFRAME_TITLE_SIDE_BITS 2 /* number of set bits in above mask */ +#define MYFRAME_TITLE_SIDE_MASK 0x03 /* ORed values of everything above */ +#define MYFRAME_TITLE_SIDE_BITS 2 /* number of set bits in above mask */ #define MYFRAME_GetTbarLayoutElem(layout,i) (((layout)>>((i)*MYFRAME_TITLE_SIDE_BITS))&MYFRAME_TITLE_SIDE_MASK) #define MYFRAME_SetTbarLayoutElem(layout,i,elem) (layout = (((layout)&(~(MYFRAME_TITLE_SIDE_MASK<<((i)*MYFRAME_TITLE_SIDE_BITS))))|(((elem)&MYFRAME_TITLE_SIDE_MASK)<<((i)*MYFRAME_TITLE_SIDE_BITS)))) -#define MYFRAME_TITLE_SIDE_ELEMS 3 /* number of set bits in above mask */ - +#define MYFRAME_TITLE_SIDE_ELEMS 3 /* number of set bits in above mask */ + #define MYFRAME_TITLE_BACK_TITLE_LABEL MYFRAME_TITLE_SIDE_ELEMS @@ -200,9 +201,9 @@ typedef struct MyFrame ASFlagType set_part_align ; ASFlagType part_align[FRAME_PARTS]; ASFlagType set_title_attr ; - + ASGeometry part_slicing[FRAME_SIDES]; - + #define MYFRAME_TitleFBevelSet (0x01<<1) #define MYFRAME_TitleUBevelSet (0x01<<2) #define MYFRAME_TitleSBevelSet (0x01<<3) @@ -243,7 +244,7 @@ typedef struct MyFrame ASFlagType title_fbevel, title_ubevel, title_sbevel; unsigned int title_fcm, title_ucm, title_scm ; - int title_fhue, title_uhue, title_shue; + int title_fhue, title_uhue, title_shue; unsigned int title_fsat, title_usat, title_ssat; ASFlagType title_align, title_backs_align[MYFRAME_TITLE_BACKS]; ASGeometry title_backs_slicing[MYFRAME_TITLE_BACKS]; diff --git a/libAfterStep/screen.c b/libAfterStep/screen.c index 35a3d901..2f9e470f 100644 --- a/libAfterStep/screen.c +++ b/libAfterStep/screen.c @@ -156,6 +156,8 @@ void get_Xinerama_rectangles (ScreenInfo * scr) for (i = 0; i < scr->xinerama_screens_num; ++i) { char *append_point = &buf[0]; + show_progress("xroot.xinerama_screens[%d] = {%d, %d, %d, %d, %d}", i, s[i].screen_number, s[i].x_org, s[i].y_org, s[i].width, s[i].height); + sprintf (append_point, "xroot.xinerama_screens[%d].", i); append_point += 23; while (*append_point) @@ -177,6 +179,8 @@ void get_Xinerama_rectangles (ScreenInfo * scr) strcpy (append_point, "height"); asxml_var_insert (&buf[0], s[i].height); scr->xinerama_screens[i].height = s[i].height; + + /* what about screen_number ? */ } XFree (s); } @@ -293,12 +297,50 @@ void init_ScreenInfo (ScreenInfo * scr) } } -int ConnectXDisplay (Display * display, ScreenInfo * scr, Bool as_manager) +void setupScreenSize(ScreenInfo *scr) { int width_mm, height_mm; int display_dpcmx = 0, display_dpcmy = 0; int button_w, button_h, mini_w, mini_h; + scr->MyDisplayWidth = DisplayWidth (dpy, scr->screen); + scr->MyDisplayHeight = DisplayHeight (dpy, scr->screen); + + asxml_var_insert ("xroot.width", scr->MyDisplayWidth); + asxml_var_insert ("xroot.height", scr->MyDisplayHeight); + + width_mm = DisplayWidthMM (dpy, scr->screen); + height_mm = DisplayHeightMM (dpy, scr->screen); + asxml_var_insert ("xroot.widthmm", width_mm); + asxml_var_insert ("xroot.heightmm", height_mm); + + display_dpcmx = (scr->MyDisplayWidth * 10) / width_mm; + display_dpcmy = (scr->MyDisplayHeight * 10) / height_mm; + + button_w = (display_dpcmx < 50) ? 48 : 64; + button_h = (display_dpcmy < 50) ? 48 : 64; + mini_w = + (display_dpcmx <= 44) ? max (display_dpcmx / 2, + 12) : display_dpcmx - 20; + mini_h = + (display_dpcmy <= 44) ? max (display_dpcmy / 2, + 12) : display_dpcmy - 20; + asxml_var_insert (ASXMLVAR_IconButtonWidth, button_w); + asxml_var_insert (ASXMLVAR_IconButtonHeight, button_h); + asxml_var_insert (ASXMLVAR_IconWidth, (button_w * 3) / 4); + asxml_var_insert (ASXMLVAR_IconHeight, (button_h * 3) / 4); + asxml_var_insert (ASXMLVAR_MinipixmapWidth, mini_w); + asxml_var_insert (ASXMLVAR_MinipixmapHeight, mini_h); + asxml_var_insert (ASXMLVAR_TitleFontSize, (mini_h * 7) / 12); + asxml_var_insert (ASXMLVAR_MenuFontSize, (mini_h * 7) / 12 + 1); + asxml_var_insert ("font.size", ((mini_h * 7) / 12)); + + scr->RootClipArea.width = scr->MyDisplayWidth; + scr->RootClipArea.height = scr->MyDisplayHeight; +} + +int ConnectXDisplay (Display * display, ScreenInfo * scr, Bool as_manager) +{ if (display == NULL) return -1; @@ -338,43 +380,9 @@ int ConnectXDisplay (Display * display, ScreenInfo * scr, Bool as_manager) } scr->NumberOfScreens = NumberOfScreens = ScreenCount (dpy); - scr->MyDisplayWidth = DisplayWidth (dpy, scr->screen); - scr->MyDisplayHeight = DisplayHeight (dpy, scr->screen); - - asxml_var_insert ("xroot.width", scr->MyDisplayWidth); - asxml_var_insert ("xroot.height", scr->MyDisplayHeight); - - width_mm = DisplayWidthMM (dpy, scr->screen); - height_mm = DisplayHeightMM (dpy, scr->screen); - asxml_var_insert ("xroot.widthmm", width_mm); - asxml_var_insert ("xroot.heightmm", height_mm); - - display_dpcmx = (scr->MyDisplayWidth * 10) / width_mm; - display_dpcmy = (scr->MyDisplayHeight * 10) / height_mm; - - button_w = (display_dpcmx < 50) ? 48 : 64; - button_h = (display_dpcmy < 50) ? 48 : 64; - mini_w = - (display_dpcmx <= 44) ? max (display_dpcmx / 2, - 12) : display_dpcmx - 20; - mini_h = - (display_dpcmy <= 44) ? max (display_dpcmy / 2, - 12) : display_dpcmy - 20; - asxml_var_insert (ASXMLVAR_IconButtonWidth, button_w); - asxml_var_insert (ASXMLVAR_IconButtonHeight, button_h); - asxml_var_insert (ASXMLVAR_IconWidth, (button_w * 3) / 4); - asxml_var_insert (ASXMLVAR_IconHeight, (button_h * 3) / 4); - asxml_var_insert (ASXMLVAR_MinipixmapWidth, mini_w); - asxml_var_insert (ASXMLVAR_MinipixmapHeight, mini_h); - asxml_var_insert (ASXMLVAR_TitleFontSize, (mini_h * 7) / 12); - asxml_var_insert (ASXMLVAR_MenuFontSize, (mini_h * 7) / 12 + 1); - asxml_var_insert ("font.size", ((mini_h * 7) / 12)); - + setupScreenSize(scr); scr->CurrentDesk = -1; - scr->RootClipArea.width = scr->MyDisplayWidth; - scr->RootClipArea.height = scr->MyDisplayHeight; - if ((scr->wmprops = setup_wmprops (scr, as_manager, 0xFFFFFFFF, NULL)) == NULL) return -1; diff --git a/libAfterStep/screen.h b/libAfterStep/screen.h index d7448849..38ac8aa1 100644 --- a/libAfterStep/screen.h +++ b/libAfterStep/screen.h @@ -86,7 +86,7 @@ typedef struct ScreenInfo Bool localhost ; char *rdisplay_string, *display_string; - + struct ASWMProps *wmprops; /* window management properties */ struct ASVisual *asv ; /* ASVisual for libAfterImage */ @@ -142,7 +142,7 @@ typedef struct ScreenInfo Cursor standard_cursors[MAX_CURSORS]; GC DrawGC; /* GC to draw lines for move and resize */ - GC RootGC; /* GC to draw on the root window - + GC RootGC; /* GC to draw on the root window - separate as it may have different color depth */ int xinerama_screens_num ; @@ -152,7 +152,7 @@ typedef struct ScreenInfo struct ASImageManager *image_manager ; Bool (*on_dead_window)( Window w ); - + /* supported X extentions : */ int XineEventBase, XineErrorBase; int ShmCompletionEventType ; @@ -189,6 +189,7 @@ void get_Xinerama_rectangles (ScreenInfo * scr); #endif Bool set_synchronous_mode (Bool enable); +void setupScreenSize(ScreenInfo *scr); int ConnectXDisplay (Display *display, ScreenInfo * scr, Bool as_manager); /* this is a shortcut to above : */ int ConnectX (ScreenInfo * scr, unsigned long event_mask); diff --git a/src/Banner/Makefile.in b/src/Banner/Makefile.in index 150efe61..6b87fe86 100644 --- a/src/Banner/Makefile.in +++ b/src/Banner/Makefile.in @@ -1,18 +1,18 @@ OBJS = -PROG = Banner +PROG = SCRIPTS = Banner -LIBS_PRIVATE = -LIBS_DEPEND = +LIBS_PRIVATE = +LIBS_DEPEND = -Banner: +Banner: $(CP) Banner.sh Banner @MAKEFILECOMMON@ module.clean: - -install: $(PROG) install.script + +install: Banner install.script uninstall: uninstall.script diff --git a/src/afterstep/events.c b/src/afterstep/events.c index e9ed3c71..d7e2baec 100644 --- a/src/afterstep/events.c +++ b/src/afterstep/events.c @@ -712,6 +712,12 @@ void DispatchEvent (ASEvent * event, Bool deffered) event->x.xconfigure.width, event->x.xconfigure.height, event->x.xconfigure.x, event->x.xconfigure.y); on_window_moveresize (event->client, event->w); + }else if (event->w == Scr.Root) { + ("ConfigureNotify:(RootWindow,%dx%d)", + event->x.xconfigure.width, event->x.xconfigure.height); + setupScreenSize(&Scr); + //Scr.MyDisplayWidth = event->x.xconfigure.width; + //Scr.MyDisplayHeight = event->x.xconfigure.height; } break; case ConfigureRequest: -- 2.22.0