gnucash maint: Bug 516920 Scheduled trasaction calendar popup off screen
Geert Janssens
gjanssens at code.gnucash.org
Wed Nov 30 12:44:59 EST 2016
Updated via https://github.com/Gnucash/gnucash/commit/27f529e7 (commit)
from https://github.com/Gnucash/gnucash/commit/c5198be9 (commit)
commit 27f529e76a1787d15eec3c17f5d00820fc9e6977
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Sat Nov 19 12:55:02 2016 +0000
Bug 516920 Scheduled trasaction calendar popup off screen
If calendar is close to the right screen edge, the pop up can go of screen. Added
test for pop up going off screen.
diff --git a/src/gnome-utils/gnc-dense-cal.c b/src/gnome-utils/gnc-dense-cal.c
index 4224535..92d6882 100644
--- a/src/gnome-utils/gnc-dense-cal.c
+++ b/src/gnome-utils/gnc-dense-cal.c
@@ -1177,6 +1177,8 @@ static gint
gnc_dense_cal_button_press(GtkWidget *widget,
GdkEventButton *evt)
{
+ GdkScreen *screen = gdk_screen_get_default ();
+ GtkAllocation alloc;
gint doc;
GncDenseCal *dcal = GNC_DENSE_CAL(widget);
@@ -1191,15 +1193,21 @@ gnc_dense_cal_button_press(GtkWidget *widget,
// second move after show_all'ing the window should do the
// trick with a bit of flicker.
gtk_window_move(GTK_WINDOW(dcal->transPopup), evt->x_root + 5, evt->y_root + 5);
+
+ gtk_widget_get_allocation(GTK_WIDGET(dcal->transPopup), &alloc);
+
populate_hover_window(dcal, doc);
gtk_widget_queue_resize(GTK_WIDGET(dcal->transPopup));
gtk_widget_show_all(GTK_WIDGET(dcal->transPopup));
- gtk_window_move(GTK_WINDOW(dcal->transPopup), evt->x_root + 5, evt->y_root + 5);
+
+ if ((evt->x_root + 5 + alloc.width > gdk_screen_get_width(screen))||
+ (evt->y_root + 5 + alloc.height > gdk_screen_get_height(screen)))
+ gtk_window_move(GTK_WINDOW(dcal->transPopup), evt->x_root - 2 - alloc.width, evt->y_root - 2 - alloc.height);
+ else
+ gtk_window_move(GTK_WINDOW(dcal->transPopup), evt->x_root + 5, evt->y_root + 5);
}
else
- {
gtk_widget_hide(GTK_WIDGET(dcal->transPopup));
- }
return FALSE;
}
@@ -1207,35 +1215,39 @@ static gint
gnc_dense_cal_motion_notify(GtkWidget *widget,
GdkEventMotion *event)
{
+ GdkScreen *screen = gdk_screen_get_default ();
GncDenseCal *dcal;
+ GtkAllocation alloc;
gint doc;
int unused;
- int x_root_offset, y_root_offset;
GdkModifierType unused2;
dcal = GNC_DENSE_CAL(widget);
if (!dcal->showPopup)
return FALSE;
- x_root_offset = event->x_root;
- y_root_offset = event->y_root;
-
/* As per http://www.gtk.org/tutorial/sec-eventhandling.html */
if (event->is_hint)
gdk_window_get_pointer(event->window, &unused, &unused, &unused2);
- gdk_window_move(gtk_widget_get_window (GTK_WIDGET(dcal->transPopup)),
- x_root_offset + 5, y_root_offset + 5);
+
doc = wheres_this(dcal, event->x, event->y);
if (doc >= 0)
{
populate_hover_window(dcal, doc);
gtk_widget_queue_resize(GTK_WIDGET(dcal->transPopup));
+
+ gtk_widget_get_allocation(GTK_WIDGET(dcal->transPopup), &alloc);
+
gtk_widget_show_all(GTK_WIDGET(dcal->transPopup));
+
+ if ((event->x_root + 5 + alloc.width > gdk_screen_get_width(screen))||
+ (event->y_root + 5 + alloc.height > gdk_screen_get_height(screen)))
+ gtk_window_move(GTK_WINDOW(dcal->transPopup), event->x_root - 2 - alloc.width, event->y_root - 2 - alloc.height);
+ else
+ gtk_window_move(GTK_WINDOW(dcal->transPopup), event->x_root + 5, event->y_root + 5);
}
else
- {
gtk_widget_hide(GTK_WIDGET(dcal->transPopup));
- }
return TRUE;
}
Summary of changes:
src/gnome-utils/gnc-dense-cal.c | 34 +++++++++++++++++++++++-----------
1 file changed, 23 insertions(+), 11 deletions(-)
More information about the gnucash-changes
mailing list