summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2022-06-30 18:21:54 +0100
committerdakkar <dakkar@thenautilus.net>2022-06-30 18:21:54 +0100
commitd57949b7f3a29116f804026514cbb59ab7e9ec1b (patch)
treef37606a3c628ac04da6d480f3c8e5692d99bd1e8
parentmigrate Email::Send{,er} (diff)
downloadURLQueue-d57949b7f3a29116f804026514cbb59ab7e9ec1b.tar.gz
URLQueue-d57949b7f3a29116f804026514cbb59ab7e9ec1b.tar.bz2
URLQueue-d57949b7f3a29116f804026514cbb59ab7e9ec1b.zip
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
-rw-r--r--lib/URLQueue/MainController.pm128
-rw-r--r--lib/URLQueue/main.glade31
-rw-r--r--lib/URLQueue/main3.glade30
-rw-r--r--script/URLQueue.pl5
4 files changed, 89 insertions, 105 deletions
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 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--*- mode: xml -*-->
-<glade-interface>
- <widget class="GtkWindow" id="main">
- <property name="width_request">50</property>
- <property name="height_request">50</property>
- <property name="visible">True</property>
- <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
- <property name="title" translatable="yes">URLQueue</property>
- <property name="icon_name">stock_bookmark</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_UTILITY</property>
- <property name="skip_pager_hint">True</property>
- <property name="decorated">False</property>
- <signal name="destroy" handler="quit"/>
- <signal name="button_release_event" handler="button_release"/>
- <child>
- <widget class="GtkImage" id="input">
- <property name="visible">True</property>
- <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
- <property name="stock">gnome-stock-book-green</property>
- <property name="icon_size">3</property>
- <signal name="drag_leave" handler="drag_leave"/>
- <signal name="drag_motion" handler="drag_motion"/>
- <signal name="button_release_event" handler="button_release"/>
- <signal name="drag_data_received" handler="drag_data_received"/>
- <signal name="drag_drop" handler="drag_drop"/>
- </widget>
- </child>
- </widget>
-</glade-interface>
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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.38.2 -->
+<interface>
+ <requires lib="gtk+" version="3.24"/>
+ <object class="GtkWindow" id="main">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+ <property name="title" translatable="yes">URLQueue</property>
+ <property name="resizable">False</property>
+ <property name="icon-name">bookmark-new-symbolic</property>
+ <property name="type-hint">utility</property>
+ <property name="skip-pager-hint">True</property>
+ <property name="decorated">False</property>
+ <signal name="button-release-event" handler="button_release" swapped="no"/>
+ <signal name="destroy" handler="quit" swapped="no"/>
+ <child>
+ <object class="GtkImage" id="input">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="events">GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK</property>
+ <property name="pixbuf">../../share/stock_book_green.png</property>
+ <signal name="button-release-event" handler="button_release" swapped="no"/>
+ <signal name="drag-data-received" handler="drag_data_received" swapped="no"/>
+ <signal name="drag-leave" handler="drag_leave" swapped="no"/>
+ <signal name="drag-motion" handler="drag_motion" swapped="no"/>
+ </object>
+ </child>
+ </object>
+</interface>
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;
+