]> Dogcows Code - chaz/openbox/blobdiff - plugins/menu/client_menu.c
rename 'xinerama' stuff to 'monitors' to be more generic and descriptive.
[chaz/openbox] / plugins / menu / client_menu.c
index 142c665427b4401c4a96942c58c8e1d0c633c3d3..acb33cd59e2f4efdd9ab5005d08c91b6525496e3 100644 (file)
@@ -21,40 +21,58 @@ typedef struct {
 #define CLIENT_MENU(m) ((Menu *)m)
 #define CLIENT_MENU_DATA(m) ((Client_Menu_Data *)((Menu *)m)->plugin_data)
 
-
 void client_menu_clean_up(Menu *m) {
 }
 
 void client_send_to_update(Menu *self)
 {
-    guint i;
+    guint i = 0;
+    GList *it = self->entries;
     
-    for (i = 0; i < screen_num_desktops; ++i) {
-        MenuEntry *e;
-        Action *a = action_from_string("sendtodesktop");
-        a->data.sendto.desk = i;
-        a->data.sendto.follow = FALSE;
-        e = menu_entry_new(screen_desktop_names[i], a);
-        menu_add_entry(self, e);
+    /* check if we have to update. lame */
+    while (it != NULL) {
+        if (i >= screen_num_desktops)
+            break;
+        if (strcmp(screen_desktop_names[i],
+                   ((MenuEntry *)it->data)->label) != 0)
+            break;
+        ++i;
+        it = it->next;
     }
 
-    menu_render_full(self);
+    if (it != NULL || i != screen_num_desktops) {
+        menu_clear(self);
+        g_message("update");
+        for (i = 0; i < screen_num_desktops; ++i) {
+            MenuEntry *e;
+            Action *a = action_from_string("sendtodesktop");
+            a->data.sendto.desk = i;
+            a->data.sendto.follow = FALSE;
+            e = menu_entry_new(screen_desktop_names[i], a);
+            menu_add_entry(self, e);
+        }
+
+        menu_render_full(self);
+    }
 }
 
+#if 0
 void client_menu_show(Menu *self, int x, int y, Client *client)
 {
     int newy;
     g_assert(!self->invalid);
     g_assert(client);
     
-    newy = MAX(client->frame->area.y + client->frame->size.top,
-               y - theme_bwidth);
+    newy = MAX(client->frame->area.y + client->frame->size.top, y);
+    newy -= ob_rr_theme->bwidth;
     
+    /* XXX do xinerama shit like in menu.c! im not coding it now because
+       this function isnt even being used right now... */
     POINT_SET(self->location, 
              MIN(x, screen_physical_size.width - self->size.width -
-                  theme_bwidth * 2), 
+                  ob_rr_theme->bwidth * 2), 
              MIN(newy, screen_physical_size.height - self->size.height -
-                  theme_bwidth * 2));
+                  ob_rr_theme->bwidth * 2));
     XMoveWindow(ob_display, self->frame, self->location.x, self->location.y);
 
     if (!self->shown) {
@@ -65,6 +83,7 @@ void client_menu_show(Menu *self, int x, int y, Client *client)
        menu_hide(self->open_submenu);
     }
 }
+#endif
 
 void plugin_setup_config() { }
 
@@ -77,7 +96,7 @@ void plugin_destroy (Menu *m)
 void *plugin_create() /* TODO: need config */
 {
     Menu *m = menu_new_full(NULL, "client-menu", NULL,
-                            client_menu_show, NULL);
+                            /*client_menu_show*/NULL, NULL);
     menu_add_entry(m, menu_entry_new_submenu("Send To Workspace",
                                              send_to_menu));
     send_to_menu->parent = m;
This page took 0.027726 seconds and 4 git commands to generate.