X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenuframe.c;h=6110045cc459dd2596781242c90c4be3d72b2d93;hb=e27680e4205f5be210cd52660f495e67623e6260;hp=fafc0f790c0185bc045ec0ff862019043d6d0e13;hpb=aa3685d16af4a565eecdc39047ee8d140ef5cd99;p=chaz%2Fopenbox diff --git a/openbox/menuframe.c b/openbox/menuframe.c index fafc0f79..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; @@ -1158,7 +1168,6 @@ static gboolean submenu_show_timeout(gpointer data) { g_assert(menu_frame_visible); menu_entry_frame_show_submenu((ObMenuEntryFrame*)data); - XFlush(obt_display); return FALSE; } @@ -1166,7 +1175,6 @@ static gboolean submenu_hide_timeout(gpointer data) { g_assert(menu_frame_visible); menu_frame_hide((ObMenuFrame*)data); - XFlush(obt_display); return FALSE; }