diff options
Diffstat (limited to 'src/scintilla_backports/6120_8e0cb37c4972.patch')
-rw-r--r-- | src/scintilla_backports/6120_8e0cb37c4972.patch | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/scintilla_backports/6120_8e0cb37c4972.patch b/src/scintilla_backports/6120_8e0cb37c4972.patch new file mode 100644 index 00000000..373e1121 --- /dev/null +++ b/src/scintilla_backports/6120_8e0cb37c4972.patch @@ -0,0 +1,71 @@ +# HG changeset patch +# User Colomban Wendling <ban@herbesfolles.org> +# Date 1488893049 -3600 +# Node ID 8e0cb37c4972cd66b33293b88031acf453685cfd +# Parent 71bee2f066197ae012f92de55433700df2bdcd09 +GTK: Fix popup positioning on monitors not positioned at 0,0 + +diff -r 71bee2f06619 -r 8e0cb37c4972 gtk/PlatGTK.cxx +--- a/gtk/PlatGTK.cxx Wed Mar 08 08:33:29 2017 +1100 ++++ b/gtk/PlatGTK.cxx Tue Mar 07 14:24:09 2017 +0100 +@@ -1059,25 +1059,21 @@ + GdkWindow *wndRelativeTo = WindowFromWidget(PWidget(relativeTo.wid)); + gdk_window_get_origin(wndRelativeTo, &ox, &oy); + ox += rc.left; +- if (ox < 0) +- ox = 0; + oy += rc.top; +- if (oy < 0) +- oy = 0; + +- GdkRectangle rcScreen = MonitorRectangleForWidget(PWidget(relativeTo.wid)); ++ GdkRectangle rcMonitor = MonitorRectangleForWidget(PWidget(relativeTo.wid)); + + /* do some corrections to fit into screen */ + int sizex = rc.right - rc.left; + int sizey = rc.bottom - rc.top; +- const int screenWidth = rcScreen.width; +- const int screenHeight = rcScreen.height; +- if (sizex > screenWidth) +- ox = 0; /* the best we can do */ +- else if (ox + sizex > screenWidth) +- ox = screenWidth - sizex; +- if (oy + sizey > screenHeight) +- oy = screenHeight - sizey; ++ if (sizex > rcMonitor.width || ox < rcMonitor.x) ++ ox = rcMonitor.x; /* the best we can do */ ++ else if (ox + sizex > rcMonitor.x + rcMonitor.width) ++ ox = rcMonitor.x + rcMonitor.width - sizex; ++ if (sizey > rcMonitor.height || oy < rcMonitor.y) ++ oy = rcMonitor.y; ++ else if (oy + sizey > rcMonitor.y + rcMonitor.height) ++ oy = rcMonitor.y + rcMonitor.height - sizey; + + gtk_window_move(GTK_WINDOW(PWidget(wid)), ox, oy); + +@@ -1929,20 +1925,18 @@ + // Rely on GTK+ to do the right thing with positioning + gtk_menu_popup_at_pointer(widget, NULL); + #else +- GdkRectangle rcScreen = MonitorRectangleForWidget(PWidget(wnd.GetID())); +- const int screenWidth = rcScreen.width; +- const int screenHeight = rcScreen.height; ++ GdkRectangle rcMonitor = MonitorRectangleForWidget(PWidget(wnd.GetID())); + GtkRequisition requisition; + #if GTK_CHECK_VERSION(3,0,0) + gtk_widget_get_preferred_size(GTK_WIDGET(widget), NULL, &requisition); + #else + gtk_widget_size_request(GTK_WIDGET(widget), &requisition); + #endif +- if ((pt.x + requisition.width) > screenWidth) { +- pt.x = screenWidth - requisition.width; ++ if ((pt.x + requisition.width) > rcMonitor.x + rcMonitor.width) { ++ pt.x = rcMonitor.x + rcMonitor.width - requisition.width; + } +- if ((pt.y + requisition.height) > screenHeight) { +- pt.y = screenHeight - requisition.height; ++ if ((pt.y + requisition.height) > rcMonitor.y + rcMonitor.height) { ++ pt.y = rcMonitor.y + rcMonitor.height - requisition.height; + } + gtk_menu_popup(widget, NULL, NULL, MenuPositionFunc, + GINT_TO_POINTER((static_cast<int>(pt.y) << 16) | static_cast<int>(pt.x)), 0, |