diff --git a/src/bin/e_border.c b/src/bin/e_border.c index e9730e143..81491c312 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -590,6 +590,8 @@ e_border_new(E_Container *con, bd->changes.icon = 1; bd->changes.size = 1; bd->changes.shape = 1; + + bd->offer_resistance = 1; /* just to friggin make java happy - we're DELAYING the reparent until * eval time... diff --git a/src/bin/e_border.h b/src/bin/e_border.h index 3811fc3dc..0bc6ee503 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -443,6 +443,7 @@ struct _E_Border unsigned int need_maximize : 1; E_Maximize maximized; unsigned int borderless : 1; + unsigned int offer_resistance : 1; const char *bordername; unsigned int lock_user_location : 1; /*DONE*/ diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 34ef4c51d..648c6ed09 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -470,6 +470,7 @@ e_config_init(void) E_CONFIG_VAL(D, T, prop.command, STR); E_CONFIG_VAL(D, T, prop.icon_preference, UCHAR); E_CONFIG_VAL(D, T, prop.desktop_file, STR); + E_CONFIG_VAL(D, T, prop.offer_resistance, UCHAR); _e_config_color_class_edd = E_CONFIG_DD_NEW("E_Color_Class", E_Color_Class); #undef T diff --git a/src/bin/e_config.h b/src/bin/e_config.h index d985c934f..cb73441e2 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -32,7 +32,7 @@ typedef struct _E_Event_Config_Icon_Theme E_Event_Config_Icon_Theme; /* increment this whenever a new set of config values are added but the users * config doesn't need to be wiped - simply new values need to be put in */ -#define E_CONFIG_FILE_GENERATION 0x0141 +#define E_CONFIG_FILE_GENERATION 0x0142 #define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH << 16) | E_CONFIG_FILE_GENERATION) #define E_EVAS_ENGINE_DEFAULT 0 diff --git a/src/bin/e_int_border_menu.c b/src/bin/e_int_border_menu.c index 9f003118e..e9b568a81 100644 --- a/src/bin/e_int_border_menu.c +++ b/src/bin/e_int_border_menu.c @@ -15,6 +15,7 @@ static void _e_border_menu_cb_maximize_vertically(void *data, E_Menu *m, E_Menu_ static void _e_border_menu_cb_maximize_horizontally(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_unmaximize(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_shade(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_resistance(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_application_add_pre(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_more_pre(void *data, E_Menu *m, E_Menu_Item *mi); @@ -502,6 +503,15 @@ _e_border_menu_cb_shade(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUS } } +static void +_e_border_menu_cb_resistance(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__) +{ + E_Border *bd; + + bd = data; + bd->offer_resistance = !bd->offer_resistance; +} + static void _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi __UNUSED__) { @@ -997,6 +1007,17 @@ _e_border_menu_cb_border_pre(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi) e_menu_item_toggle_set(submi, (bd->icon_preference == E_ICON_PREF_USER ? 1 : 0)); e_util_desktop_menu_item_icon_add(bd->desktop, 16, submi); e_menu_item_callback_set(submi, _e_border_menu_cb_iconpref_user, bd); + e_menu_item_separator_set(submi, 1); + + submi = e_menu_item_new(subm); + e_menu_item_label_set(submi, _("Offer Resistance")); + e_menu_item_check_set(submi, 1); + e_menu_item_toggle_set(submi, (bd->offer_resistance ? 1 : 0)); + e_menu_item_callback_set(submi, _e_border_menu_cb_resistance, 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"); } static void diff --git a/src/bin/e_int_border_remember.c b/src/bin/e_int_border_remember.c index 7d78e8113..e42272a95 100644 --- a/src/bin/e_int_border_remember.c +++ b/src/bin/e_int_border_remember.c @@ -53,6 +53,7 @@ struct _E_Config_Dialog_Data int apply_desktop_file; int set_focus_on_start; int keep_settings; + int offer_resistance; } remember; int applied; @@ -227,6 +228,8 @@ _fill_data(E_Config_Dialog_Data *cfdata) cfdata->remember.apply_icon_pref = 1; if (rem->apply & E_REMEMBER_SET_FOCUS_ON_START) cfdata->remember.set_focus_on_start = 1; + if (rem->apply & E_REMEMBER_APPLY_OFFER_RESISTANCE) + cfdata->remember.offer_resistance = 1; } if (!rem) cfdata->mode = MODE_NOTHING; @@ -424,7 +427,8 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) E_REMEMBER_APPLY_LOCKS | E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY | E_REMEMBER_APPLY_DESKTOP | E_REMEMBER_APPLY_SHADE | E_REMEMBER_APPLY_ZONE | E_REMEMBER_APPLY_SKIP_WINLIST | E_REMEMBER_APPLY_SKIP_PAGER | - E_REMEMBER_APPLY_SKIP_TASKBAR | E_REMEMBER_APPLY_FULLSCREEN | E_REMEMBER_APPLY_ICON_PREF; + E_REMEMBER_APPLY_SKIP_TASKBAR | E_REMEMBER_APPLY_FULLSCREEN | E_REMEMBER_APPLY_ICON_PREF | + E_REMEMBER_APPLY_OFFER_RESISTANCE; rem->apply_first_only = 0; @@ -577,6 +581,8 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) rem->apply |= E_REMEMBER_APPLY_ICON_PREF; if (cfdata->remember.set_focus_on_start) rem->apply |= E_REMEMBER_SET_FOCUS_ON_START; + if (cfdata->remember.offer_resistance) + rem->apply |= E_REMEMBER_APPLY_OFFER_RESISTANCE; if (!rem->apply && !rem->prop.desktop_file) { @@ -738,9 +744,12 @@ _advanced_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_D ob = e_widget_check_add(evas, _("Skip Taskbar"), &(cfdata->remember.apply_skip_taskbar)); e_widget_frametable_object_append(of, ob, 1, 6, 1, 1, 1, 1, 1, 1); + ob = e_widget_check_add(evas, _("Offer Resistance"), + &(cfdata->remember.offer_resistance)); + e_widget_frametable_object_append(of, ob, 1, 7, 1, 1, 1, 1, 1, 1); ob = e_widget_check_add(evas, _("Application file or name (.desktop)"), &(cfdata->remember.apply_desktop_file)); - e_widget_frametable_object_append(of, ob, 0, 7, 2, 1, 1, 1, 1, 1); + e_widget_frametable_object_append(of, ob, 0, 7, 1, 1, 1, 1, 1, 1); ob = e_widget_entry_add(evas, &cfdata->desktop, NULL, NULL, NULL); e_widget_frametable_object_append(of, ob, 0, 8, 2, 1, 1, 1, 1, 1); e_widget_table_object_append(o, of, 1, 0, 1, 2, 1, 1, 1, 1); diff --git a/src/bin/e_remember.c b/src/bin/e_remember.c index 44d95d810..e069a765d 100644 --- a/src/bin/e_remember.c +++ b/src/bin/e_remember.c @@ -114,7 +114,8 @@ e_remember_internal_save(void) E_REMEMBER_APPLY_DESKTOP | E_REMEMBER_APPLY_LOCKS | E_REMEMBER_APPLY_SKIP_WINLIST | E_REMEMBER_APPLY_SKIP_PAGER | - E_REMEMBER_APPLY_SKIP_TASKBAR); + E_REMEMBER_APPLY_SKIP_TASKBAR | + E_REMEMBER_APPLY_OFFER_RESISTANCE); _e_remember_update(bd, rem); remembers->list = eina_list_append(remembers->list, rem); @@ -438,6 +439,8 @@ _e_remember_update(E_Border *bd, E_Remember *rem) e_desk_xy_get(bd->desk, &rem->prop.desk_x, &rem->prop.desk_y); if (rem->apply & E_REMEMBER_APPLY_FULLSCREEN) rem->prop.fullscreen = bd->fullscreen; + if (rem->apply & E_REMEMBER_APPLY_OFFER_RESISTANCE) + rem->prop.offer_resistance = bd->offer_resistance; } /* local subsystem functions */ @@ -856,6 +859,8 @@ _e_remember_cb_hook_pre_post_fetch(void *data __UNUSED__, void *border) bd->client.netwm.state.skip_taskbar = rem->prop.skip_taskbar; if (rem->apply & E_REMEMBER_APPLY_ICON_PREF) bd->icon_preference = rem->prop.icon_preference; + if (rem->apply & E_REMEMBER_APPLY_OFFER_RESISTANCE) + bd->offer_resistance = rem->prop.offer_resistance; if (rem->apply & E_REMEMBER_SET_FOCUS_ON_START) bd->want_focus = 1; @@ -929,6 +934,7 @@ _e_remember_init_edd(void) E_CONFIG_VAL(D, T, prop.command, STR); E_CONFIG_VAL(D, T, prop.icon_preference, UCHAR); E_CONFIG_VAL(D, T, prop.desktop_file, STR); + E_CONFIG_VAL(D, T, prop.offer_resistance, UCHAR); #undef T #undef D e_remember_list_edd = E_CONFIG_DD_NEW("E_Remember_List", E_Remember_List); diff --git a/src/bin/e_remember.h b/src/bin/e_remember.h index a9bc6c128..36be9d00d 100644 --- a/src/bin/e_remember.h +++ b/src/bin/e_remember.h @@ -25,6 +25,7 @@ typedef struct _E_Remember E_Remember; #define E_REMEMBER_APPLY_ICON_PREF (1 << 13) #define E_REMEMBER_SET_FOCUS_ON_START (1 << 14) #define E_REMEMBER_APPLY_FULLSCREEN (1 << 15) +#define E_REMEMBER_APPLY_OFFER_RESISTANCE (1 << 16) #define E_REMEMBER_INTERNAL_DIALOGS (1 << 0) #define E_REMEMBER_INTERNAL_FM_WINS (1 << 1) @@ -88,6 +89,7 @@ struct _E_Remember unsigned char skip_pager; unsigned char skip_taskbar; unsigned char icon_preference; + unsigned char offer_resistance; int desk_x, desk_y; int zone; diff --git a/src/bin/e_resist.c b/src/bin/e_resist.c index ea6c09c4f..78bdb3ee3 100644 --- a/src/bin/e_resist.c +++ b/src/bin/e_resist.c @@ -74,7 +74,7 @@ e_resist_container_border_position(E_Container *con, Eina_List *skiplist, break; } } - if (ok) + if (ok && bd->offer_resistance) { OBSTACLE(bd->x, bd->y, bd->w, bd->h, e_config->window_resist); }