]> Dogcows Code - chaz/openbox/blobdiff - openbox/menuframe.c
Merge branch 'backport' into work
[chaz/openbox] / openbox / menuframe.c
index 598bc005f6c5e4a32b60272897e1c66698dfebb1..867aa81c2b782d3606fcec4180d8108c817e971b 100644 (file)
@@ -25,6 +25,7 @@
 #include "grab.h"
 #include "openbox.h"
 #include "config.h"
+#include "obt/prop.h"
 #include "render/theme.h"
 
 #define PADDING 2
@@ -88,6 +89,10 @@ ObMenuFrame* menu_frame_new(ObMenu *menu, guint show_from, ObClient *client)
     self->window = createWindow(obt_root(ob_screen),
                                 CWEventMask, &attr);
 
+    /* make it a popup menu type window */
+    OBT_PROP_SET32(self->window, NET_WM_WINDOW_TYPE, ATOM,
+                   OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_POPUP_MENU));
+
     XSetWindowBorderWidth(obt_display, self->window, ob_rr_theme->mbwidth);
     XSetWindowBorder(obt_display, self->window,
                      RrColorPixel(ob_rr_theme->menu_border_color));
@@ -254,23 +259,24 @@ static void menu_frame_place_topmenu(ObMenuFrame *self, gint *x, gint *y)
 
 static void menu_frame_place_submenu(ObMenuFrame *self, gint *x, gint *y)
 {
-    gint overlap;
+    gint overlapx, overlapy;
     gint bwidth;
 
-    overlap = ob_rr_theme->menu_overlap;
+    overlapx = ob_rr_theme->menu_overlap_x;
+    overlapy = ob_rr_theme->menu_overlap_y;
     bwidth = ob_rr_theme->mbwidth;
 
     if (self->direction_right)
         *x = self->parent->area.x + self->parent->area.width -
-            overlap - bwidth;
+            overlapx - bwidth;
     else
-        *x = self->parent->area.x - self->area.width + overlap + bwidth;
+        *x = self->parent->area.x - self->area.width + overlapx + bwidth;
 
     *y = self->parent->area.y + self->parent_entry->area.y;
     if (config_menu_middle)
         *y -= (self->area.height - (bwidth * 2) - ITEM_HEIGHT) / 2;
     else
-        *y += overlap;
+        *y += overlapy;
 }
 
 void menu_frame_move_on_screen(ObMenuFrame *self, gint x, gint y,
@@ -338,6 +344,7 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
     default:
         g_assert_not_reached();
     }
+
     RECT_SET_SIZE(self->area, self->frame->inner_w, th);
     XResizeWindow(obt_display, self->window,
                   self->area.width, self->area.height);
@@ -442,6 +449,7 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                               self->area.width - 2*PADDING, SEPARATOR_HEIGHT);
 
             clear = ob_rr_theme->a_clear_tex;
+            RrAppearanceClearTextures(clear);
             clear->texture[0].type = RR_TEXTURE_LINE_ART;
             clear->surface.parent = item_a;
             clear->surface.parentx = PADDING;
@@ -459,7 +467,7 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
     }
 
     if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL &&
-        self->entry->data.normal.icon_data)
+        self->entry->data.normal.icon)
     {
         RrAppearance *clear;
 
@@ -471,15 +479,12 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                           - frame->item_margin.bottom);
 
         clear = ob_rr_theme->a_clear_tex;
-        clear->texture[0].type = RR_TEXTURE_RGBA;
-        clear->texture[0].data.rgba.width =
-            self->entry->data.normal.icon_width;
-        clear->texture[0].data.rgba.height =
-            self->entry->data.normal.icon_height;
-        clear->texture[0].data.rgba.alpha =
+        RrAppearanceClearTextures(clear);
+        clear->texture[0].type = RR_TEXTURE_IMAGE;
+        clear->texture[0].data.image.image =
+            self->entry->data.normal.icon;
+        clear->texture[0].data.image.alpha =
             self->entry->data.normal.icon_alpha;
-        clear->texture[0].data.rgba.data =
-            self->entry->data.normal.icon_data;
         clear->surface.parent = item_a;
         clear->surface.parentx = PADDING;
         clear->surface.parenty = frame->item_margin.top;
@@ -503,6 +508,7 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self)
                           - frame->item_margin.bottom);
 
         clear = ob_rr_theme->a_clear_tex;
+        RrAppearanceClearTextures(clear);
         clear->texture[0].type = RR_TEXTURE_MASK;
         clear->texture[0].data.mask.mask =
             self->entry->data.normal.mask;
@@ -694,7 +700,7 @@ void menu_frame_render(ObMenuFrame *self)
             tw = MIN(tw, MAX_MENU_WIDTH);
             th = ob_rr_theme->menu_font_height;
 
-            if (e->entry->data.normal.icon_data ||
+            if (e->entry->data.normal.icon ||
                 e->entry->data.normal.mask)
                 has_icon = TRUE;
             break;
@@ -705,7 +711,7 @@ void menu_frame_render(ObMenuFrame *self)
             tw = MIN(tw, MAX_MENU_WIDTH);
             th = ob_rr_theme->menu_font_height;
 
-            if (e->entry->data.normal.icon_data ||
+            if (e->entry->data.normal.icon ||
                 e->entry->data.normal.mask)
                 has_icon = TRUE;
 
This page took 0.023357 seconds and 4 git commands to generate.