forked from enlightenment/enlightenment
various patches from the devel mailing list in - and fixed where needed.
SVN revision: 30818
This commit is contained in:
parent
0a1b9cb6e9
commit
2e875d3805
|
@ -2628,7 +2628,7 @@ e_border_icon_add(E_Border *bd, Evas *evas)
|
|||
}
|
||||
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)
|
||||
{
|
||||
|
@ -2642,10 +2642,11 @@ e_border_icon_add(E_Border *bd, Evas *evas)
|
|||
}
|
||||
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)
|
||||
{
|
||||
|
@ -5643,6 +5644,8 @@ _e_border_eval(E_Border *bd)
|
|||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
@ -390,7 +397,8 @@ struct _E_Border
|
|||
double ping;
|
||||
|
||||
unsigned char changed : 1;
|
||||
|
||||
|
||||
unsigned char icon_preference;
|
||||
unsigned char ignore_first_unmap;
|
||||
unsigned char resize_mode;
|
||||
|
||||
|
|
|
@ -303,6 +303,7 @@ e_config_init(void)
|
|||
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
|
||||
|
@ -1060,6 +1061,10 @@ e_config_init(void)
|
|||
"e.event.shade",
|
||||
E_BINDING_MODIFIER_NONE, 1,
|
||||
"window_shaded_toggle", "up");
|
||||
CFG_SIGNALBIND(E_BINDING_CONTEXT_BORDER, "mouse,clicked,?",
|
||||
"e.event.lower",
|
||||
E_BINDING_MODIFIER_NONE, 1,
|
||||
"window_lower", NULL);
|
||||
CFG_SIGNALBIND(E_BINDING_CONTEXT_BORDER, "mouse,down,1",
|
||||
"e.event.icon",
|
||||
E_BINDING_MODIFIER_NONE, 1,
|
||||
|
|
|
@ -35,6 +35,10 @@ static void _e_border_menu_cb_skip(void *data, E_Menu *m, E_Menu_Item *mi);
|
|||
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)
|
||||
|
@ -164,16 +168,13 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
|
|||
"e/widgets/border/default/remember");
|
||||
if (!bd->lock_border)
|
||||
{
|
||||
if (e_configure_registry_exists("internal/borders_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",
|
||||
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");
|
||||
}
|
||||
"e/widgets/border/default/borderless");
|
||||
}
|
||||
|
||||
if (!bd->sticky)
|
||||
|
@ -756,6 +757,99 @@ _e_border_menu_cb_lower(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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (e_configure_registry_exists("internal/borders_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
|
||||
_e_border_menu_cb_state_pre(void *data, E_Menu *m, E_Menu_Item *mi)
|
||||
{
|
||||
|
|
|
@ -43,6 +43,7 @@ struct _E_Config_Dialog_Data
|
|||
int apply_zone;
|
||||
int apply_skip_winlist;
|
||||
int apply_run;
|
||||
int apply_icon_pref;
|
||||
} remember;
|
||||
};
|
||||
|
||||
|
@ -98,6 +99,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
|||
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 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
(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 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
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 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
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));
|
||||
|
|
|
@ -288,7 +288,8 @@ e_remember_update(E_Remember *rem, E_Border *bd)
|
|||
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;
|
||||
|
|
|
@ -23,6 +23,7 @@ typedef struct _E_Remember E_Remember;
|
|||
#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 @@ struct _E_Remember
|
|||
unsigned char sticky;
|
||||
unsigned char shaded;
|
||||
unsigned char skip_winlist;
|
||||
unsigned char icon_preference;
|
||||
|
||||
int desk_x, desk_y;
|
||||
int zone;
|
||||
|
|
|
@ -5,7 +5,8 @@ typedef enum _Pager_Grab_Button Pager_Grab_Button;
|
|||
enum _Pager_Grab_Button
|
||||
{
|
||||
GRAB_BUTTON_DRAG,
|
||||
GRAB_BUTTON_NOPLACE
|
||||
GRAB_BUTTON_NOPLACE,
|
||||
GRAB_BUTTON_DESK
|
||||
};
|
||||
|
||||
struct _E_Config_Dialog_Data
|
||||
|
@ -16,8 +17,9 @@ struct _E_Config_Dialog_Data
|
|||
int popup_urgent_stick;
|
||||
double popup_urgent_speed;
|
||||
int drag_resist;
|
||||
unsigned char btn_drag;
|
||||
unsigned char btn_noplace;
|
||||
unsigned int btn_drag;
|
||||
unsigned int btn_noplace;
|
||||
unsigned int btn_desk;
|
||||
int flip_desk;
|
||||
|
||||
struct {
|
||||
|
@ -32,6 +34,7 @@ struct _E_Config_Dialog_Data
|
|||
Evas_Object *o_urgent_speed;
|
||||
Evas_Object *o_btn1;
|
||||
Evas_Object *o_btn2;
|
||||
Evas_Object *o_btn3;
|
||||
} gui;
|
||||
};
|
||||
|
||||
|
@ -85,6 +88,7 @@ _fill_data(Config_Item *ci, E_Config_Dialog_Data *cfdata)
|
|||
cfdata->drag_resist = pager_config->drag_resist;
|
||||
cfdata->btn_drag = pager_config->btn_drag;
|
||||
cfdata->btn_noplace = pager_config->btn_noplace;
|
||||
cfdata->btn_desk = pager_config->btn_desk;
|
||||
cfdata->flip_desk = pager_config->flip_desk;
|
||||
}
|
||||
|
||||
|
@ -144,17 +148,22 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
|||
e_widget_frametable_object_append(of, ob, 1, 2, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_label_add(evas, _("Drag and Drop button (Keeps rel. loc.)"));
|
||||
e_widget_frametable_object_append(of, ob, 1, 3, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_label_add(evas, _("Drag whole desktop (Move every windowsof a desk)"));
|
||||
e_widget_frametable_object_append(of, ob, 1, 4, 1, 1, 1, 1, 1, 1);
|
||||
ob = e_widget_button_add(evas, _("Click to set"), NULL, _grab_wnd_show, (void *)GRAB_BUTTON_DRAG, cfdata);
|
||||
e_widget_frametable_object_append(of, ob, 2, 2, 1, 1, 1, 1, 0, 0);
|
||||
cfdata->gui.o_btn1 = ob;
|
||||
ob = e_widget_button_add(evas, _("Click to set"), NULL, _grab_wnd_show, (void *)GRAB_BUTTON_NOPLACE, cfdata);
|
||||
e_widget_frametable_object_append(of, ob, 2, 3, 1, 1, 1, 1, 0, 0);
|
||||
cfdata->gui.o_btn2 = ob;
|
||||
ob = e_widget_button_add(evas, _("Click to set"), NULL, _grab_wnd_show, (void *)GRAB_BUTTON_DESK, cfdata);
|
||||
e_widget_frametable_object_append(of, ob, 2, 4, 1, 1, 1, 1, 0, 0);
|
||||
cfdata->gui.o_btn3 = ob;
|
||||
_advanced_update_button_label(cfdata);
|
||||
ob = e_widget_label_add(evas, _("Resistance to dragging"));
|
||||
e_widget_frametable_object_append(of, ob, 1, 4, 1, 1, 1, 1, 0, 0);
|
||||
e_widget_frametable_object_append(of, ob, 1, 5, 1, 1, 1, 1, 0, 0);
|
||||
ob = e_widget_slider_add(evas, 1, 0, _("%.0f px"), 0.0, 10.0, 1.0, 0, NULL, &(cfdata->drag_resist), 200);
|
||||
e_widget_frametable_object_append(of, ob, 1, 5, 2, 1, 1, 1, 0, 0);
|
||||
e_widget_frametable_object_append(of, ob, 1, 6, 2, 1, 1, 1, 0, 0);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Pager Popup Settings"), 0);
|
||||
|
@ -196,6 +205,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
|||
pager_config->drag_resist = cfdata->drag_resist;
|
||||
pager_config->btn_drag = cfdata->btn_drag;
|
||||
pager_config->btn_noplace = cfdata->btn_noplace;
|
||||
pager_config->btn_desk = cfdata->btn_desk;
|
||||
pager_config->flip_desk = cfdata->flip_desk;
|
||||
_pager_cb_config_updated();
|
||||
e_config_save_queue();
|
||||
|
@ -218,6 +228,12 @@ _advanced_update_button_label(E_Config_Dialog_Data *cfdata)
|
|||
else
|
||||
snprintf(label, sizeof(label), _("Click to set"));
|
||||
e_widget_button_label_set(cfdata->gui.o_btn2, label);
|
||||
|
||||
if (cfdata->btn_desk)
|
||||
snprintf(label, sizeof(label), _("Button %i"), cfdata->btn_desk);
|
||||
else
|
||||
snprintf(label, sizeof(label), _("Click to set"));
|
||||
e_widget_button_label_set(cfdata->gui.o_btn3, label);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -231,6 +247,8 @@ _grab_wnd_show(void *data1, void *data2)
|
|||
|
||||
if ((Pager_Grab_Button)data1 == GRAB_BUTTON_DRAG)
|
||||
cfdata->grab.btn = 1;
|
||||
else if ((Pager_Grab_Button)data1 == GRAB_BUTTON_NOPLACE)
|
||||
cfdata->grab.btn = 2;
|
||||
else
|
||||
cfdata->grab.btn = 0;
|
||||
|
||||
|
@ -290,8 +308,10 @@ _grab_mouse_down_cb(void *data, int type, void *event)
|
|||
{
|
||||
if (cfdata->grab.btn == 1)
|
||||
cfdata->btn_drag = ev->button;
|
||||
else
|
||||
else if (cfdata->grab.btn == 2)
|
||||
cfdata->btn_noplace = ev->button;
|
||||
else
|
||||
cfdata->btn_desk = ev->button;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -320,8 +340,10 @@ _grab_key_down_cb(void *data, int type, void *event)
|
|||
{
|
||||
if (cfdata->grab.btn == 1)
|
||||
cfdata->btn_drag = 0;
|
||||
else
|
||||
else if (cfdata->grab.btn == 2)
|
||||
cfdata->btn_noplace = 0;
|
||||
else
|
||||
cfdata->btn_desk = 0;
|
||||
_grab_wnd_hide(cfdata);
|
||||
}
|
||||
return 1;
|
||||
|
|
|
@ -61,26 +61,36 @@ struct _Pager
|
|||
|
||||
struct _Pager_Desk
|
||||
{
|
||||
Pager *pager;
|
||||
E_Desk *desk;
|
||||
Evas_List *wins;
|
||||
Evas_Object *o_desk;
|
||||
Evas_Object *o_layout;
|
||||
int xpos, ypos;
|
||||
int current : 1;
|
||||
Pager *pager;
|
||||
E_Desk *desk;
|
||||
Evas_List *wins;
|
||||
Evas_Object *o_desk;
|
||||
Evas_Object *o_layout;
|
||||
int xpos, ypos;
|
||||
int current : 1;
|
||||
struct {
|
||||
Pager *from_pager;
|
||||
unsigned char in_pager : 1;
|
||||
unsigned char start : 1;
|
||||
int x, y;
|
||||
int dx, dy;
|
||||
int button;
|
||||
} drag;
|
||||
};
|
||||
|
||||
struct _Pager_Win
|
||||
{
|
||||
E_Border *border;
|
||||
Pager_Desk *desk;
|
||||
Evas_Object *o_window;
|
||||
Evas_Object *o_icon;
|
||||
E_Border *border;
|
||||
Pager_Desk *desk;
|
||||
Evas_Object *o_window;
|
||||
Evas_Object *o_icon;
|
||||
unsigned char skip_winlist : 1;
|
||||
struct {
|
||||
Pager *from_pager;
|
||||
unsigned char start : 1;
|
||||
unsigned char in_pager : 1;
|
||||
unsigned char no_place : 1;
|
||||
unsigned char desktop : 1;
|
||||
int x, y;
|
||||
int dx, dy;
|
||||
int button;
|
||||
|
@ -135,6 +145,7 @@ static void _pager_update_drop_position(Instance *inst, Evas_Coord x, Evas_Coord
|
|||
static void _pager_desk_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _pager_desk_cb_drag_finished(E_Drag *drag, int dropped);
|
||||
static void _pager_desk_cb_mouse_wheel(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static int _pager_popup_cb_timeout(void *data);
|
||||
static Pager *_pager_new(Evas *evas, E_Zone *zone);
|
||||
|
@ -146,6 +157,7 @@ static void _pager_desk_free(Pager_Desk *pd);
|
|||
static Pager_Desk *_pager_desk_at_coord(Pager *p, Evas_Coord x, Evas_Coord y);
|
||||
static void _pager_desk_select(Pager_Desk *pd);
|
||||
static Pager_Desk *_pager_desk_find(Pager *p, E_Desk *desk);
|
||||
static void _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2);
|
||||
static Pager_Win *_pager_window_new(Pager_Desk *pd, E_Border *border);
|
||||
static void _pager_window_free(Pager_Win *pw);
|
||||
static void _pager_window_move(Pager_Win *pw);
|
||||
|
@ -166,7 +178,7 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
|||
E_Gadcon_Client *gcc;
|
||||
Instance *inst;
|
||||
Evas_Coord x, y, w, h;
|
||||
const char *drop[] = { "enlightenment/pager_win", "enlightenment/border" };
|
||||
const char *drop[] = { "enlightenment/pager_win", "enlightenment/border", "enlightenment/vdesktop"};
|
||||
|
||||
inst = E_NEW(Instance, 1);
|
||||
|
||||
|
@ -185,7 +197,7 @@ _gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style)
|
|||
e_drop_handler_add(E_OBJECT(inst->gcc), inst,
|
||||
_pager_inst_cb_enter, _pager_inst_cb_move,
|
||||
_pager_inst_cb_leave, _pager_inst_cb_drop,
|
||||
drop, 2, x, y, w, h);
|
||||
drop, 3, x, y, w, h);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE,
|
||||
_pager_cb_obj_moveresize, inst);
|
||||
evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE,
|
||||
|
@ -425,6 +437,110 @@ _pager_desk_find(Pager *p, E_Desk *desk)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
_pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2)
|
||||
{
|
||||
int d1, d2;
|
||||
int tmp_x, tmp_y;
|
||||
int c;
|
||||
E_Zone *zone1, *zone2;
|
||||
E_Desk *desk1, *desk2;
|
||||
Pager_Win *pw;
|
||||
Evas_List *l;
|
||||
|
||||
if (!pd1 || !pd2 || !pd1->desk || !pd2->desk) return;
|
||||
if (pd1 == pd2) return;
|
||||
|
||||
desk1 = pd1->desk;
|
||||
desk2 = pd2->desk;
|
||||
zone1 = pd1->desk->zone;
|
||||
zone2 = pd2->desk->zone;
|
||||
|
||||
/* Move opened windows from on desk to the other */
|
||||
for (l = pd1->wins; l; l = l->next)
|
||||
{
|
||||
pw = l->data;
|
||||
if (!pw || !pw->border || pw->border->iconic) continue;
|
||||
e_border_desk_set(pw->border, desk2);
|
||||
}
|
||||
for (l = pd2->wins; l; l = l->next)
|
||||
{
|
||||
pw = l->data;
|
||||
if (!pw || !pw->border || pw->border->iconic) continue;
|
||||
e_border_desk_set(pw->border, desk1);
|
||||
}
|
||||
|
||||
/* Modify desktop names in the config */
|
||||
for (l = e_config->desktop_names, c = 0; l && c < 2; l = l->next)
|
||||
{
|
||||
E_Config_Desktop_Name *tmp_dn;
|
||||
|
||||
tmp_dn = l->data;
|
||||
if (!tmp_dn) continue;
|
||||
if (tmp_dn->desk_x == desk1->x &&
|
||||
tmp_dn->desk_y == desk1->y &&
|
||||
tmp_dn->zone == desk1->zone->num)
|
||||
{
|
||||
tmp_dn->desk_x = desk2->x;
|
||||
tmp_dn->desk_y = desk2->y;
|
||||
tmp_dn->zone = desk2->zone->num;
|
||||
c++;
|
||||
}
|
||||
else if (tmp_dn->desk_x == desk2->x &&
|
||||
tmp_dn->desk_y == desk2->y &&
|
||||
tmp_dn->zone == desk2->zone->num)
|
||||
{
|
||||
tmp_dn->desk_x = desk1->x;
|
||||
tmp_dn->desk_y = desk1->y;
|
||||
tmp_dn->zone = desk1->zone->num;
|
||||
c++;
|
||||
}
|
||||
}
|
||||
if (c > 0) e_config_save();
|
||||
e_desk_name_update();
|
||||
|
||||
/* Modify desktop backgrounds in the config */
|
||||
for (l = e_config->desktop_backgrounds, c = 0; l && c < 2; l = l->next)
|
||||
{
|
||||
E_Config_Desktop_Background *tmp_db;
|
||||
|
||||
tmp_db = l->data;
|
||||
if (!tmp_db) continue;
|
||||
if (tmp_db->desk_x == desk1->x &&
|
||||
tmp_db->desk_y == desk1->y &&
|
||||
tmp_db->zone == desk1->zone->num)
|
||||
{
|
||||
tmp_db->desk_x = desk2->x;
|
||||
tmp_db->desk_y = desk2->y;
|
||||
tmp_db->zone = desk2->zone->num;
|
||||
c++;
|
||||
}
|
||||
else if (tmp_db->desk_x == desk2->x &&
|
||||
tmp_db->desk_y == desk2->y &&
|
||||
tmp_db->zone == desk2->zone->num)
|
||||
{
|
||||
tmp_db->desk_x = desk1->x;
|
||||
tmp_db->desk_y = desk1->y;
|
||||
tmp_db->zone = desk1->zone->num;
|
||||
c++;
|
||||
}
|
||||
}
|
||||
if (c > 0) e_config_save();
|
||||
|
||||
|
||||
/* If the current desktop has been switched, force to update of the screen */
|
||||
if (desk2 == e_desk_current_get(zone2))
|
||||
{
|
||||
desk2->visible = 0;
|
||||
e_desk_show(desk2);
|
||||
}
|
||||
if (desk1 == e_desk_current_get(zone1))
|
||||
{
|
||||
desk1->visible = 0;
|
||||
e_desk_show(desk1);
|
||||
}
|
||||
}
|
||||
|
||||
static Pager_Win *
|
||||
_pager_window_new(Pager_Desk *pd, E_Border *border)
|
||||
{
|
||||
|
@ -432,14 +548,15 @@ _pager_window_new(Pager_Desk *pd, E_Border *border)
|
|||
Evas_Object *o;
|
||||
int visible;
|
||||
|
||||
if ((!border) || (border->client.netwm.state.skip_pager)) return NULL;
|
||||
if (!border) return NULL;
|
||||
pw = E_NEW(Pager_Win, 1);
|
||||
if (!pw) return NULL;
|
||||
|
||||
pw->border = border;
|
||||
e_object_ref(E_OBJECT(border));
|
||||
|
||||
visible = !border->iconic;
|
||||
visible = !border->iconic && !border->client.netwm.state.skip_pager;
|
||||
pw->skip_winlist = border->client.netwm.state.skip_pager;
|
||||
pw->desk = pd;
|
||||
|
||||
o = edje_object_add(evas_object_evas_get(pd->pager->o_table));
|
||||
|
@ -473,7 +590,7 @@ _pager_window_new(Pager_Desk *pd, E_Border *border)
|
|||
edje_object_signal_emit(pw->o_window,
|
||||
"e,state,urgent", "e");
|
||||
}
|
||||
|
||||
|
||||
evas_object_show(o);
|
||||
|
||||
_pager_window_move(pw);
|
||||
|
@ -647,7 +764,7 @@ _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
|
||||
mi = e_menu_item_new(mn);
|
||||
e_menu_item_label_set(mi, _("Virtual Desktops Configuration"));
|
||||
e_util_menu_item_edje_icon_set(mi, "enlightenment/desktops");
|
||||
e_util_menu_item_edje_icon_set(mi, "enlightenment/vdesktops");
|
||||
e_menu_item_callback_set(mi, _pager_inst_cb_menu_virtual_desktops_dialog, inst);
|
||||
|
||||
e_gadcon_client_util_menu_items_append(inst->gcc, mn, 0);
|
||||
|
@ -863,7 +980,7 @@ _pager_cb_event_border_uniconify(void *data, int type, void *event)
|
|||
|
||||
pd = l2->data;
|
||||
pw = _pager_desk_window_find(pd, ev->border);
|
||||
if (pw) evas_object_show(pw->o_window);
|
||||
if (pw && !pw->skip_winlist) evas_object_show(pw->o_window);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
|
@ -1325,6 +1442,39 @@ _pager_cb_event_border_property(void *data, int type, void *event)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_pager_cb_event_border_skip_winlist(void *data, int type, void *event)
|
||||
{
|
||||
E_Event_Border_Property *ev;
|
||||
Evas_List *l, *l2;
|
||||
|
||||
ev = event;
|
||||
for (l = pager_config->instances; l; l = l->next)
|
||||
{
|
||||
Instance *inst;
|
||||
|
||||
inst = l->data;
|
||||
if (inst->pager->zone != ev->border->zone) continue;
|
||||
for (l2 = inst->pager->desks; l2; l2 = l2->next)
|
||||
{
|
||||
Pager_Desk *pd;
|
||||
Pager_Win *pw;
|
||||
|
||||
pd = l2->data;
|
||||
pw = _pager_desk_window_find(pd, ev->border);
|
||||
if (pw && ev->border->client.netwm.state.skip_pager != pw->skip_winlist)
|
||||
{
|
||||
pw->skip_winlist = ev->border->client.netwm.state.skip_pager;
|
||||
if (pw->skip_winlist)
|
||||
evas_object_hide(pw->o_window);
|
||||
else
|
||||
evas_object_show(pw->o_window);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_pager_cb_event_zone_desk_count_set(void *data, int type, void *event)
|
||||
{
|
||||
|
@ -1449,9 +1599,12 @@ _pager_window_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_i
|
|||
|
||||
ev = event_info;
|
||||
pw = data;
|
||||
|
||||
|
||||
if (!pw) return;
|
||||
if (pw->desk->pager->is_popup) return;
|
||||
if (pw->border->lock_user_location) return;
|
||||
if (ev->button == pager_config->btn_desk) return;
|
||||
if ((ev->button == pager_config->btn_drag) ||
|
||||
(ev->button == pager_config->btn_noplace))
|
||||
{
|
||||
|
@ -1481,6 +1634,7 @@ _pager_window_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_inf
|
|||
pw = data;
|
||||
if (!pw) return;
|
||||
if (pw->desk->pager->is_popup) return;
|
||||
if (ev->button == pager_config->btn_desk) return;
|
||||
if ((ev->button == pager_config->btn_drag) ||
|
||||
(ev->button == pager_config->btn_noplace))
|
||||
{
|
||||
|
@ -1736,6 +1890,7 @@ _pager_inst_cb_drop(void *data, const char *type, void *event_info)
|
|||
E_Event_Dnd_Drop *ev;
|
||||
Instance *inst;
|
||||
Pager_Desk *pd;
|
||||
Pager_Desk *pd2 = NULL;
|
||||
E_Border *bd = NULL;
|
||||
Evas_List *l;
|
||||
int dx = 0, dy = 0;
|
||||
|
@ -1771,6 +1926,12 @@ _pager_inst_cb_drop(void *data, const char *type, void *event_info)
|
|||
dx = (wx - wx2) / 2;
|
||||
dy = (wy - wy2) / 2;
|
||||
}
|
||||
else if (!strcmp(type, "enlightenment/vdesktop"))
|
||||
{
|
||||
pd2 = ev->data;
|
||||
if (!pd2) return;
|
||||
_pager_desk_switch(pd, pd2);
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
|
@ -1812,6 +1973,20 @@ _pager_desk_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_inf
|
|||
|
||||
ev = event_info;
|
||||
pd = data;
|
||||
if (!pd) return;
|
||||
if (ev->button == pager_config->btn_desk)
|
||||
{
|
||||
Evas_Coord ox, oy;
|
||||
|
||||
evas_object_geometry_get(pd->o_desk, &ox, &oy, NULL, NULL);
|
||||
pd->drag.start = 1;
|
||||
pd->drag.in_pager = 1;
|
||||
pd->drag.dx = ox - ev->canvas.x;
|
||||
pd->drag.dy = oy - ev->canvas.y;
|
||||
pd->drag.x = ev->canvas.x;
|
||||
pd->drag.y = ev->canvas.y;
|
||||
pd->drag.button = ev->button;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1823,6 +1998,8 @@ _pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
|
||||
ev = event_info;
|
||||
pd = data;
|
||||
|
||||
if (!pd) return;
|
||||
p = pd->pager;
|
||||
|
||||
if ( p->is_popup &&
|
||||
|
@ -1837,6 +2014,8 @@ _pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
(!pd->pager->just_dragged))
|
||||
{
|
||||
e_desk_show(pd->desk);
|
||||
pd->drag.start = 0;
|
||||
pd->drag.in_pager = 0;
|
||||
}
|
||||
pd->pager->just_dragged = 0;
|
||||
}
|
||||
|
@ -1849,6 +2028,129 @@ _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf
|
|||
|
||||
ev = event_info;
|
||||
pd = data;
|
||||
if (!pd) return;
|
||||
/* prevent drag for a few pixels */
|
||||
if (pd->drag.start)
|
||||
{
|
||||
Evas_Coord dx, dy;
|
||||
unsigned int resist = 0;
|
||||
|
||||
dx = pd->drag.x - ev->cur.output.x;
|
||||
dy = pd->drag.y - ev->cur.output.y;
|
||||
if (pd->pager && pd->pager->inst)
|
||||
resist = pager_config->drag_resist;
|
||||
|
||||
if (((dx * dx) + (dy * dy)) <= (resist * resist)) return;
|
||||
|
||||
pd->pager->dragging = 1;
|
||||
pd->drag.start = 0;
|
||||
}
|
||||
|
||||
if (pd->drag.in_pager)
|
||||
{
|
||||
E_Drag *drag;
|
||||
Evas_Object *o, *oo, *o_icon;
|
||||
Evas_Coord x, y, w, h;
|
||||
const char *file = NULL, *part = NULL;
|
||||
const char *drag_types[] = { "enlightenment/vdesktop" };
|
||||
Pager_Win *pw;
|
||||
Evas_List *l;
|
||||
|
||||
evas_object_geometry_get(pd->o_desk, &x, &y, &w, &h);
|
||||
drag = e_drag_new(pd->pager->inst->gcc->gadcon->zone->container,
|
||||
x, y, drag_types, 1, pd, -1,
|
||||
NULL, _pager_desk_cb_drag_finished);
|
||||
|
||||
/* set a background to the drag icon */
|
||||
o = evas_object_rectangle_add(drag->evas);
|
||||
evas_object_color_set(o, 255, 255, 255, 255);
|
||||
evas_object_resize(o, w, h);
|
||||
evas_object_show(o);
|
||||
|
||||
/* redraw the desktop theme above */
|
||||
o = edje_object_add(drag->evas);
|
||||
e_theme_edje_object_set(o, "base/theme/modules/pager",
|
||||
"e/modules/pager/desk");
|
||||
evas_object_show(o);
|
||||
e_drag_object_set(drag, o);
|
||||
|
||||
/* and redraw is content */
|
||||
oo = e_layout_add(drag->evas);
|
||||
e_layout_virtual_size_set(oo, pd->pager->zone->w, pd->pager->zone->h);
|
||||
edje_object_part_swallow(o, "items", oo);
|
||||
evas_object_show(oo);
|
||||
|
||||
for (l = pd->wins; l; l = l->next)
|
||||
{
|
||||
pw = l->data;
|
||||
if (!pw || pw->border->iconic
|
||||
|| pw->border->client.netwm.state.skip_pager)
|
||||
continue;
|
||||
|
||||
o = edje_object_add(drag->evas);
|
||||
e_theme_edje_object_set(o, "base/theme/modules/pager",
|
||||
"e/modules/pager/window");
|
||||
e_layout_pack(oo, o);
|
||||
e_layout_child_raise(o);
|
||||
e_layout_child_move(o,
|
||||
pw->border->x - pw->desk->desk->zone->x,
|
||||
pw->border->y - pw->desk->desk->zone->y);
|
||||
e_layout_child_resize(o, pw->border->w, pw->border->h);
|
||||
evas_object_show(o);
|
||||
|
||||
if ((o_icon = e_border_icon_add(pw->border, drag->evas)))
|
||||
{
|
||||
evas_object_show(o_icon);
|
||||
edje_object_part_swallow(o, "icon", o_icon);
|
||||
}
|
||||
}
|
||||
e_drag_resize(drag, w, h);
|
||||
e_drag_start(drag, x - pd->drag.dx, y - pd->drag.dy);
|
||||
|
||||
pd->drag.from_pager = pd->pager;
|
||||
pd->drag.from_pager->dragging = 1;
|
||||
pd->drag.in_pager = 0;
|
||||
e_util_evas_fake_mouse_up_later(evas_object_evas_get(pd->pager->o_table),
|
||||
pd->drag.button);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_pager_desk_cb_drag_finished(E_Drag *drag, int dropped)
|
||||
{
|
||||
Pager_Desk *pd;
|
||||
|
||||
pd = drag->data;
|
||||
if (!pd) return;
|
||||
if (!dropped)
|
||||
{
|
||||
/* wasn't dropped on pager, switch with current desktop */
|
||||
Pager_Desk *pd2 = NULL;
|
||||
Evas_List *l;
|
||||
E_Desk *desk;
|
||||
|
||||
if (!pd->desk) return;
|
||||
desk = e_desk_current_get(
|
||||
e_zone_current_get(
|
||||
e_container_current_get(
|
||||
e_manager_current_get())));
|
||||
for (l = pager_config->instances; l && !pd2; l = l->next)
|
||||
{
|
||||
Instance *inst;
|
||||
Pager *pager = NULL;
|
||||
|
||||
inst = l->data;
|
||||
if (!(pager = inst->pager)) continue;
|
||||
pd2 = _pager_desk_find(pager, desk);
|
||||
}
|
||||
_pager_desk_switch(pd, pd2);
|
||||
}
|
||||
if (pd->drag.from_pager)
|
||||
{
|
||||
pd->drag.from_pager->dragging = 0;
|
||||
pd->drag.from_pager->just_dragged = 0;
|
||||
}
|
||||
pd->drag.from_pager = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1903,6 +2205,7 @@ e_modapi_init(E_Module *m)
|
|||
E_CONFIG_VAL(D, T, resize, UCHAR);
|
||||
E_CONFIG_VAL(D, T, btn_drag, UCHAR);
|
||||
E_CONFIG_VAL(D, T, btn_noplace, UCHAR);
|
||||
E_CONFIG_VAL(D, T, btn_desk, UCHAR);
|
||||
E_CONFIG_VAL(D, T, flip_desk, UCHAR);
|
||||
|
||||
pager_config = e_config_domain_load("module.pager", conf_edd);
|
||||
|
@ -1920,6 +2223,7 @@ e_modapi_init(E_Module *m)
|
|||
pager_config->resize = PAGER_RESIZE_BOTH;
|
||||
pager_config->btn_drag = 1;
|
||||
pager_config->btn_noplace = 2;
|
||||
pager_config->btn_desk = 0;
|
||||
pager_config->flip_desk = 0;
|
||||
}
|
||||
E_CONFIG_LIMIT(pager_config->popup, 0, 1);
|
||||
|
@ -1933,6 +2237,7 @@ e_modapi_init(E_Module *m)
|
|||
E_CONFIG_LIMIT(pager_config->scale, 0, 1);
|
||||
E_CONFIG_LIMIT(pager_config->btn_drag, 0, 32);
|
||||
E_CONFIG_LIMIT(pager_config->btn_noplace, 0, 32);
|
||||
E_CONFIG_LIMIT(pager_config->btn_desk, 0, 32);
|
||||
|
||||
pager_config->handlers = evas_list_append
|
||||
(pager_config->handlers, ecore_event_handler_add
|
||||
|
|
|
@ -27,7 +27,7 @@ struct _Config
|
|||
unsigned int popup_urgent_stick;
|
||||
double popup_urgent_speed;
|
||||
unsigned int drag_resist;
|
||||
unsigned char scale;
|
||||
unsigned int scale;
|
||||
unsigned char resize;
|
||||
Evas_List *items; /* FIXME: save/load this */
|
||||
/* just config state */
|
||||
|
@ -37,8 +37,9 @@ struct _Config
|
|||
E_Menu *menu;
|
||||
Evas_List *handlers;
|
||||
|
||||
unsigned char btn_drag;
|
||||
unsigned char btn_noplace;
|
||||
unsigned int btn_drag;
|
||||
unsigned int btn_noplace;
|
||||
unsigned int btn_desk;
|
||||
unsigned int flip_desk;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue