]> Dogcows Code - chaz/openbox/commitdiff
oops hehe. a render call in the loop for debugging was what made it slow. anyhow...
authorDana Jansens <danakj@orodu.net>
Mon, 7 May 2007 22:15:40 +0000 (22:15 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 7 May 2007 22:15:40 +0000 (22:15 +0000)
openbox/menuframe.c

index b04fda55a746579a7f75fbf1047fdcf2b63890ce..476f33733bce6130f0161161276ceda1470e68a1 100644 (file)
@@ -824,13 +824,18 @@ static void menu_frame_update(ObMenuFrame *self)
         fit = n;
     }
 
-    menu_frame_render(self);
-
-    /* make the menu fit on the screen. at most we call render twice, at least
-       not like n times or sometime */
+    /* * make the menu fit on the screen */
+
+    /* calculate the height of the menu */
+    h = 0;
+    for (fit = self->entries; fit; fit = g_list_next(fit))
+        h += menu_entry_frame_get_height(fit->data,
+                                         fit == self->entries,
+                                         g_list_next(fit) == NULL);
+    /* add the border at the top and bottom */
+    h += ob_rr_theme->mbwidth * 2;
 
     a = screen_physical_area_monitor(self->monitor);
-    h = self->area.height;
 
     if (h > a->height) {
         GList *flast, *tmp;
@@ -854,8 +859,6 @@ static void menu_frame_update(ObMenuFrame *self)
             menu_entry_frame_free(tmp->data);
             self->entries = g_list_delete_link(self->entries, tmp);
 
-            menu_frame_render(self);
-
             /* only the first one that we see is the last entry in the menu */
             last_entry = FALSE;
         };
@@ -881,10 +884,9 @@ static void menu_frame_update(ObMenuFrame *self)
             /* add our More... entry to the frame */
             self->entries = g_list_append(self->entries, more_frame);
         }
-
-        /* render again */
-        menu_frame_render(self);
     }
+
+    menu_frame_render(self);
 }
 
 static gboolean menu_frame_is_visible(ObMenuFrame *self)
This page took 0.02804 seconds and 4 git commands to generate.