Sophie

Sophie

distrib > Mageia > 9 > armv7hl > by-pkgid > 70db79aeb6f762d1452a58a64b648349 > files > 12

afterstep-2.2.12-22.mga9.src.rpm

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