From 62aacf365cfd1c466f9fb253d21d02979d7d8610 Mon Sep 17 00:00:00 2001 From: Pascal Rigaux Date: Tue, 11 Jan 2005 15:04:21 +0000 Subject: create "MagicWindow" in mygtk2 out of ugtk2::new() --- perl-install/interactive/gtk.pm | 2 +- perl-install/mygtk2.pm | 71 +++++++++++++++++++++++++++++++++++------ perl-install/ugtk2.pm | 62 +++++++---------------------------- 3 files changed, 74 insertions(+), 61 deletions(-) diff --git a/perl-install/interactive/gtk.pm b/perl-install/interactive/gtk.pm index 7526c8a8b..226237e3a 100644 --- a/perl-install/interactive/gtk.pm +++ b/perl-install/interactive/gtk.pm @@ -596,7 +596,7 @@ sub ask_fromW { $mainw->{box_allow_grow} = 1; my $pack = create_box_with_title($mainw, @{$common->{messages}}); - ugtk2::set_main_window_size($mainw->{window}) if $mainw->{pop_it} && (@$l || $mainw->{box_size} == 200); + ugtk2::set_main_window_size($mainw->{rwindow}) if $mainw->{pop_it} && (@$l || $mainw->{box_size} == 200); my @before_widgets_advanced = ( (map { { grow => 0, real_w => Gtk2::WrappedLabel->new($_) } } @{$common->{advanced_messages}}), diff --git a/perl-install/mygtk2.pm b/perl-install/mygtk2.pm index d2b1340aa..763f55bf7 100644 --- a/perl-install/mygtk2.pm +++ b/perl-install/mygtk2.pm @@ -437,6 +437,56 @@ sub _gtk_any_Window { $w; } +sub _gtk__MagicWindow { + my ($w, $opts) = @_; + + my $pop_it = delete $opts->{pop_it} || !$::isWizard && !$::isEmbedded || $::WizardTable && do { + #- do not take into account the wizard banner + any { !$_->isa('Gtk2::DrawingArea') && $_->visible } $::WizardTable->get_children; + }; + + my $sub_child = delete $opts->{child} or internal_error("missing child"); + + if ($pop_it) { + $opts->{child} = $::isInstall ? + gtknew('Frame', shadow_type => 'out', + child => gtknew('Frame', shadow_type => 'none', border_width => 3, child => $sub_child)) : + $sub_child; + + $w = _create_Window($opts); + } else { + if (!$::WizardWindow) { + + my $banner; + if (!$::isEmbedded && !$::isInstall) { + $banner = Gtk2::Banner->new($opts->{icon_no_error}, $::Wizard_title) or log::l("ERROR: missing wizard banner"); + } + $::WizardTable = gtknew('VBox', if_($banner, children_tight => [ $banner ])); + + if ($::isEmbedded) { + add2hash($opts, { + socket_id => $::XID, + child => $::WizardTable, + }); + $::Plug = $::WizardWindow = _gtk(undef, 'Plug', 'gtknew', $opts); + sync($::WizardWindow); + } else { + add2hash($opts, { + child => gtknew('Frame', shadow_type => 'out', child => $::WizardTable), + }); + $::WizardWindow = _create_Window($opts); + $::WizardWindow->show; + } + } else { + %$opts = (); + } + + gtkset($::WizardTable, children_loose => [ $sub_child ]); + $w = $::WizardWindow; + } + $w; +} + sub _gtk__FileSelection { my ($w, $opts) = @_; @@ -559,21 +609,22 @@ sub _gtknew_handle_children { } sub _create_Window { - my (%options) = @_; + my ($opts) = @_; my $no_Window_Manager = !$::isStandalone; - my $w = gtknew('Window', - if_(!$::isInstall && !$::isWizard, border_width => 5), + add2hash($opts, { + if_(!$::isInstall && !$::isWizard, border_width => 5), - #- policy: during install, we need a special code to handle the weird centering, see below - position_policy => $::isInstall ? 'none' : $no_Window_Manager ? 'center-always' : 'center-on-parent', + #- policy: during install, we need a special code to handle the weird centering, see below + position_policy => $::isInstall ? 'none' : $no_Window_Manager ? 'center-always' : 'center-on-parent', - if_($::isInstall, position => [ - $::rootwidth - ($::windowwidth + $::real_windowwidth) / 2, - $::logoheight + ($::windowheight - $::real_windowheight) / 2, - ]), - %options); + if_($::isInstall, position => [ + $::rootwidth - ($::windowwidth + $::real_windowwidth) / 2, + $::logoheight + ($::windowheight - $::real_windowheight) / 2, + ]), + }); + my $w = _gtk(undef, 'Window', 'gtknew', $opts); #- when the window is closed using the window manager "X" button (or alt-f4) $w->signal_connect(delete_event => sub { diff --git a/perl-install/ugtk2.pm b/perl-install/ugtk2.pm index 8152b90f1..d0e42d711 100644 --- a/perl-install/ugtk2.pm +++ b/perl-install/ugtk2.pm @@ -830,61 +830,23 @@ sub new { my $o = bless { %opts }, $type; while (my $e = shift @tempory::objects) { $e->destroy } - $o->{pop_it} ||= !$::isWizard && !$::isEmbedded || $::WizardTable && do { - #- do not take into account the wizard banner - any { !$_->isa('Gtk2::DrawingArea') && $_->visible } $::WizardTable->get_children; - }; - - my %window_options = ( + my $window = gtknew( + 'MagicWindow', title => $title || '', + pop_it => $o->{pop_it}, + child => $o->{window} = gtknew('VBox'), + modal => $grab || $o->{grab} || $o->{modal}, if_(!$::isInstall, icon_no_error => wm_icon()), + if_($o->{transient} && $o->{transient} =~ /Gtk2::Window/, transient_for => $o->{transient}), ); - - if ($o->{pop_it}) { - $o->{rwindow} = mygtk2::_create_Window( - %window_options, - modal => $grab || $o->{grab} || $o->{modal}, - if_($o->{transient} && $o->{transient} =~ /Gtk2::Window/, transient_for => $o->{transient}), - ); - - if ($::isInstall) { - gtkadd($o->{rwindow}, - gtknew('Frame', shadow_type => 'out', child => - $o->{window} = gtknew('Frame', shadow_type => 'none', border_width => 3) - )); - } else { - $o->{window} = $o->{rwindow}; - } - } else { - if (!$::WizardWindow) { - my $banner; - if (!$::isEmbedded && !$::isInstall) { - $banner = Gtk2::Banner->new(wm_icon(), $::Wizard_title) or log::l("ERROR: missing wizard banner"); - } - $::WizardTable = gtknew('VBox', - if_($banner, children_tight => [ $banner ]), - ); - - if ($::isEmbedded) { - $::Plug = $::WizardWindow = gtknew('Plug', - socket_id => $::XID, - icon_no_error => wm_icon(), - child => $::WizardTable, - title => $title || '', - ); - mygtk2::sync($::WizardWindow); - } else { - $::WizardWindow = mygtk2::_create_Window( - %window_options, - child => gtknew('Frame', shadow_type => 'out', child => $::WizardTable), - ); - $::WizardWindow->show; - } - } - $o->{rwindow} = $o->{window} = gtknew('VBox', border_width => 10); + if ($window == $::WizardWindow) { + $o->{rwindow} = $o->{window}; set_main_window_size($o->{window}); - gtkpack($::WizardTable, $o->{window}); + $o->{window}->set_border_width(10); + } else { + $o->{rwindow} = $window; + $o->{pop_it} = 1; } $o; } -- cgit v1.2.1