[Xfce4-commits] [panel-plugins/xfce4-whiskermenu-plugin] 08/10: Select items when hovering icon view.
noreply at xfce.org
noreply at xfce.org
Tue Dec 31 11:39:57 CET 2019
This is an automated email from the git hooks/post-receive script.
g o t t c o d e p u s h e d a c o m m i t t o b r a n c h m a s t e r
in repository panel-plugins/xfce4-whiskermenu-plugin.
commit b8ec31d4a028136eae64978979819347a68b0522
Author: Graeme Gott <graeme at gottcode.org>
Date: Tue Dec 24 14:38:50 2019 -0500
Select items when hovering icon view.
---
panel-plugin/launcher-icon-view.cpp | 48 +++++++++++++++++++++++++++++++++++++
panel-plugin/launcher-icon-view.h | 6 +++++
2 files changed, 54 insertions(+)
diff --git a/panel-plugin/launcher-icon-view.cpp b/panel-plugin/launcher-icon-view.cpp
index 4e451cc..80554c7 100644
--- a/panel-plugin/launcher-icon-view.cpp
+++ b/panel-plugin/launcher-icon-view.cpp
@@ -54,6 +54,12 @@ LauncherIconView::LauncherIconView() :
gtk_icon_view_set_selection_mode(m_view, GTK_SELECTION_SINGLE);
g_object_ref_sink(m_view);
+
+ // Handle hover selection
+ gtk_widget_add_events(GTK_WIDGET(m_view), GDK_SCROLL_MASK);
+ g_signal_connect_slot(m_view, "leave-notify-event", &LauncherIconView::on_leave_notify_event, this);
+ g_signal_connect_slot(m_view, "motion-notify-event", &LauncherIconView::on_motion_notify_event, this);
+ g_signal_connect_slot(m_view, "scroll-event", &LauncherIconView::on_scroll_event, this);
}
//-----------------------------------------------------------------------------
@@ -275,3 +281,45 @@ void LauncherIconView::reload_icon_size()
}
//-----------------------------------------------------------------------------
+
+gboolean LauncherIconView::on_leave_notify_event(GtkWidget*, GdkEvent*)
+{
+ clear_selection();
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+
+gboolean LauncherIconView::on_motion_notify_event(GtkWidget*, GdkEvent* event)
+{
+ GdkEventMotion* motion_event = reinterpret_cast<GdkEventMotion*>(event);
+ select_path_at_pos(motion_event->x, motion_event->y);
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+
+gboolean LauncherIconView::on_scroll_event(GtkWidget*, GdkEvent* event)
+{
+ GdkEventScroll* scroll_event = reinterpret_cast<GdkEventScroll*>(event);
+ select_path_at_pos(scroll_event->x, scroll_event->y);
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+
+void LauncherIconView::select_path_at_pos(int x, int y)
+{
+ GtkTreePath* path = get_path_at_pos(x, y);
+ if (!path)
+ {
+ clear_selection();
+ }
+ else if (!gtk_icon_view_path_is_selected(m_view, path))
+ {
+ select_path(path);
+ }
+ gtk_tree_path_free(path);
+}
+
+//-----------------------------------------------------------------------------
diff --git a/panel-plugin/launcher-icon-view.h b/panel-plugin/launcher-icon-view.h
index b810000..40a6a62 100644
--- a/panel-plugin/launcher-icon-view.h
+++ b/panel-plugin/launcher-icon-view.h
@@ -62,6 +62,12 @@ public:
void reload_icon_size();
private:
+ gboolean on_leave_notify_event(GtkWidget*, GdkEvent*);
+ gboolean on_motion_notify_event(GtkWidget*, GdkEvent* event);
+ gboolean on_scroll_event(GtkWidget*, GdkEvent* event);
+ void select_path_at_pos(int x, int y);
+
+private:
GtkIconView* m_view;
GtkCellRenderer* m_icon_renderer;
int m_icon_size;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list