diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2020-08-26 09:21:27 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2020-08-26 09:21:27 +0200 |
commit | 7ad3a787223a5c84d3a293f2df9e735659b8032e (patch) | |
tree | 5ced88c8b055b655128a3304d2484bdf9873300a | |
parent | cb4cf542b001461951c0746993a8ca5627b35d1e (diff) | |
parent | 6de1c026b14470f401e9faadad908ec82aab4a7b (diff) | |
download | libayatana-indicator-7ad3a787223a5c84d3a293f2df9e735659b8032e.tar.gz libayatana-indicator-7ad3a787223a5c84d3a293f2df9e735659b8032e.tar.bz2 libayatana-indicator-7ad3a787223a5c84d3a293f2df9e735659b8032e.zip |
Merge branch 'tari01-pr/fix-menu-scrolling'
Attributes GH PR #22: https://github.com/AyatanaIndicators/libayatana-indicator/pull/22
-rw-r--r-- | libayatana-indicator/indicator-ng.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libayatana-indicator/indicator-ng.c b/libayatana-indicator/indicator-ng.c index fa4fb8a..5d34139 100644 --- a/libayatana-indicator/indicator-ng.c +++ b/libayatana-indicator/indicator-ng.c @@ -290,9 +290,15 @@ static void indicator_ng_menu_size_allocate(GtkWidget *pWidget, GtkAllocation *p GList *pMenuItem = gtk_container_get_children(GTK_CONTAINER(self->entry.menu)); guint nWidth = 0; guint nHeight = 0; + GdkWindow *pWindowBin = NULL; while (pMenuItem) { + if (!pWindowBin) + { + pWindowBin = gtk_widget_get_parent_window(pMenuItem->data); + } + gint nWidthNat; gint nHeightNat; gtk_widget_get_preferred_width(pMenuItem->data, NULL, &nWidthNat); @@ -315,8 +321,22 @@ static void indicator_ng_menu_size_allocate(GtkWidget *pWidget, GtkAllocation *p gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &nIconWidth, NULL); nWidth += (2 * nBorderWidth) + cPadding.left + cPadding.right + (nIconWidth * 3) / 2; nHeight += (2 * nBorderWidth) + cPadding.top + cPadding.bottom + (nIconWidth * 3) / 4; + + GdkRectangle cRectangle = {0}; + GdkDisplay *pDisplay = gdk_display_get_default(); + GdkMonitor *pMonitor = gdk_display_get_primary_monitor(pDisplay); + gdk_monitor_get_workarea(pMonitor, &cRectangle); + + if (nHeight <= cRectangle.height) + { + gdk_window_move_resize(pWindowBin, 0, 0, nWidth, nHeight); + } + + nHeight = MIN(nHeight, cRectangle.height); + GdkWindow *pWindow = gtk_widget_get_parent_window(GTK_WIDGET(self->entry.menu)); gdk_window_resize(pWindow, nWidth, nHeight); + gtk_menu_reposition(self->entry.menu); } |