- 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_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_stick(void *data, E_Menu *m, E_Menu_Item *mi);
/* local subsystem globals */
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_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_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);
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 \
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 maximized : 1;
unsigned char iconic : 1;
unsigned char sticky : 1;
unsigned char changed : 1;
@ -206,7 +207,9 @@ EAPI void e_border_maximize(E_Border *bd);
EAPI void e_border_unmaximize(E_Border *bd);
EAPI void e_border_iconify(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 void e_border_idler_before(void);

View File

@ -69,7 +69,7 @@ e_desk_show(E_Desk *desk)
if (bd->desk->zone == desk->zone && !bd->iconic)
{
if (bd->desk == desk)
if (bd->desk == desk || bd->sticky)
{
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,
bd->client.netwm.state.modal);
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,
bd->client.netwm.state.maximized_v);
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,