Re: Placement of popup ( CellRendererDate from examples )
- From: Daniel Kasak <dkasak nusconsulting com au>
- To: gtk-perl-list gnome org
- Subject: Re: Placement of popup ( CellRendererDate from examples )
- Date: Tue, 06 Sep 2005 13:28:33 +1000
muppet wrote:
I know ( or I think I know anyway ... I haven't tried it yet ) I  can 
do $popup->allocation to get the size of the popup.
There's also get_size_request(), which will ask the widget to  
calculate the size it wants (which propagates to children); you can  
use this before the widget is onscreen to avoid flicker.
This is returning -1 for x and y sizes. Not to worry - allocation() is 
working fine, and I've got a working solution now.
I've attached a patch, against the cellrenderer_date.pl from Gtk2-1.081, 
to fix the issue ... it's a damned useful example ... maybe even a 
candidate for Gtk2::Ex::CoolStuff or something?
Is this the right place to send patches for the example apps?
--
Daniel Kasak
IT Developer
NUS Consulting Group
Level 5, 77 Pacific Highway
North Sydney, NSW, Australia 2060
T: (+61) 2 9922-7676 / F: (+61) 2 9922 7989
email: dkasak nusconsulting com au
website: http://www.nusconsulting.com.au
--- cellrenderer_date.pl.original       2005-09-06 12:26:08.000000000 +1000
+++ cellrenderer_date.pl        2005-09-06 12:27:47.000000000 +1000
@@ -212,14 +212,26 @@
   $popup -> move(-500, -500);
   $popup -> show_all();
 
-  # Align the top right edge of the popup with the the bottom right edge of the
-  # cell.
+  # Figure out where to put the popup - ie don't put it offscreen,
+  # as it's not movable ( by the user )
+  my $screen_height = $popup->get_screen->get_height;
+  my $popup_height = $popup->allocation->height;
+  
   my ($x_origin, $y_origin) =  $view -> get_bin_window() -> get_origin();
-
-  $popup -> move(
-    $x_origin + $cell_area -> x() + $cell_area -> width() - $popup -> allocation() -> width(),
-    $y_origin + $cell_area -> y() + $cell_area -> height()
-  );
+  
+  my ($popup_x, $popup_y);
+  
+  if ($x_origin + $cell_area -> x() + $cell_area -> width() - $popup -> allocation() -> width() < 0) {
+    $popup_x = 0;
+  } else {
+    $popup_x = $x_origin + $cell_area -> x() + $cell_area -> width() - $popup -> allocation() -> width();
+  }
+  
+  if ($y_origin + $cell_area->y + $cell_area->height + $popup_height > $screen_height) {
+    $popup_y = $screen_height - $popup_height;
+  } else {
+    $popup_y = $y_origin + $cell_area -> y() + $cell_area -> height();
+  }
 
   # Grab the focus and the pointer.
   Gtk2 -> grab_add($popup);
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]