aboutsummaryrefslogtreecommitdiff
path: root/src/scintilla_backports/6120_8e0cb37c4972.patch
blob: 373e1121ebd6408088b1285a7934b6a94822c06f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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,