Tiling2: Added a menu item to toggle floating windows.
authorTom Hacohen <tom@stosb.com>
Thu, 16 Jan 2014 13:13:04 +0000 (13:13 +0000)
committerTom Hacohen <tom@stosb.com>
Fri, 21 Feb 2014 09:15:07 +0000 (09:15 +0000)
src/modules/tiling/e_mod_tiling.c

index e94ca16..6578d41 100644 (file)
@@ -552,6 +552,14 @@ _e_mod_action_toggle_floating_cb(E_Object   *obj __UNUSED__,
     toggle_floating(e_client_focused_get());
 }
 
+static void
+_e_mod_menu_border_cb(void *data, E_Menu *m __UNUSED__, E_Menu_Item *mi __UNUSED__)
+{
+   E_Client *ec = data;
+
+   toggle_floating(ec);
+}
+
 /* }}} */
 /* {{{ Swap */
 
@@ -909,6 +917,36 @@ _compositor_resize_hook(void *data __UNUSED__, int type __UNUSED__, E_Event_Comp
     return true;
 }
 
+static void
+_bd_hook(void *d __UNUSED__, E_Client *ec)
+{
+   E_Menu_Item *mi;
+   E_Menu *m;
+   Eina_List *l;
+   if (!ec->border_menu) return;
+   m = ec->border_menu;
+
+   /* position menu item just before the last separator */
+   EINA_LIST_REVERSE_FOREACH(m->items, l, mi)
+      if (mi->separator) break;
+   if ((!mi) || (!mi->separator)) return;
+   l = eina_list_prev(l);
+   mi = eina_list_data_get(l);
+   if (!mi) return;
+
+    Client_Extra *extra = eina_hash_find(_G.client_extras, &ec);
+    if (!extra) {
+        ERR("No extra for %p", ec);
+        return;
+    }
+
+   mi = e_menu_item_new_relative(m, mi);
+   e_menu_item_label_set(mi, _("Floating"));
+   e_menu_item_check_set(mi, true);
+   e_menu_item_toggle_set(mi, (extra->floating) ? true : false);
+   e_menu_item_callback_set(mi, _e_mod_menu_border_cb, ec);
+}
+
 /* }}} */
 /* Module setup {{{*/
 
@@ -1045,6 +1083,8 @@ e_modapi_init(E_Module *m)
         E_CONFIG_LIMIT(vd->nb_stacks, 0, TILING_MAX_STACKS);
     }
 
+    e_int_client_menu_hook_add(_bd_hook, NULL);
+
     desk = get_current_desk();
     _G.tinfo = _initialize_tinfo(desk);