Skip to content

Commit 255a38e

Browse files
committed
GUI: extended the right-click menu in the Saved Channels window.
Feature proposed in: trizen/pipe-viewer#149
1 parent 5386424 commit 255a38e

File tree

3 files changed

+116
-18
lines changed

3 files changed

+116
-18
lines changed

bin/gtk-youtube-viewer

Lines changed: 113 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#-------------------------------------------------------
1616
# GTK YouTube Viewer
1717
# Created on: 12 September 2010
18-
# Latest edit on: 04 March 2024
18+
# Latest edit on: 11 August 2024
1919
# https://github.com/trizen/youtube-viewer
2020
#-------------------------------------------------------
2121

@@ -1117,11 +1117,28 @@ sub get_text {
11171117
#>>>
11181118
}
11191119

1120+
sub gtk_treeview_button_press {
1121+
my ($widget, $event) = @_;
1122+
return 0 if $event->button != 3;
1123+
my $path = ($widget->get_path_at_pos($event->x, $event->y))[0] // return 0;
1124+
$widget->set_cursor($path, undef, 0);
1125+
$widget->grab_focus();
1126+
my $iter = $widget->get_model()->get_iter($path);
1127+
my $menu = $widget->{'get-popup-menu'}->($iter) // return 0;
1128+
$menu->popup(undef, undef, undef, undef, $event->button, $event->time);
1129+
return 1;
1130+
}
1131+
1132+
sub users_list_button_press {
1133+
my ($widget, $event) = @_;
1134+
return gtk_treeview_button_press($widget, $event);
1135+
}
1136+
11201137
# Treeview signals
11211138
{
11221139
$treeview->signal_connect('button_press_event', \&menu_popup);
11231140
$treeview->signal_connect('size-allocate', \&treeview_scroll_to_end) if $CONFIG{autoscroll_to_end};
1124-
$users_treeview->signal_connect('button_press_event', \&users_menu_popup);
1141+
$users_treeview->{'get-popup-menu'} = \&users_menu_popup;
11251142
}
11261143

