]> Dogcows Code - chaz/openbox/blobdiff - openbox/menuframe.c
make ob_expand_tilde expand all tildes in the string
[chaz/openbox] / openbox / menuframe.c
index 7052296e14fadec50bd60e50e3fb79f2413cf49e..4a56548f3784543f7dc0abf8007a799c0dddea66 100644 (file)
@@ -94,16 +94,18 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry,
 
     attr.event_mask = ENTRY_EVENTMASK;
     self->window = createWindow(self->frame->items, CWEventMask, &attr);
-    self->icon = createWindow(self->window, 0, NULL);
     self->text = createWindow(self->window, 0, NULL);
-    self->bullet = createWindow(self->window, 0, NULL);
+    if (entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR) {
+        self->icon = createWindow(self->window, 0, NULL);
+        self->bullet = createWindow(self->window, 0, NULL);
+    }
 
     XMapWindow(ob_display, self->window);
     XMapWindow(ob_display, self->text);
 
     self->a_normal = RrAppearanceCopy(ob_rr_theme->a_menu_item);
     self->a_disabled = RrAppearanceCopy(ob_rr_theme->a_menu_disabled);
-    self->a_selected = RrAppearanceCopy(ob_rr_theme->a_menu_hilite);
+    self->a_selected = RrAppearanceCopy(ob_rr_theme->a_menu_selected);
 
     if (entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR) {
         self->a_separator = RrAppearanceCopy(ob_rr_theme->a_clear_tex);
@@ -121,7 +123,7 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry,
     self->a_text_disabled =
         RrAppearanceCopy(ob_rr_theme->a_menu_text_disabled);
     self->a_text_selected =
-        RrAppearanceCopy(ob_rr_theme->a_menu_text_hilite);
+        RrAppearanceCopy(ob_rr_theme->a_menu_text_selected);
 
     return self;
 }
@@ -129,10 +131,12 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry,
 static void menu_entry_frame_free(ObMenuEntryFrame *self)
 {
     if (self) {
-        XDestroyWindow(ob_display, self->icon);
         XDestroyWindow(ob_display, self->text);
-        XDestroyWindow(ob_display, self->bullet);
         XDestroyWindow(ob_display, self->window);
+        if (self->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR) {
+            XDestroyWindow(ob_display, self->icon);
+            XDestroyWindow(ob_display, self->bullet);
+        }
 
         RrAppearanceFree(self->a_normal);
         RrAppearanceFree(self->a_disabled);
@@ -256,22 +260,20 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                 self->frame->item_h - 2*PADDING);
         break;
     case OB_MENU_ENTRY_TYPE_SEPARATOR:
-        XMoveResizeWindow(ob_display, self->text,
-                          self->frame->text_x, PADDING,
-                          self->frame->text_w - 2*PADDING,
-                          SEPARATOR_HEIGHT);
+        XMoveResizeWindow(ob_display, self->text, PADDING, PADDING,
+                          self->area.width - 2*PADDING, SEPARATOR_HEIGHT);
         self->a_separator->surface.parent = item_a;
-        self->a_separator->surface.parentx = self->frame->text_x;
+        self->a_separator->surface.parentx = PADDING;
         self->a_separator->surface.parenty = PADDING;
         self->a_separator->texture[0].data.lineart.color =
             text_a->texture[0].data.text.color;
         self->a_separator->texture[0].data.lineart.x1 = 2*PADDING;
         self->a_separator->texture[0].data.lineart.y1 = SEPARATOR_HEIGHT / 2;
         self->a_separator->texture[0].data.lineart.x2 =
-            self->frame->text_w - 6*PADDING;
+            self->area.width - 4*PADDING;
         self->a_separator->texture[0].data.lineart.y2 = SEPARATOR_HEIGHT / 2;
         RrPaint(self->a_separator, self->text,
-                self->frame->text_w - 2*PADDING, SEPARATOR_HEIGHT);
+                self->area.width - 2*PADDING, SEPARATOR_HEIGHT);
         break;
     }
 
@@ -617,12 +619,12 @@ void menu_frame_select(ObMenuFrame *self, ObMenuEntryFrame *entry)
     ObMenuEntryFrame *old = self->selected;
     ObMenuFrame *oldchild = self->child;
 
+    if (entry && entry->entry->type == OB_MENU_ENTRY_TYPE_SEPARATOR)
+        entry = old;
+
     if (old == entry) return;
 
-    if (entry && entry->entry->type != OB_MENU_ENTRY_TYPE_SEPARATOR)
-        self->selected = entry;
-    else
-        self->selected = NULL;
+    self->selected = entry;
 
     if (old)
         menu_entry_frame_render(old);
@@ -667,7 +669,8 @@ void menu_entry_frame_execute(ObMenuEntryFrame *self, gboolean hide)
         ObClient *client = self->frame->client;
 
         /* release grabs before executing the shit */
-        menu_frame_hide_all();
+        if (hide)
+            menu_frame_hide_all();
 
         if (func)
             func(entry, data);
This page took 0.022659 seconds and 4 git commands to generate.