summaryrefslogtreecommitdiffstats
path: root/perl-install/install/gtk.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/install/gtk.pm')
-rw-r--r--perl-install/install/gtk.pm190
1 files changed, 82 insertions, 108 deletions
diff --git a/perl-install/install/gtk.pm b/perl-install/install/gtk.pm
index beaadad9c..f878e42d9 100644
--- a/perl-install/install/gtk.pm
+++ b/perl-install/install/gtk.pm
@@ -1,18 +1,20 @@
-package install::gtk; # $Id$
+package install::gtk;
use diagnostics;
use strict;
-use ugtk2;
-use mygtk2;
+use ugtk3;
+use mygtk3;
use common;
use lang;
use devices;
+use detect_devices;
#-#####################################################################################
#-INTERN CONSTANT
#-#####################################################################################
+# FIXME: either drop 'doc' option or convert this to CSS!
#- if we're running for the doc team, we want screenshots with
#- a good B&W contrast: we'll override values of our theme
my $theme_overriding_for_doc = q(style "galaxy-default"
@@ -52,13 +54,15 @@ widget "*logo*" style "background-logo"
);
#------------------------------------------------------------------------------
-sub load_rc {
+sub load_css {
my ($o, $name) = @_;
my $f = $name;
- -r $name or $f = find { -r $_ } map { "$_/themes-$name.rc" } ("share", $ENV{SHARE_PATH}, dirname(__FILE__) . '/..');
+ -r $name or $f = find { -r $_ } map { "$_/themes-$name.css" } ("share", $ENV{SHARE_PATH}, dirname(__FILE__) . '/..');
if ($f) {
- Gtk2::Rc->parse_string($o->{doc} ? $theme_overriding_for_doc : scalar cat_($f));
+ my $pl = Gtk3::CssProvider->new;
+ $pl->load_from_data($o->{doc} ? $theme_overriding_for_doc : scalar cat_($f));
+ Gtk3::StyleContext::add_provider_for_screen(Gtk3::Gdk::Screen::get_default(), $pl, Gtk3::STYLE_PROVIDER_PRIORITY_APPLICATION);
}
}
@@ -66,20 +70,21 @@ sub load_rc {
sub load_font {
my ($o) = @_;
- if (lang::text_direction_rtl()) {
- Gtk2::Widget->set_default_direction('rtl');
+ if (defined($::WizardWindow) && lang::text_direction_rtl()) {
+ Gtk3::Widget::set_default_direction('rtl');
my ($x, $y) = $::WizardWindow->get_position;
my ($width) = $::WizardWindow->get_size;
$::WizardWindow->move($::rootwidth - $width - $x, $y);
}
- Gtk2::Rc->parse_string(q(
-style "default-font"
-{
- font_name = ") . lang::l2pango_font($o->{locale}{lang}) . q("
-}
-widget "*" style "default-font"
-
+ my $font = lang::l2pango_font($o->{locale}{lang});
+ my $s = qq(gtk-font-name = $font);
+ my $pl = Gtk3::CssProvider->new;
+ $pl->load_from_data(sprintf("GtkWindow { %s }", lang::l2css_font($o->{locale}{lang})));
+ Gtk3::StyleContext::add_provider_for_screen(Gtk3::Gdk::Screen::get_default(), $pl, Gtk3::STYLE_PROVIDER_PRIORITY_APPLICATION);
+ # FIXME: this should be done in /mnt too for forked app such as gurpmi{,.addmedia} (mga#67):
+ output("/.config/gtk-3.0/settings.ini", qq([Settings]
+$s
));
}
@@ -94,16 +99,22 @@ my $root_window;
sub install_theme {
my ($o) = @_;
- load_rc($o, $o->{theme} ||= default_theme($o));
+ load_css($o, $o->{theme} ||= default_theme($o));
load_font($o);
my $win = gtknew('Window', widget_name => 'background', title => 'root window');
$win->set_type_hint('desktop'); # for matchbox window manager
$win->realize;
- mygtk2::set_root_window_background_with_gc($win->style->bg_gc('normal'));
$root_window = $win;
}
+sub create_step_box {
+ gtknew('HBox', spacing => 0, children => [
+ @_,
+ 0, gtknew('Alignment', width => 24),
+ ]);
+}
+
#------------------------------------------------------------------------------
my %steps;
sub create_steps_window {
@@ -112,15 +123,14 @@ sub create_steps_window {
$o->{steps_window} and $o->{steps_window}->destroy;
$steps{$_} ||= gtknew('Pixbuf', file => "steps_$_") foreach qw(on off done);
+
my $category = sub {
- gtknew('HBox', spacing => 7, children => [
+ create_step_box(
1, gtknew('Label_Right', text_markup => '<b>' . uc($_[0]) . '</b>', widget_name => 'Step-categories'),
- 0, gtknew('Image', file => 'steps_off.png'),
- ]);
+ );
};
my @l = (
- gtknew('HBox', height => 145),
$category->(N("Installation"))
);
foreach (grep { !eval $o->{steps}{$_}{hidden} } @{$o->{orderedSteps}}) {
@@ -129,46 +139,19 @@ sub create_steps_window {
}
my $img = gtknew('Image', file => 'steps_off.png');
$steps{steps}{$_}{img} = $img;
- push @l, gtknew('HBox', spacing => 7, children => [
+ push @l, create_step_box(
1, $steps{steps}{$_}{text} = gtknew('Label_Right', text => translate($o->{steps}{$_}{text})),
+ 0, gtknew('Alignment', width => 6),
0, $img,
- ]);
+ );
}
my $offset = 10;
- my $height = 600;
$o->{steps_widget} =
- gtknew('Fixed', widget_name => 'Steps', pixbuf_file => 'left-background',
- has_window => 1, x => 0, y => 0, height => $height, width => $::stepswidth, # -1
- child => gtknew('VBox', spacing => 6, width => ($::stepswidth - $offset), children_tight => \@l));
-
- $o->{steps_widget}->put(my $da = gtknew('DrawingArea', width => $::stepswidth-11, widget_name => 'Left_background',
- height => 300, # prevent logo to be tiled (do mosazic style rendering)
- ), 0, $height);
-
- my $set_pixmap = sub {
- my ($darea) = @_;
- return if !$darea->realized;
- my $window = $da->window;
- my $pixmap = $da->{back_pixmap} ||= Gtk2::Gdk::Pixmap->new($window, 1, 1, $window->get_depth);
- my $style = $da->get_style;
- $pixmap->draw_points($style->base_gc('normal'), 0, 0);
- $window->set_back_pixmap($pixmap);
- $darea->queue_draw;
- };
- $da->signal_connect(realize => $set_pixmap);
-
- $o->{steps_widget}->put(
- # FIXME: not RTL compliant (lang::text_direction_rtl() ? ...)
- gtknew('VBox', height => $::rootheight,
- children => [
- 0, gtknew('Image', file => 'left-top-corner'),
- (map { (1, gtknew('Image', file => 'left-border')) } 1 .. $::rootheight),
- 0, gtknew('Image', file => 'left-bottom-corner'),
- ]),
- $::stepswidth - 21, 0);
-
- $o->{steps_widget}->show;
+ gtknew('MDV_Notebook', widget_name => 'Steps', children => [
+ # 145 is the vertical offset in order to be below the actual logo:
+ [ gtknew('VBox', spacing => 6, width => ($::stepswidth - $offset), children_tight => \@l), 0, 145 ]
+ ]);
$root_window->add(
$o->{steps_window} =
@@ -176,13 +159,13 @@ sub create_steps_window {
children =>
[
if_($::stepswidth != 0, 0, $o->{steps_widget}),
- 0, $o->{steps_widget},
1, gtknew('Label', width => -1, height => -1),
],
)
);
-
- $root_window->show_all
+
+ $root_window->set_position('GTK_WIN_POS_CENTER_ALWAYS');
+ $root_window->show_all;
}
sub update_steps_position {
@@ -192,7 +175,10 @@ sub update_steps_position {
foreach (@{$o->{orderedSteps}}) {
exists $steps{steps}{$_} or next;
if ($o->{steps}{$_}{entered} && !$o->{steps}{$_}{done}) {
- $steps{steps}{$_}{img}->set_from_pixbuf($steps{on});
+ # we need to flush the X queue since else we got a temporary Y position of -1 when switching locales:
+ mygtk3::flush(); #- for auto_installs which never go through the Gtk3 main loop
+ $o->{steps_widget}->move_selection($steps{steps}{$_}{text});
+
if ($last_step) {
$steps{steps}{$last_step}{img}->set_from_pixbuf($steps{done});
}
@@ -200,22 +186,19 @@ sub update_steps_position {
}
$last_step = $_;
}
- mygtk2::flush(); #- for auto_installs which never go through the Gtk2 main loop
-}
-
-#------------------------------------------------------------------------------
-sub create_logo {
- my ($o) = @_;
-
- return if $::logowidth == 0;
- gtknew('Image', file => 'logo-mandriva.png');
+ mygtk3::flush(); #- for auto_installs which never go through the Gtk3 main loop
}
#------------------------------------------------------------------------------
sub init_gtk {
my ($o) = @_;
- symlink("/tmp/stage2/etc/$_", "/etc/$_") foreach qw(gtk-2.0 pango fonts);
+ symlink("/tmp/stage2/etc/$_", "/etc/$_") foreach qw(gtk-3.0 pango fonts);
+
+ # Custom _global_ CSS:
+ mkdir_p("/.config/gtk-3.0"); # TODO/FIXME: set ENV{HOME} ?
+ # FIXME: this should be done in /mnt too for forked app such as gurpmi{,.addmedia} (mga#67):
+ symlinkf('/usr/lib/libDrakX/gtk.css', '/.config/gtk-3.0/gtk.css');
if ($o->{vga16}) {
#- inactivate antialias in VGA16 because it makes fonts look worse
@@ -228,18 +211,19 @@ q(<fontconfig>
$ENV{FONTCONFIG_FILE} = '/tmp/fonts.conf';
}
- Gtk2->init;
- Gtk2->set_locale;
+ Gtk3->init;
+ c::init_setlocale();
}
#------------------------------------------------------------------------------
sub init_sizes {
my ($o) = @_;
- ($::rootwidth, $::rootheight) = (Gtk2::Gdk->screen_width, Gtk2::Gdk->screen_height);
+ ($::rootwidth, $::rootheight) = (Gtk3::Gdk::Screen::width, Gtk3::Gdk::Screen::height);
$::stepswidth = $::rootwidth <= 640 ? 0 : 196;
- ($::logowidth, $::logoheight) = $::rootwidth <= 640 ? (0, 0) : (800, 75);
($o->{windowwidth}, $o->{windowheight}) = ($::rootwidth - $::stepswidth, $::rootheight);
- ($::real_windowwidth, $::real_windowheight) = (576, 418);
+ # Adapt the window size to available screen width and height.
+ $::real_windowwidth = $::rootwidth > 800 ? 800 : 576;
+ $::real_windowheight = $::rootheight > 600 ? 633 : 465;
}
sub handle_unsafe_mouse {
@@ -257,49 +241,39 @@ sub handle_unsafe_mouse {
sub special_shortcuts {
my (undef, $event) = @_;
- my $d = ${{ $Gtk2::Gdk::Keysyms{F2} => 'screenshot', $Gtk2::Gdk::Keysyms{Home} => 'restart' }}{$event->keyval};
+ my $d = ${{ Gtk3::Gdk::KEY_F2 => 'screenshot', Gtk3::Gdk::KEY_Home => 'restart' }}{$event->keyval};
if ($d eq 'screenshot') {
+ # FIXME: should handle the fact it doesn't work when chrooted by urpmi during transaction:
install::any::take_screenshot($::o);
} elsif ($d eq 'restart' && member('control-mask', @{$event->state}) && member('mod1-mask', @{$event->state})) {
log::l("restarting install");
- ugtk2->exit(0x35);
+ ugtk3->exit(0x35);
}
0;
}
#------------------------------------------------------------------------------
sub createXconf {
- my ($file, $mouse_type, $mouse_dev, $_wacom_dev, $Driver) = @_;
-
- $mouse_type = 'IMPS/2' if $mouse_type eq 'vboxmouse';
- symlinkf(devices::make($mouse_dev), "/dev/mouse") if $mouse_dev ne 'none';
-
- #- needed for imlib to start on 8-bit depth visual.
- symlink("/tmp/stage2/etc/imrc", "/etc/imrc");
- symlink("/tmp/stage2/etc/im_palette.pal", "/etc/im_palette.pal");
+ my ($file, $Driver) = @_;
#- remove "error opening security policy file" warning
symlink("/tmp/stage2/etc/X11", "/etc/X11");
-if ($Driver) {
- output($file, sprintf(<<'END', $mouse_type, $Driver, $Driver eq 'fbdev' ? '"default"' : '"800x600" "640x480"'));
-Section "Files"
- FontPath "/usr/share/fonts:unscaled"
+ return if !$Driver;
+
+ # grub2-efi init framebuffer in 1024x768, we must stay in sync or loading fails
+ my $resolution = $Driver eq 'fbdev' ? is_uefi() ? '"1024x768"' : '"default"' : '"800x600" "640x480"';
+ # efi framebuffer wants 24 bit
+ my $depth = is_uefi() ? '24' : '16';
+ output($file, qq(Section "ServerFlags"
EndSection
-Section "InputDevice"
- Identifier "Keyboard"
- Driver "keyboard"
- Option "XkbModel" "pc105"
- Option "XkbLayout" "us"
+Section "Module"
+ Disable "glx"
EndSection
-Section "InputDevice"
- Identifier "Mouse"
- Driver "mouse"
- Option "Protocol" "%s"
- Option "Device" "/dev/mouse"
- Option "ZAxisMapping" "4 5"
+Section "Files"
+ FontPath "/usr/share/fonts:unscaled"
EndSection
Section "Monitor"
@@ -310,29 +284,29 @@ EndSection
Section "Device"
Identifier "device"
- Driver "%s"
+ Driver "$Driver"
EndSection
Section "Screen"
Identifier "screen"
Device "device"
Monitor "monitor"
- DefaultColorDepth 16
+ DefaultColorDepth $depth
Subsection "Display"
- Depth 16
- Modes %s
+ Depth $depth
+ Modes $resolution
EndSubsection
EndSection
Section "ServerLayout"
+ Option "BlankTime" "0"
+ Option "StandbyTime" "0"
+ Option "SuspendTime" "0"
+ Option "OffTime" "0"
Identifier "layout"
Screen "screen"
- InputDevice "Mouse" "CorePointer"
- InputDevice "Keyboard" "CoreKeyboard"
EndSection
-
-END
- }
+));
}
1;