Allow users to remove border resistance on a per border basis.

SVN revision: 56745
This commit is contained in:
Eric Schuele 2011-02-06 02:04:37 +00:00
parent b7cfdd21f1
commit 440c33eecf
9 changed files with 47 additions and 5 deletions

View File

@ -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...

View File

@ -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*/

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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;

View File

@ -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);
}