Commit 3ed8d961 authored by Nikola Kovacs's avatar Nikola Kovacs Committed by Commit Bot

Respect GTK3 gtk-titlebar-middle-click setting

When using GTK2, Chromium respects the metacity setting that determines
what to do when the title bar is middle clicked.

There is a similar GTK3 setting for client-side decorated windows,
gtk-titlebar-middle-click, which was ignored by Chromium when using GTK3.
This change makes it respect the GTK3 setting.

Bug: 777821
Change-Id: I4a1cb0af4f7ec4e74e8c9de789f52ea92b1be171
Reviewed-on: https://chromium-review.googlesource.com/743624Reviewed-by: default avatarElliot Glaysher <erg@chromium.org>
Reviewed-by: default avatarThomas Anderson <thomasanderson@chromium.org>
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#512559}
parent 2262d52b
......@@ -560,6 +560,7 @@ Nikhil Bansal <n.bansal@samsung.com>
Nikhil Sahni <nikhil.sahni@samsung.com>
Nikita Ofitserov <himikof@gmail.com>
Niklas Schulze <me@jns.io>
Nikola Kovacs <nikola.kovacs@gmail.com>
Nils Schneider <nils@nilsschneider.net>
Nils Schneider <nils.schneider@gmail.com>
Ningxin Hu <ningxin.hu@intel.com>
......
......@@ -44,7 +44,7 @@ std::string GetDecorationLayoutFromGtkWindow() {
} // namespace
NavButtonLayoutManagerGtk3::NavButtonLayoutManagerGtk3(GtkUi* delegate)
: delegate_(delegate), signal_id_(0) {
: delegate_(delegate), signal_id_(0), signal_id_middle_click_(0) {
DCHECK(delegate_);
GtkSettings* settings = gtk_settings_get_default();
if (GtkVersionCheck(3, 14)) {
......@@ -53,6 +53,12 @@ NavButtonLayoutManagerGtk3::NavButtonLayoutManagerGtk3(GtkUi* delegate)
G_CALLBACK(OnDecorationButtonLayoutChangedThunk), this);
DCHECK(signal_id_);
OnDecorationButtonLayoutChanged(settings, nullptr);
signal_id_middle_click_ =
g_signal_connect(settings, "notify::gtk-titlebar-middle-click",
G_CALLBACK(OnMiddleClickActionChangedThunk), this);
DCHECK(signal_id_middle_click_);
OnMiddleClickActionChanged(settings, nullptr);
} else if (GtkVersionCheck(3, 10, 3)) {
signal_id_ = g_signal_connect_after(settings, "notify::gtk-theme-name",
G_CALLBACK(OnThemeChangedThunk), this);
......@@ -67,6 +73,9 @@ NavButtonLayoutManagerGtk3::NavButtonLayoutManagerGtk3(GtkUi* delegate)
NavButtonLayoutManagerGtk3::~NavButtonLayoutManagerGtk3() {
if (signal_id_)
g_signal_handler_disconnect(gtk_settings_get_default(), signal_id_);
if (signal_id_middle_click_)
g_signal_handler_disconnect(gtk_settings_get_default(),
signal_id_middle_click_);
}
void NavButtonLayoutManagerGtk3::SetWindowButtonOrderingFromGtkLayout(
......@@ -84,6 +93,28 @@ void NavButtonLayoutManagerGtk3::OnDecorationButtonLayoutChanged(
GetGtkSettingsStringProperty(settings, "gtk-decoration-layout"));
}
void NavButtonLayoutManagerGtk3::OnMiddleClickActionChanged(
GtkSettings* settings,
GParamSpec* param) {
std::string value =
GetGtkSettingsStringProperty(settings, "gtk-titlebar-middle-click");
GtkUi::NonClientMiddleClickAction action;
if (value == "none") {
action = views::LinuxUI::MIDDLE_CLICK_ACTION_NONE;
} else if (value == "lower") {
action = views::LinuxUI::MIDDLE_CLICK_ACTION_LOWER;
} else if (value == "minimize") {
action = views::LinuxUI::MIDDLE_CLICK_ACTION_MINIMIZE;
} else if (value == "toggle-maximize") {
action = views::LinuxUI::MIDDLE_CLICK_ACTION_TOGGLE_MAXIMIZE;
} else {
// Default to no action if the user has explicitly
// chosen an action that we don't implement.
action = views::LinuxUI::MIDDLE_CLICK_ACTION_NONE;
}
delegate_->SetNonClientMiddleClickAction(action);
}
void NavButtonLayoutManagerGtk3::OnThemeChanged(GtkSettings* settings,
GParamSpec* param) {
std::string layout = GetDecorationLayoutFromGtkWindow();
......
......@@ -32,6 +32,12 @@ class NavButtonLayoutManagerGtk3 : public NavButtonLayoutManager {
GtkSettings*,
GParamSpec*);
CHROMEG_CALLBACK_1(NavButtonLayoutManagerGtk3,
void,
OnMiddleClickActionChanged,
GtkSettings*,
GParamSpec*);
CHROMEG_CALLBACK_1(NavButtonLayoutManagerGtk3,
void,
OnThemeChanged,
......@@ -42,6 +48,8 @@ class NavButtonLayoutManagerGtk3 : public NavButtonLayoutManager {
unsigned long signal_id_;
unsigned long signal_id_middle_click_;
DISALLOW_COPY_AND_ASSIGN(NavButtonLayoutManagerGtk3);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment