Hello, Presently in E you can set a global setting in the config panel that specifies you prefer the NetwM icon on your borders, or the icon you specified in your .desktop files.
This works well, however does not seem to suit certain applications such as pidgin or gimp. These do not work too well (for me) because they have multiple windows, some of which I prefer the NetWM icon and some of which I prefer my .desktop icon. As a result I have created a patch to override the global setting on a border by border basis (And allow it to be remembered). If you apply the patch and right click on the border you will notice the "Border" menu now has a submenu. In there you will find the options to override the default behavior. Additionally, if you wish the behavior to be remembered, use the "Remember" menu and select the "Icon Preference" as the thing to remember. Attached is said patch. Wanted to bounce it off the ML for thoughts and opinions. If there are no objections, I'll commit it in the next few days. -- Regards, Ravenlock
Index: e17/apps/e/src/bin/e_border.c =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.594 diff -u -r1.594 e_border.c --- e17/apps/e/src/bin/e_border.c 10 Jun 2007 04:39:51 -0000 1.594 +++ e17/apps/e/src/bin/e_border.c 1 Jul 2007 13:01:56 -0000 @@ -2614,7 +2614,7 @@ } return o; } - if (e_config->use_app_icon) + if (e_config->use_app_icon && bd->icon_preference != E_ICON_PREF_USER) { if (bd->client.netwm.icons) { @@ -2628,10 +2628,11 @@ } if (!o) { - if (bd->desktop) + if (bd->desktop && bd->icon_preference != E_ICON_PREF_NETWM) { o = e_util_desktop_icon_add(bd->desktop, "24x24", evas); - return o; + if (o) + return o; } else if (bd->client.netwm.icons) { @@ -5629,6 +5630,8 @@ } if (rem->apply & E_REMEMBER_APPLY_SKIP_WINLIST) bd->user_skip_winlist = rem->prop.skip_winlist; + if (rem->apply & E_REMEMBER_APPLY_ICON_PREF) + bd->icon_preference = rem->prop.icon_preference; } } Index: e17/apps/e/src/bin/e_border.h =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_border.h,v retrieving revision 1.160 diff -u -r1.160 e_border.h --- e17/apps/e/src/bin/e_border.h 10 Jun 2007 04:21:05 -0000 1.160 +++ e17/apps/e/src/bin/e_border.h 1 Jul 2007 13:01:57 -0000 @@ -3,6 +3,13 @@ */ #ifdef E_TYPEDEFS +typedef enum _E_Icon_Preferece +{ + E_ICON_PREF_E_DEFAULT, + E_ICON_PREF_NETWM, + E_ICON_PREF_USER +} E_Icon_Preference; + typedef enum _E_Direction { E_DIRECTION_UP, @@ -384,7 +391,8 @@ double ping; unsigned char changed : 1; - + + unsigned char icon_preference; unsigned char ignore_first_unmap; unsigned char resize_mode; Index: e17/apps/e/src/bin/e_config.c =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_config.c,v retrieving revision 1.246 diff -u -r1.246 e_config.c --- e17/apps/e/src/bin/e_config.c 12 Jun 2007 19:00:15 -0000 1.246 +++ e17/apps/e/src/bin/e_config.c 1 Jul 2007 13:01:58 -0000 @@ -303,6 +303,7 @@ E_CONFIG_VAL(D, T, prop.zone, INT); E_CONFIG_VAL(D, T, prop.head, INT); E_CONFIG_VAL(D, T, prop.command, STR); + E_CONFIG_VAL(D, T, prop.icon_preference, UCHAR); _e_config_color_class_edd = E_CONFIG_DD_NEW("E_Color_Class", E_Color_Class); #undef T Index: e17/apps/e/src/bin/e_int_border_menu.c =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_border_menu.c,v retrieving revision 1.64 diff -u -r1.64 e_int_border_menu.c --- e17/apps/e/src/bin/e_int_border_menu.c 18 Jun 2007 18:46:33 -0000 1.64 +++ e17/apps/e/src/bin/e_int_border_menu.c 1 Jul 2007 13:01:59 -0000 @@ -35,6 +35,10 @@ static void _e_border_menu_cb_fav_add(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_ibar_add_pre(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_ibar_add(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_border_pre(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_iconpref_e(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_iconpref_user(void *data, E_Menu *m, E_Menu_Item *mi); EAPI void e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_X_Time timestamp) @@ -162,16 +166,15 @@ e_theme_edje_file_get("base/theme/borders", "e/widgets/border/default/remember"), "e/widgets/border/default/remember"); - if (!bd->lock_border) - { - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Borders")); - e_menu_item_callback_set(mi, _e_border_menu_cb_border, bd); - e_menu_item_icon_edje_set(mi, - e_theme_edje_file_get("base/theme/borders", - "e/widgets/border/default/borderless"), - "e/widgets/border/default/borderless"); - } + + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Border")); + e_menu_item_submenu_pre_callback_set(mi, _e_border_menu_cb_border_pre, bd); + e_menu_item_icon_edje_set(mi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/borderless"), + "e/widgets/border/default/borderless"); + if (!bd->sticky) { @@ -748,6 +751,96 @@ { e_border_lower(bd); } +} + +static void +_e_border_menu_cb_border_pre(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Menu *subm; + E_Menu_Item *submi; + E_Border *bd; + Evas_Object *o; + Evas *evas; + + bd = data; + if (!bd) return; + + subm = e_menu_new(); + e_object_data_set(E_OBJECT(subm), bd); + e_menu_item_submenu_set(mi, subm); + + if (!bd->lock_border) + { + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Select Border Style")); + e_menu_item_callback_set(submi, _e_border_menu_cb_border, bd); + e_menu_item_icon_edje_set(submi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/borderless"), + "e/widgets/border/default/borderless"); + } + + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Use E17 Default Icon Preference")); + e_menu_item_radio_set(submi, 1); + e_menu_item_radio_group_set(submi, 2); + e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_E_DEFAULT ? 1 : 0)); + e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_e, bd); + + submi = e_menu_item_new(subm); + evas = submi->menu->evas; + e_menu_item_label_set(submi, _("Use Application Provided Icon ")); + e_menu_item_radio_set(submi, 1); + e_menu_item_radio_group_set(submi, 2); + e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_NETWM ? 1 : 0)); + e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_netwm, bd); + + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Use User Defined Icon")); + e_menu_item_radio_set(submi, 1); + e_menu_item_radio_group_set(submi, 2); + e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_USER ? 1 : 0)); + e_util_desktop_menu_item_icon_add(bd->desktop, "16x16", submi); + e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_user, bd); +} + +static void +_e_border_menu_cb_iconpref_e(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Border *bd; + + bd = data; + if (!bd) return; + + bd->icon_preference = E_ICON_PREF_E_DEFAULT; + bd->changes.icon = 1; + bd->changed = 1; +} + +static void +_e_border_menu_cb_iconpref_user(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Border *bd; + + bd = data; + if (!bd) return; + + bd->icon_preference = E_ICON_PREF_USER; + bd->changes.icon = 1; + bd->changed = 1; +} + +static void +_e_border_menu_cb_iconpref_netwm(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Border *bd; + + bd = data; + if (!bd) return; + + bd->icon_preference = E_ICON_PREF_NETWM; + bd->changes.icon = 1; + bd->changed = 1; } static void Index: e17/apps/e/src/bin/e_int_border_remember.c =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_border_remember.c,v retrieving revision 1.15 diff -u -r1.15 e_int_border_remember.c --- e17/apps/e/src/bin/e_int_border_remember.c 24 Apr 2007 13:28:25 -0000 1.15 +++ e17/apps/e/src/bin/e_int_border_remember.c 1 Jul 2007 13:01:59 -0000 @@ -43,6 +43,7 @@ int apply_zone; int apply_skip_winlist; int apply_run; + int apply_icon_pref; } remember; }; @@ -98,6 +99,7 @@ if (cfdata->border->remember->apply & E_REMEMBER_APPLY_ZONE) cfdata->remember.apply_zone = 1; if (cfdata->border->remember->apply & E_REMEMBER_APPLY_SKIP_WINLIST) cfdata->remember.apply_skip_winlist = 1; if (cfdata->border->remember->apply & E_REMEMBER_APPLY_RUN) cfdata->remember.apply_run = 1; + if (cfdata->border->remember->apply & E_REMEMBER_APPLY_ICON_PREF) cfdata->remember.apply_icon_pref = 1; } if (!cfdata->border->remember) cfdata->mode = MODE_NOTHING; else if ((cfdata->remember.apply_pos) && (cfdata->remember.apply_size) && @@ -289,7 +291,7 @@ (cfdata->remember.apply_border) || (cfdata->remember.apply_sticky) || (cfdata->remember.apply_desktop) || (cfdata->remember.apply_shade) || (cfdata->remember.apply_zone) || (cfdata->remember.apply_skip_winlist) || - (cfdata->remember.apply_run))) + (cfdata->remember.apply_run) || (cfdata->remember.apply_icon_pref))) { if (cfdata->border->remember) { @@ -397,6 +399,7 @@ if (cfdata->remember.apply_zone) cfdata->border->remember->apply |= E_REMEMBER_APPLY_ZONE; if (cfdata->remember.apply_skip_winlist) cfdata->border->remember->apply |= E_REMEMBER_APPLY_SKIP_WINLIST; if (cfdata->remember.apply_run) cfdata->border->remember->apply |= E_REMEMBER_APPLY_RUN; + if (cfdata->remember.apply_icon_pref) cfdata->border->remember->apply |= E_REMEMBER_APPLY_ICON_PREF; cfdata->border->remember->apply_first_only = cfdata->remember.apply_first_only; e_remember_update(cfdata->border->remember, cfdata->border); } @@ -493,6 +496,8 @@ e_widget_frametable_object_append(of, ob, 0, 3, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Border style"), &(cfdata->remember.apply_border)); e_widget_frametable_object_append(of, ob, 0, 4, 1, 1, 1, 1, 1, 1); + ob = e_widget_check_add(evas, _("Icon Preference"), &(cfdata->remember.apply_icon_pref)); + e_widget_frametable_object_append(of, ob, 0, 5, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Stickiness"), &(cfdata->remember.apply_sticky)); e_widget_frametable_object_append(of, ob, 1, 0, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Virtual Desktop"), &(cfdata->remember.apply_desktop)); Index: e17/apps/e/src/bin/e_remember.c =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_remember.c,v retrieving revision 1.23 diff -u -r1.23 e_remember.c --- e17/apps/e/src/bin/e_remember.c 21 Feb 2007 00:24:53 -0000 1.23 +++ e17/apps/e/src/bin/e_remember.c 1 Jul 2007 13:02:00 -0000 @@ -288,7 +288,8 @@ rem->prop.shaded = 50 + bd->shade.dir; rem->prop.skip_winlist = bd->user_skip_winlist; - + rem->prop.icon_preference = bd->icon_preference; + e_desk_xy_get(bd->desk, &rem->prop.desk_x, &rem->prop.desk_y); rem->prop.zone = bd->zone->num; Index: e17/apps/e/src/bin/e_remember.h =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_remember.h,v retrieving revision 1.10 diff -u -r1.10 e_remember.h --- e17/apps/e/src/bin/e_remember.h 4 Jan 2007 10:30:55 -0000 1.10 +++ e17/apps/e/src/bin/e_remember.h 1 Jul 2007 13:02:00 -0000 @@ -23,6 +23,7 @@ #define E_REMEMBER_APPLY_ZONE (1 << 8) #define E_REMEMBER_APPLY_RUN (1 << 9) #define E_REMEMBER_APPLY_SKIP_WINLIST (1 << 10) +#define E_REMEMBER_APPLY_ICON_PREF (1 << 11) #else #ifndef E_REMEMBER_H @@ -79,6 +80,7 @@ unsigned char sticky; unsigned char shaded; unsigned char skip_winlist; + unsigned char icon_preference; int desk_x, desk_y; int zone;
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel