X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenuframe.c;h=6110045cc459dd2596781242c90c4be3d72b2d93;hb=be9637e40317eb36e5a5357d3f58e3af21c81df4;hp=5708cdf8d2e337c604a209cfbed53ac1525c127e;hpb=624ffe397bb52757f486208b754489cdb77fd923;p=chaz%2Fopenbox diff --git a/openbox/menuframe.c b/openbox/menuframe.c index 5708cdf8..6110045c 100644 --- a/openbox/menuframe.c +++ b/openbox/menuframe.c @@ -181,7 +181,8 @@ static ObMenuEntryFrame* menu_entry_frame_new(ObMenuEntry *entry, self->text = createWindow(self->window, 0, NULL); g_hash_table_insert(menu_frame_map, &self->window, self); g_hash_table_insert(menu_frame_map, &self->text, self); - if (entry->type == OB_MENU_ENTRY_TYPE_NORMAL) { + if ((entry->type == OB_MENU_ENTRY_TYPE_NORMAL) || + (entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)) { self->icon = createWindow(self->window, 0, NULL); g_hash_table_insert(menu_frame_map, &self->icon, self); } @@ -209,7 +210,8 @@ static void menu_entry_frame_free(ObMenuEntryFrame *self) XDestroyWindow(obt_display, self->window); g_hash_table_remove(menu_frame_map, &self->text); g_hash_table_remove(menu_frame_map, &self->window); - if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) { + if ((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) || + (self->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)) { XDestroyWindow(obt_display, self->icon); g_hash_table_remove(menu_frame_map, &self->icon); } @@ -324,11 +326,18 @@ void menu_frame_move_on_screen(ObMenuFrame *self, gint x, gint y, gint *dx, gint *dy) { const Rect *a = NULL; - gint pos, half; + Rect search = self->area; + gint pos, half, monitor; *dx = *dy = 0; + RECT_SET_POINT(search, x, y); - a = screen_physical_area_monitor(screen_find_monitor_point(x, y)); + if (self->parent) + monitor = self->parent->monitor; + else + monitor = screen_find_monitor(&search); + + a = screen_physical_area_monitor(monitor); half = g_list_length(self->entries) / 2; pos = g_list_index(self->entries, self->selected); @@ -515,7 +524,8 @@ static void menu_entry_frame_render(ObMenuEntryFrame *self) g_assert_not_reached(); } - if (self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL && + if (((self->entry->type == OB_MENU_ENTRY_TYPE_NORMAL) || + (self->entry->type == OB_MENU_ENTRY_TYPE_SUBMENU)) && self->entry->data.normal.icon) { RrAppearance *clear;