- add the sticky window code

SVN revision: 12820
This commit is contained in:
Dan Sinclair 2005-01-08 07:10:13 +00:00 committed by Dan Sinclair
parent 4350855593
commit 59813a3895
4 changed files with 39 additions and 3 deletions

View File

@ -68,6 +68,7 @@ static void _e_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_maximize(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_shade(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_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_stick(void *data, E_Menu *m, E_Menu_Item *mi);
/* local subsystem globals */ /* local subsystem globals */
static Evas_List *handlers = NULL; static Evas_List *handlers = NULL;
@ -656,6 +657,21 @@ e_border_uniconify(E_Border *bd)
} }
} }
void
e_border_stick(E_Border *bd)
{
E_OBJECT_CHECK(bd);
bd->sticky = 1;
}
void
e_border_unstick(E_Border *bd)
{
E_OBJECT_CHECK(bd);
bd->sticky = 0;
bd->desk = e_desk_current_get(bd->zone);
}
E_Border * E_Border *
e_border_find_by_client_window(Ecore_X_Window win) e_border_find_by_client_window(Ecore_X_Window win)
{ {
@ -2483,6 +2499,13 @@ _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y)
e_menu_item_label_set(mi, "Maximize"); e_menu_item_label_set(mi, "Maximize");
e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd); e_menu_item_callback_set(mi, _e_border_menu_cb_maximize, bd);
mi = e_menu_item_new(m);
if (bd->sticky)
e_menu_item_label_set(mi, "Un-Stick");
else
e_menu_item_label_set(mi, "Stick");
e_menu_item_callback_set(mi, _e_border_menu_cb_stick, bd);
mi = e_menu_item_new(m); mi = e_menu_item_new(m);
e_menu_item_separator_set(mi, 1); e_menu_item_separator_set(mi, 1);
@ -2593,3 +2616,13 @@ _e_border_menu_cb_icon_edit(void *data, E_Menu *m, E_Menu_Item *mi)
please install e_util_eapp_edit\n \ please install e_util_eapp_edit\n \
or make sure it is in your PATH\n"); or make sure it is in your PATH\n");
} }
static void
_e_border_menu_cb_stick(void *data, E_Menu *m, E_Menu_Item *mi)
{
E_Border *bd;
bd = data;
if (bd->sticky) e_border_unstick(bd);
else e_border_stick(bd);
}

View File

@ -149,6 +149,7 @@ struct _E_Border
unsigned char shaded : 1; unsigned char shaded : 1;
unsigned char maximized : 1; unsigned char maximized : 1;
unsigned char iconic : 1; unsigned char iconic : 1;
unsigned char sticky : 1;
unsigned char changed : 1; unsigned char changed : 1;
@ -206,6 +207,8 @@ EAPI void e_border_maximize(E_Border *bd);
EAPI void e_border_unmaximize(E_Border *bd); EAPI void e_border_unmaximize(E_Border *bd);
EAPI void e_border_iconify(E_Border *bd); EAPI void e_border_iconify(E_Border *bd);
EAPI void e_border_uniconify(E_Border *bd); EAPI void e_border_uniconify(E_Border *bd);
EAPI void e_border_stick(E_Border *bd);
EAPI void e_border_unstick(E_Border *bd);
EAPI E_Border *e_border_find_by_client_window(Ecore_X_Window win); EAPI E_Border *e_border_find_by_client_window(Ecore_X_Window win);

View File

@ -69,7 +69,7 @@ e_desk_show(E_Desk *desk)
if (bd->desk->zone == desk->zone && !bd->iconic) if (bd->desk->zone == desk->zone && !bd->iconic)
{ {
if (bd->desk == desk) if (bd->desk == desk || bd->sticky)
{ {
e_border_show(bd); e_border_show(bd);
} }

View File

@ -225,7 +225,7 @@ e_hints_window_state_set(Ecore_X_Window win)
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MODAL, ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MODAL,
bd->client.netwm.state.modal); bd->client.netwm.state.modal);
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_STICKY, ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_STICKY,
(evas_list_count(bd->stick_desks) > 1)); bd->sticky);
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_VERT, ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
bd->client.netwm.state.maximized_v); bd->client.netwm.state.maximized_v);
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ, ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,