11271144
# Scroll treeview to end
@@ -1397,7 +1414,7 @@ sub menu_popup {
13971414
# Playlists created by this author
13981415
{
13991416
my $item = 'Gtk3::ImageMenuItem'->new("Playlists");
1400-
$item->signal_connect(activate => \&show_playlists_from_selected_author);
1417+
$item->signal_connect(activate => sub { playlists('channel', $channel_id) });
14011418
$item->set_property(tooltip_text => "Show playlists created by this author");
14021419
$item->set_image('Gtk3::Image'->new_from_icon_name("emblem-documents-symbolic", q{menu}));
14031420
$item->show;
@@ -1634,13 +1651,99 @@ sub menu_popup {
16341651
}
16351652

16361653
sub users_menu_popup {
1637-
my ($treeview, $event) = @_;
1638-
if ($event->button != 3) {
1639-
return 0;
1654+
my ($iter) = @_;
1655+
1656+
my $channel_id = $users_liststore->get($iter, 0);
1657+
my $channel_name = $users_liststore->get($iter, 1);
1658+
1659+
# Create the main right-click menu
1660+
my $menu = 'Gtk3::Menu'->new;
1661+
1662+
# Recent uploads from this author
1663+
{
1664+
my $item = 'Gtk3::ImageMenuItem'->new("Uploads");
1665+
$item->signal_connect(activate => sub { uploads('channel', $channel_id) });
1666+
$item->set_property(tooltip_text => "Show the most recent videos from this author");
1667+
$item->set_image('Gtk3::Image'->new_from_icon_name("emblem-shared-symbolic", q{menu}));
1668+
$item->show;
1669+
$menu->append($item);
16401670
}
1641-
my $menu = $gui->get_object('user_option_menu');
1642-
$menu->popup(undef, undef, undef, undef, $event->button, $event->time);
1643-
return 0;
1671+
1672+
# Most popular uploads from this author
1673+
{
1674+
my $item = 'Gtk3::ImageMenuItem'->new("Popular");
1675+
$item->signal_connect(activate => sub { popular_uploads('channel', $channel_id) });
1676+
$item->set_property(tooltip_text => "Show the most popular videos from this author");
1677+
$item->set_image('Gtk3::Image'->new_from_icon_name("emblem-videos-symbolic", q{menu}));
1678+
$item->show;
1679+
$menu->append($item);
1680+
}
1681+
1682+
# Favorites of this author
1683+
{
1684+
my $item = 'Gtk3::ImageMenuItem'->new("Favorites");
1685+
$item->signal_connect(activate => sub { favorites('channel', $channel_id) });
1686+
$item->set_property(tooltip_text => "Show favorite videos of this author");
1687+
$item->set_image('Gtk3::Image'->new_from_icon_name("emblem-favorite-symbolic", q{menu}));
1688+
$item->show;
1689+
$menu->append($item);
1690+
}
1691+
1692+
# Recent channel activity events
1693+
{
1694+
my $item = 'Gtk3::ImageMenuItem'->new("Activities");
1695+
$item->signal_connect(activate => sub { activities('channel', $channel_id) });
1696+
$item->set_property(tooltip_text => "Show recent channel activity events");
1697+
$item->set_image('Gtk3::Image'->new_from_icon_name("view-refresh-symbolic", q{menu}));
1698+
$item->show;
1699+
$menu->append($item);
1700+
}
1701+
1702+
# Playlists created by this author
1703+
{
1704+
my $item = 'Gtk3::ImageMenuItem'->new("Playlists");
1705+
$item->signal_connect(activate => sub { playlists('channel', $channel_id) });
1706+
$item->set_property(tooltip_text => "Show playlists created by this author");
1707+
$item->set_image('Gtk3::Image'->new_from_icon_name("emblem-documents-symbolic", q{menu}));
1708+
$item->show;
1709+
$menu->append($item);
1710+
}
1711+
1712+
# Separator
1713+
{
1714+
my $item = 'Gtk3::SeparatorMenuItem'->new;
1715+
$item->show;
1716+
$menu->append($item);
1717+
}
1718+
1719+
# Remove the channel
1720+
{
1721+
my $item = 'Gtk3::ImageMenuItem'->new("Remove");
1722+
$item->set_image('Gtk3::Image'->new_from_icon_name("edit-delete", q{menu}));
1723+
$item->set_property(tooltip_text => "Remove the channel from this list");
1724+
$item->signal_connect(activate => \&remove_selected_username);
1725+
$item->show;
1726+
$menu->append($item);
1727+
}
1728+
1729+
# Separator
1730+
{
1731+
my $item = 'Gtk3::SeparatorMenuItem'->new;
1732+
$item->show;
1733+
$menu->append($item);
1734+
}
1735+
1736+
# Open the YouTube channel page
1737+
{
1738+
my $item = 'Gtk3::ImageMenuItem'->new("YouTube page");
1739+
$item->signal_connect(activate => sub { open_external_url(make_youtube_url('channel', $channel_id)) });
1740+
$item->set_property(tooltip_text => "Open the YouTube page of this channel");
1741+
$item->set_image('Gtk3::Image'->new_from_icon_name("web-browser-symbolic", q{menu}));
1742+
$item->show;
1743+
$menu->append($item);
1744+
}
1745+
1746+
return $menu;
16441747
}
16451748

16461749
# Setting help text
@@ -4189,14 +4292,7 @@ sub show_videos_from_selected_author {
41894292
}
41904293

41914294
sub show_playlists_from_selected_author {
4192-
my $request = $yv_obj->playlists(get_channel_id_for_selected_video() || return);
4193-
if ($yv_utils->has_entries($request)) {
4194-
display_results($request);
4195-
}
4196-
else {
4197-
die "No playlists found...\n";
4198-
}
4199-
return 1;
4295+
playlists('channel', get_channel_id_for_selected_video() || return);
42004296
}
42014297

42024298
sub set_entry_details {

bin/youtube-viewer

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#-------------------------------------------------------
1616
# youtube-viewer
1717
# Created on: 02 June 2010
18-
# Latest edit on: 04 March 2024
18+
# Latest edit on: 11 August 2024
1919
# https://github.com/trizen/youtube-viewer
2020
#-------------------------------------------------------
2121

share/gtk3-youtube-viewer.glade

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3426,6 +3426,8 @@ and others... https://github.com/trizen/youtube-viewer/graphs/contributors</prop
34263426
<property name="visible">True</property>
34273427
<property name="can-focus">True</property>
34283428
<property name="model">liststore2</property>
3429+
<signal name="button-press-event" handler="users_list_button_press" swapped="no"/>
3430+
<signal name="popup-menu" handler="gtk_treeview_popup_menu" swapped="no"/>
34293431
<signal name="row-activated" handler="videos_from_saved_channel" swapped="no"/>
34303432
<child internal-child="selection">
34313433
<object class="GtkTreeSelection"/>

0 commit comments

Comments
 (0)