Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion src/panel/widgets/menu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -129,12 +129,25 @@ WfMenuMenuItem::WfMenuMenuItem(WayfireMenu *_menu, Glib::RefPtr<Gio::DesktopAppI
m_extra_actions_button.insert_action_group("app", m_actions);

auto click_gesture = Gtk::GestureClick::create();
auto long_press = Gtk::GestureLongPress::create();
long_press->set_touch_only(true);
long_press->signal_pressed().connect(
[=] (double x, double y)
{
m_extra_actions_button.activate();
long_press->set_state(Gtk::EventSequenceState::CLAIMED);
click_gesture->set_state(Gtk::EventSequenceState::DENIED);
});
click_gesture->set_button(3);
click_gesture->signal_pressed().connect([=] (int count, double x, double y)
{
m_extra_actions_button.activate();
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
});
click_gesture->signal_released().connect([=] (int count, double x, double y)
{
m_extra_actions_button.activate();
});
m_button.add_controller(long_press);
m_button.add_controller(click_gesture);
}

Expand Down
16 changes: 15 additions & 1 deletion src/panel/widgets/notifications/notification-center.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,27 @@ void WayfireNotificationCenter::init(Gtk::Box *container)
button->set_tooltip_text("Middle click to toggle DND mode.");

auto click_gesture = Gtk::GestureClick::create();
auto long_press = Gtk::GestureLongPress::create();
long_press->set_touch_only(true);
long_press->signal_pressed().connect(
[=] (double x, double y)
{
dnd_enabled = !dnd_enabled;
updateIcon();
long_press->set_state(Gtk::EventSequenceState::CLAIMED);
click_gesture->set_state(Gtk::EventSequenceState::DENIED);
});
click_gesture->set_button(2);
click_gesture->signal_pressed().connect([=] (int count, double x, double y)
{
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
});
click_gesture->signal_released().connect([=] (int count, double x, double y)
{
dnd_enabled = !dnd_enabled;
updateIcon();
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
});
button->add_controller(long_press);
button->add_controller(click_gesture);

for (const auto & [id, _] : daemon->getNotifications())
Expand Down
6 changes: 5 additions & 1 deletion src/panel/widgets/notifications/single-notification.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,9 +147,13 @@ WfSingleNotification::WfSingleNotification(const Notification & notification)
click_gesture->signal_pressed().connect(
[id = notification.id, action_key, click_gesture] (int count, double x, double y)
{
Daemon::Instance()->invokeAction(id, action_key);
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
});
click_gesture->signal_released().connect(
[id = notification.id, action_key, click_gesture] (int count, double x, double y)
{
Daemon::Instance()->invokeAction(id, action_key);
});
default_action_ev_box.add_controller(click_gesture);
}
}
Expand Down
22 changes: 15 additions & 7 deletions src/panel/widgets/tray/item.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,22 @@ void StatusNotifierItem::init_widget()
}, true);

auto click_gesture = Gtk::GestureClick::create();
auto long_press = Gtk::GestureLongPress::create();
long_press->set_touch_only(true);
long_press->signal_pressed().connect(
[=] (double x, double y)
{
popover.popup();
long_press->set_state(Gtk::EventSequenceState::CLAIMED);
click_gesture->set_state(Gtk::EventSequenceState::DENIED);
});
click_gesture->set_button(0);
click_gesture->signal_pressed().connect([=] (int count, double x, double y)
{
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
return;
});
click_gesture->signal_released().connect([=] (int count, double x, double y)
{
int butt = click_gesture->get_current_button();
const auto ev_coords = Glib::Variant<std::tuple<int, int>>::create({0, 0});
Expand Down Expand Up @@ -131,17 +145,11 @@ void StatusNotifierItem::init_widget()
} else if (butt == tertiary_click)
{
item_proxy->call("SecondaryActivate", ev_coords);
} else
{
// Don't claim other buttons
click_gesture->set_state(Gtk::EventSequenceState::DENIED);
return;
}

click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
return;
});

add_controller(long_press);
add_controller(scroll_gesture);
add_controller(click_gesture);
}
Expand Down
16 changes: 16 additions & 0 deletions src/panel/widgets/volume.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -296,13 +296,29 @@ void WayfireVolume::init(Gtk::Box *container)

/* Middle click toggle mute */
auto middle_click_gesture = Gtk::GestureClick::create();
auto long_press = Gtk::GestureLongPress::create();
long_press->set_touch_only(true);
long_press->signal_pressed().connect(
[=] (double x, double y)
{
bool muted = !(gvc_stream && gvc_mixer_stream_get_is_muted(gvc_stream));
gvc_mixer_stream_change_is_muted(gvc_stream, muted);
gvc_mixer_stream_push_volume(gvc_stream);
long_press->set_state(Gtk::EventSequenceState::CLAIMED);
middle_click_gesture->set_state(Gtk::EventSequenceState::DENIED);
});
middle_click_gesture->set_button(2);
middle_click_gesture->signal_pressed().connect([=] (int count, double x, double y)
{
middle_click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
});
middle_click_gesture->signal_released().connect([=] (int count, double x, double y)
{
bool muted = !(gvc_stream && gvc_mixer_stream_get_is_muted(gvc_stream));
gvc_mixer_stream_change_is_muted(gvc_stream, muted);
gvc_mixer_stream_push_volume(gvc_stream);
});
button.add_controller(long_press);
button.add_controller(middle_click_gesture);

/* Setup layout */
Expand Down
34 changes: 19 additions & 15 deletions src/panel/widgets/window-list/toplevel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,30 +115,27 @@ class WayfireToplevel::impl
button.add_controller(drag_gesture);

auto click_gesture = Gtk::GestureClick::create();
auto long_press = Gtk::GestureLongPress::create();
long_press->set_touch_only(true);
long_press->signal_pressed().connect(
[=] (double x, double y)
{
popover.popup();
long_press->set_state(Gtk::EventSequenceState::CLAIMED);
click_gesture->set_state(Gtk::EventSequenceState::DENIED);
});
click_gesture->set_button(0);
click_gesture->signal_pressed().connect(
[=] (int count, double x, double y)
{
int butt = click_gesture->get_current_button();
if (butt == 3)
{
popover.popup();
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
} else if (butt == 1)
{
// Don't action it now because the press might be a drag!
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
} else if (butt = 2 && middle_click_close)
{
zwlr_foreign_toplevel_handle_v1_close(handle);
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
}
click_gesture->set_state(Gtk::EventSequenceState::CLAIMED);
});

click_gesture->signal_released().connect(
[=] (int count, double x, double y)
{
if (click_gesture->get_current_button() == 1)
int butt = click_gesture->get_current_button();
if (butt == 1)
{
// Ah, it was a press after all!
if (!ignore_next_click)
Expand All @@ -147,8 +144,15 @@ class WayfireToplevel::impl
}

ignore_next_click = false;
} else if (butt == 2)
{
zwlr_foreign_toplevel_handle_v1_close(handle);
} else if (butt == 3)
{
popover.popup();
}
});
button.add_controller(long_press);
button.add_controller(click_gesture);

this->window_list = window_list;
Expand Down
Loading