summaryrefslogtreecommitdiff
path: root/panels/display/cc-display-panel.c
diff options
context:
space:
mode:
Diffstat (limited to 'panels/display/cc-display-panel.c')
-rw-r--r--panels/display/cc-display-panel.c108
1 files changed, 59 insertions, 49 deletions
diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c
index 2f372fd7e..9488ca80b 100644
--- a/panels/display/cc-display-panel.c
+++ b/panels/display/cc-display-panel.c
@@ -29,7 +29,8 @@
#include <gdesktop-enums.h>
#include <math.h>
-#include "shell/list-box-helper.h"
+#include "shell/cc-object-storage.h"
+#include "list-box-helper.h"
#include <libupower-glib/upower.h>
#include "cc-display-config-manager-dbus.h"
@@ -87,6 +88,8 @@ struct _CcDisplayPanelPrivate
GtkWidget *main_titlebar;
GtkWidget *apply_titlebar;
+ GtkWidget *apply_titlebar_apply;
+ GtkWidget *apply_titlebar_warning;
};
typedef struct
@@ -283,6 +286,8 @@ reset_titlebar (CcDisplayPanel *self)
}
g_clear_object (&priv->apply_titlebar);
+ g_clear_object (&priv->apply_titlebar_apply);
+ g_clear_object (&priv->apply_titlebar_warning);
}
static void
@@ -2590,47 +2595,59 @@ on_toplevel_key_press (GtkWidget *button,
}
static void
-show_apply_titlebar (CcDisplayPanel *panel)
+show_apply_titlebar (CcDisplayPanel *panel, gboolean is_applicable)
{
CcDisplayPanelPrivate *priv = panel->priv;
- GtkWidget *header, *button, *toplevel;
GtkSizeGroup *size_group;
- if (priv->apply_titlebar)
- return;
+ if (!priv->apply_titlebar)
+ {
+ GtkWidget *header, *button, *toplevel;
+ priv->apply_titlebar = header = gtk_header_bar_new ();
- priv->apply_titlebar = header = gtk_header_bar_new ();
- gtk_header_bar_set_title (GTK_HEADER_BAR (header), _("Apply Changes?"));
+ size_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
- size_group = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL);
+ button = gtk_button_new_with_mnemonic (_("_Cancel"));
+ gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button);
+ gtk_size_group_add_widget (size_group, button);
+ g_signal_connect_object (button, "clicked", G_CALLBACK (on_screen_changed),
+ panel, G_CONNECT_SWAPPED);
- button = gtk_button_new_with_mnemonic (_("_Cancel"));
- gtk_header_bar_pack_start (GTK_HEADER_BAR (header), button);
- gtk_size_group_add_widget (size_group, button);
- g_signal_connect_object (button, "clicked", G_CALLBACK (on_screen_changed),
- panel, G_CONNECT_SWAPPED);
+ toplevel = cc_shell_get_toplevel (cc_panel_get_shell (CC_PANEL (panel)));
+ g_signal_connect_object (toplevel, "key-press-event", G_CALLBACK (on_toplevel_key_press),
+ button, G_CONNECT_SWAPPED);
- toplevel = cc_shell_get_toplevel (cc_panel_get_shell (CC_PANEL (panel)));
- g_signal_connect_object (toplevel, "key-press-event", G_CALLBACK (on_toplevel_key_press),
- button, G_CONNECT_SWAPPED);
+ priv->apply_titlebar_apply = button = gtk_button_new_with_mnemonic (_("_Apply"));
+ gtk_header_bar_pack_end (GTK_HEADER_BAR (header), button);
+ gtk_size_group_add_widget (size_group, button);
+ g_signal_connect_object (button, "clicked", G_CALLBACK (apply_current_configuration),
+ panel, G_CONNECT_SWAPPED);
+ gtk_style_context_add_class (gtk_widget_get_style_context (button),
+ GTK_STYLE_CLASS_SUGGESTED_ACTION);
- button = gtk_button_new_with_mnemonic (_("_Apply"));
- gtk_header_bar_pack_end (GTK_HEADER_BAR (header), button);
- gtk_size_group_add_widget (size_group, button);
- g_signal_connect_object (button, "clicked", G_CALLBACK (apply_current_configuration),
- panel, G_CONNECT_SWAPPED);
- gtk_style_context_add_class (gtk_widget_get_style_context (button),
- GTK_STYLE_CLASS_SUGGESTED_ACTION);
+ gtk_widget_show_all (header);
+ g_object_unref (size_group);
- gtk_widget_show_all (header);
- g_object_unref (size_group);
+ header = gtk_window_get_titlebar (GTK_WINDOW (toplevel));
+ if (header)
+ priv->main_titlebar = g_object_ref (header);
- header = gtk_window_get_titlebar (GTK_WINDOW (toplevel));
- if (header)
- priv->main_titlebar = g_object_ref (header);
+ gtk_window_set_titlebar (GTK_WINDOW (toplevel), priv->apply_titlebar);
+ g_object_ref (priv->apply_titlebar);
+ g_object_ref (priv->apply_titlebar_apply);
+ }
- gtk_window_set_titlebar (GTK_WINDOW (toplevel), priv->apply_titlebar);
- g_object_ref (priv->apply_titlebar);
+ if (is_applicable)
+ {
+ gtk_header_bar_set_title (GTK_HEADER_BAR (priv->apply_titlebar), _("Apply Changes?"));
+ gtk_header_bar_set_subtitle (GTK_HEADER_BAR (priv->apply_titlebar), NULL);
+ }
+ else
+ {
+ gtk_header_bar_set_title (GTK_HEADER_BAR (priv->apply_titlebar), _("Changes Cannot be Applied"));
+ gtk_header_bar_set_subtitle (GTK_HEADER_BAR (priv->apply_titlebar), _("This could be due to hardware limitations."));
+ }
+ gtk_widget_set_sensitive (priv->apply_titlebar_apply, is_applicable);
}
static void
@@ -2640,12 +2657,6 @@ update_apply_button (CcDisplayPanel *panel)
gboolean config_equal;
CcDisplayConfig *applied_config;
- if (!cc_display_config_is_applicable (priv->current_config))
- {
- reset_titlebar (panel);
- return;
- }
-
applied_config = cc_display_config_manager_get_current (priv->manager);
config_equal = cc_display_config_equal (priv->current_config,
@@ -2655,7 +2666,7 @@ update_apply_button (CcDisplayPanel *panel)
if (config_equal)
reset_titlebar (panel);
else
- show_apply_titlebar (panel);
+ show_apply_titlebar (panel, cc_display_config_is_applicable (priv->current_config));
}
static void
@@ -3107,7 +3118,7 @@ shell_proxy_ready (GObject *source,
GDBusProxy *proxy;
GError *error = NULL;
- proxy = g_dbus_proxy_new_for_bus_finish (res, &error);
+ proxy = cc_object_storage_create_dbus_proxy_finish (res, &error);
if (!proxy)
{
if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
@@ -3326,17 +3337,16 @@ cc_display_panel_init (CcDisplayPanel *self)
g_signal_connect (self, "map", G_CALLBACK (mapped_cb), NULL);
self->priv->shell_cancellable = g_cancellable_new ();
- g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION,
- G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
- G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS |
- G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
- NULL,
- "org.gnome.Shell",
- "/org/gnome/Shell",
- "org.gnome.Shell",
- self->priv->shell_cancellable,
- (GAsyncReadyCallback) shell_proxy_ready,
- self);
+ cc_object_storage_create_dbus_proxy (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
+ G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS |
+ G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
+ "org.gnome.Shell",
+ "/org/gnome/Shell",
+ "org.gnome.Shell",
+ self->priv->shell_cancellable,
+ (GAsyncReadyCallback) shell_proxy_ready,
+ self);
g_bus_get (G_BUS_TYPE_SESSION,
self->priv->shell_cancellable,