aboutsummaryrefslogtreecommitdiff
path: root/src/scintilla_backports/6120_8e0cb37c4972.patch
diff options
context:
space:
mode:
Diffstat (limited to 'src/scintilla_backports/6120_8e0cb37c4972.patch')
-rw-r--r--src/scintilla_backports/6120_8e0cb37c4972.patch71
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,