From d57949b7f3a29116f804026514cbb59ab7e9ec1b Mon Sep 17 00:00:00 2001 From: dakkar Date: Thu, 30 Jun 2022 18:21:54 +0100 Subject: try a gtk3 version stock icons seem gone main icon sizing is wrong doesn't fix the problem with drag&drop img+magnet links from firefox --- lib/URLQueue/MainController.pm | 128 ++++++++++++++++++----------------------- lib/URLQueue/main.glade | 31 ---------- lib/URLQueue/main3.glade | 30 ++++++++++ script/URLQueue.pl | 5 +- 4 files changed, 89 insertions(+), 105 deletions(-) delete mode 100644 lib/URLQueue/main.glade create mode 100644 lib/URLQueue/main3.glade diff --git a/lib/URLQueue/MainController.pm b/lib/URLQueue/MainController.pm index dbd5503..cd360a1 100644 --- a/lib/URLQueue/MainController.pm +++ b/lib/URLQueue/MainController.pm @@ -1,8 +1,9 @@ package URLQueue::MainController; -use strict; -use warnings; -use base 'Gtk2::GladeXML::Simple'; -use Path::Class; +use v5.32; +use Moo; +use experimental 'signatures'; +use Gtk3; +use Path::Tiny; use URI::Find; use URI::Title; use Email::Sender::Simple 'sendmail'; @@ -13,74 +14,65 @@ use MIME::EncWords; use File::ShareDir 'dist_file'; use POSIX 'strftime'; -sub set_icon { - my ($self,$icon) = @_; +has builder => ( + is => 'lazy', + builder => sub ($self) { + my $glade_file=path(__FILE__)->sibling('main3.glade'); + my $builder = Gtk3::Builder->new_from_file("$glade_file"); + $builder->connect_signals(undef, $self); - $self->{input}->set_from_file( + return $builder; + }, +); + +has input => ( + is => 'lazy', + builder => sub ($self) { $self->builder->get_object('input') }, +); + +has _dragging => ( is => 'rw', default => 0 ); +has _last_text => ( is => 'rw', default => '' ); + +sub set_icon($self,$icon) { + $self->input->set_from_file( dist_file('URLQueue',"stock_book_${icon}.png") ); } -sub new { - my ($class,%params)=@_; - - my $glade_file=file(__FILE__)->parent->file('main.glade'); - my $self=$class->SUPER::new($glade_file); - - my $target_list=Gtk2::TargetList->new(); +sub BUILD($self,$args) { + my $target_list=Gtk3::TargetList->new(); $target_list->add_uri_targets(1); $target_list->add_text_targets(2); - $self->{input}->drag_dest_set('all', - [qw(default copy move link private ask)], - ); - $self->{input}->drag_dest_set_target_list($target_list); + $self->input->drag_dest_set( + 'all', + [], + [qw(default copy move link private ask)], + ); + $self->input->drag_dest_set_target_list($target_list); $self->set_icon('green'); - - $self->{glade_dir}=$params{glade_dir}; - - return $self; } -sub drag_motion { - my ($self, $widget, $context, $x, $y, $time) = @_; - - $context->status($context->suggested_action,$time); +sub drag_motion($self, $widget, $context, $x, $y, $time, @) { + #$context->status($context->get_suggested_action,$time); - if (!$self->{_dragging}) { + if (!$self->_dragging) { $self->set_icon('open'); - $self->{_dragging}=1; + $self->_dragging(1); } return 1; } -sub drag_leave { - my ($self, $widget, $context, $time) = @_; - - if ($self->{_dragging}) { +sub drag_leave($self, $widget, $context, $time, @) { + if ($self->_dragging) { $self->set_icon('green'); - $self->{_dragging}=0; + $self->_dragging(0); } return 1; } -sub drag_drop { - my ($self, $widget, $context, $x, $y, $time) = @_; - - if (my $atom=$context->targets) { - $self->set_icon('yellow'); - $self->{_dragging}=0; - $widget->drag_get_data($context, $atom, $time); - return 1; - } - - return 0; -} - -sub drag_data_received { - my ($self, $widget, $context, $x, $y, $data, $info, $time) = @_; - +sub drag_data_received($self, $widget, $context, $x, $y, $data, $info, $time, @) { if ($info==1) { $self->handle_uris($data->get_uris) } @@ -94,21 +86,17 @@ sub drag_data_received { return 1; } -sub paste_clipboard { - my ($self,$widget)=@_; - - my $clipboard=Gtk2::Clipboard->get(); +sub paste_clipboard($self,$widget, @) { + my $clipboard=Gtk3::Clipboard::get_default(); $clipboard->request_text(sub{$self->handle_text($_[1])}); return 1; } -sub button_release { - my ($self,$widget,$event)=@_; - +sub button_release($self,$widget,$event,@) { if ($event->button==2) { $self->set_icon('yellow'); - my $clipboard=Gtk2::Clipboard->get(Gtk2::Gdk->SELECTION_PRIMARY); + my $clipboard=Gtk3::Clipboard::get(Gtk3::Gdk::Atom::intern('PRIMARY',0)); $clipboard->request_text(sub{$self->handle_text($_[1])}); return 1; @@ -118,18 +106,16 @@ sub button_release { } sub quit { - Gtk2->main_quit; + Gtk3->main_quit; } -sub handle_text { - my ($self,$text)=@_; - +sub handle_text($self,$text) { return unless $text; # stupid hack to avoid double-drop from Firefox - return if ($self->{_last_text} and - $self->{_last_text} eq $text); - $self->{_last_text}=$text; + return if ($self->_last_text and + $self->_last_text eq $text); + $self->_last_text($text); { my @uris; @@ -140,7 +126,7 @@ sub handle_text { })->find(\$tmptext); if ($tmptext=~/\A \s* \z/smx) { - return $self->handle_uris(@uris); + return $self->handle_uris(\@uris); } } @@ -158,10 +144,8 @@ sub handle_text { $self->set_icon('green'); } -sub handle_uris { - my ($self,@uris)=@_; - - @uris=grep {$_} @uris; +sub handle_uris($self,$uris) { + my @uris=grep {$_} @$uris; return unless @uris; @@ -180,9 +164,7 @@ sub handle_uris { $self->set_icon('green'); } -sub send_email { - my ($self,$title,$body)=@_; - +sub send_email($self,$title,$body) { $title=MIME::EncWords::encode_mimewords( Encode::encode('utf-8',$title), Charset=>'utf-8', @@ -199,6 +181,8 @@ sub send_email { body => Encode::encode('utf-8',$body), ); + warn $message->as_string;return; + sendmail($message,{ from => 'urlqueue@thenautilus.net', transport => Email::Sender::Transport::SMTP->new({ diff --git a/lib/URLQueue/main.glade b/lib/URLQueue/main.glade deleted file mode 100644 index 6955651..0000000 --- a/lib/URLQueue/main.glade +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - 50 - 50 - True - GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK - URLQueue - stock_bookmark - GDK_WINDOW_TYPE_HINT_UTILITY - True - False - - - - - True - GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK - gnome-stock-book-green - 3 - - - - - - - - - diff --git a/lib/URLQueue/main3.glade b/lib/URLQueue/main3.glade new file mode 100644 index 0000000..a70c6d4 --- /dev/null +++ b/lib/URLQueue/main3.glade @@ -0,0 +1,30 @@ + + + + + + True + False + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK + URLQueue + False + bookmark-new-symbolic + utility + True + False + + + + + True + False + GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK + ../../share/stock_book_green.png + + + + + + + + diff --git a/script/URLQueue.pl b/script/URLQueue.pl index 835c6ec..1174f6d 100644 --- a/script/URLQueue.pl +++ b/script/URLQueue.pl @@ -1,9 +1,10 @@ #!/usr/bin/perl use strict; use warnings; -use Gtk2 -init; +use Gtk3 -init; use URLQueue::MainController; my $main_controller=URLQueue::MainController->new(); -$main_controller->run; +Gtk3->main; + -- cgit v1.2.3