The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# centre of screen instead of under mouse ?


# Copyright 2007, 2008, 2009, 2010, 2011 Kevin Ryde

# This file is part of Chart.
#
# Chart is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 3, or (at your option) any later
# version.
#
# Chart is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with Chart.  If not, see <http://www.gnu.org/licenses/>.

package App::Chart::Gtk2::Ex::MenuBits;
use 5.008;
use strict;
use warnings;
use Gtk2;

# uncomment this to run the ### lines
#use Smart::Comments;

sub position_screen_centre {
  my ($menu) = @_;
  ### position_screen_centre()

  my $menu_req = $menu->requisition;
  my $screen = $menu->get_screen;

  # returning $push_in==1 will move these if negative due to menu bigger
  # than screen
  my $x = int (($screen->get_width - $menu_req->width)/ 2);
  my $y = int (($screen->get_height - $menu_req->height) / 2);
  ###  $x
  ###  $y
  return ($x, $y, 1);
}

# usually $event->button, $event->time is enough ...
#
sub menu_popup_for_event {
  my ($menu, $event) = @_;
  my $button = (Scalar::Util::blessed($event) && event_is_button_press($event)
                ? $event->button : 0);
  my $time = (Scalar::Util::blessed($event) && $event->can('time')
              ? $event->time
              : Gtk2::GDK_CURRENT_TIME);  # 1.200 or something
  $menu->popup (undef,  # parent menushell
                undef,  # parent menuitem
                undef,  # position func
                undef,  # data
                $button,
                $time);
}

my %event_types_button_press = ('button-press'  => 1,
                                '2button-press' => 1,
                                '3button-press' => 1);

# return true if $event is a button press, either a plain press or a double
# or triple click
sub event_is_button_press {
  my ($event) = @_;
  return $event_types_button_press{$event->type};
}

1;
__END__

=for stopwords popup

=head1 NAME

App::Chart::Gtk2::Ex::MenuBits -- miscellaneous Gtk2::Menu helpers

=head1 SYNOPSIS

 use App::Chart::Gtk2::Ex::MenuBits;

=head1 FUNCTIONS

=over 4

=item C<< ($x,$y,$push_in) = App::Chart::Gtk2::Ex::MenuBits::position_screen_centre ($menu, $x, $y, $userdata) >>

Position a menu in the centre of the screen.  The input C<$x>, C<$y> and
C<$userdata> are currently ignored (pass C<undef> for C<$userdata>).

=back

=head1 SEE ALSO

L<Gtk2::Ex::WidgetBits>,
L<Gtk2::Ex::MenuBits>

=cut