From 0c3d47d779e96d2189dd897c2720fdbfa388e073 Mon Sep 17 00:00:00 2001 From: Christopher Michael Date: Thu, 22 Feb 2007 05:17:44 +0000 Subject: [PATCH] Ravenlock's "Pin to desktop" patch which adds a menu item to the border menu for "pinning" an app to the desktop. SVN revision: 28433 --- src/bin/e_border.h | 1 + src/bin/e_int_border_menu.c | 72 +++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/src/bin/e_border.h b/src/bin/e_border.h index 7dd8605fc..5b4c1a166 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -351,6 +351,7 @@ struct _E_Border unsigned int need_maximize : 1; E_Maximize maximized; unsigned int borderless : 1; + unsigned int pinned_to_desktop : 1; const char *bordername; unsigned int lock_user_location : 1; /*DONE*/ diff --git a/src/bin/e_int_border_menu.c b/src/bin/e_int_border_menu.c index 737a41ecb..c4dbaf4bd 100644 --- a/src/bin/e_int_border_menu.c +++ b/src/bin/e_int_border_menu.c @@ -27,6 +27,8 @@ static void _e_border_menu_cb_fullscreen(void *data, E_Menu *m, E_Menu_Item *mi) static void _e_border_menu_cb_skip_winlist(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_sendto_pre(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_pin(void *data, E_Menu *m, E_Menu_Item *mi); +static void _e_border_menu_cb_unpin(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_raise(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_lower(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_border_menu_cb_state_pre(void *data, E_Menu *m, E_Menu_Item *mi); @@ -182,6 +184,28 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_ "e/widgets/border/default/sendto"); } + if (!bd->pinned_to_desktop) + { + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Pin to Desktop")); + e_menu_item_callback_set(mi, _e_border_menu_cb_pin, bd); + e_menu_item_icon_edje_set(mi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/stick"), + "e/widgets/border/default/stick"); + } + + if (bd->pinned_to_desktop) + { + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Unpin from Desktop")); + e_menu_item_callback_set(mi, _e_border_menu_cb_unpin, bd); + e_menu_item_icon_edje_set(mi, + e_theme_edje_file_get("base/theme/borders", + "e/widgets/border/default/stick"), + "e/widgets/border/default/stick"); + } + mi = e_menu_item_new(m); e_menu_item_separator_set(mi, 1); @@ -795,6 +819,54 @@ _e_border_menu_cb_sendto(void *data, E_Menu *m, E_Menu_Item *mi) } } +static void +_e_border_menu_cb_pin(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Border *bd; + + bd = e_object_data_get(E_OBJECT(m)); + if (bd) + { + bd->pinned_to_desktop = 1; + bd->borderless = 1; + bd->user_skip_winlist = 1; + bd->client.netwm.state.stacking = E_STACKING_BELOW; + + if (bd->layer != 50) + { + e_border_layer_set(bd, 50); + e_hints_window_stacking_set(bd, E_STACKING_BELOW); + } + + bd->client.border.changed = 1; + bd->changed = 1; + } +} + +static void +_e_border_menu_cb_unpin(void *data, E_Menu *m, E_Menu_Item *mi) +{ + E_Border *bd; + + bd = e_object_data_get(E_OBJECT(m)); + if (bd) + { + bd->pinned_to_desktop = 0; + bd->borderless = 0; + bd->user_skip_winlist = 0; + bd->client.netwm.state.stacking = E_STACKING_NONE; + + if (bd->layer != 100) + { + e_border_layer_set(bd, 100); + e_hints_window_stacking_set(bd, E_STACKING_NONE); + } + + bd->client.border.changed = 1; + bd->changed = 1; + } +} + static void _e_border_menu_cb_raise(void *data, E_Menu *m, E_Menu_Item *mi) {