From 1068e9659e9d4d5b4b01f31204caa6fe0c6e7d19 Mon Sep 17 00:00:00 2001 From: Matt Watson Date: Tue, 21 Jan 2014 15:38:03 -0800 Subject: Use proper assets for maximize button in top bar Also update the topbar icon depending on window state. [endlessm/eos-sdk#477] --- endless/eostopbar-private.h | 16 +++++++++------- endless/eostopbar.c | 34 ++++++++++++++++++++++++++++------ endless/eoswindow.c | 1 + 3 files changed, 38 insertions(+), 13 deletions(-) (limited to 'endless') diff --git a/endless/eostopbar-private.h b/endless/eostopbar-private.h index cabb414..3d0f4a7 100644 --- a/endless/eostopbar-private.h +++ b/endless/eostopbar-private.h @@ -44,16 +44,18 @@ struct _EosTopBarClass GtkEventBoxClass parent_class; }; -GType eos_top_bar_get_type (void) G_GNUC_CONST; +GType eos_top_bar_get_type (void) G_GNUC_CONST; -GtkWidget *eos_top_bar_new (void); +GtkWidget *eos_top_bar_new (void); -void eos_top_bar_set_left_widget (EosTopBar *self, - GtkWidget *left_top_bar_widget); +void eos_top_bar_set_left_widget (EosTopBar *self, + GtkWidget *left_top_bar_widget); -void -eos_top_bar_set_center_widget (EosTopBar *self, - GtkWidget *center_top_bar_widget); +void eos_top_bar_set_center_widget (EosTopBar *self, + GtkWidget *center_top_bar_widget); + +void eos_top_bar_update_window_maximized (EosTopBar *self, + gboolean is_maximized); G_END_DECLS diff --git a/endless/eostopbar.c b/endless/eostopbar.c index 6d98090..735ba6c 100644 --- a/endless/eostopbar.c +++ b/endless/eostopbar.c @@ -25,7 +25,8 @@ #define _EOS_TOP_BAR_BUTTON_SEPARATION_PX 8 #define _EOS_TOP_BAR_VERTICAL_BUTTON_MARGIN_PX 6 #define _EOS_TOP_BAR_MINIMIZE_ICON_NAME "window-minimize-symbolic" -#define _EOS_TOP_BAR_MAXIMIZE_ICON_NAME "face-monkey" +#define _EOS_TOP_BAR_MAXIMIZE_ICON_NAME "window-maximize-symbolic" +#define _EOS_TOP_BAR_UNMAXIMIZE_ICON_NAME "window-unmaximize-symbolic" #define _EOS_TOP_BAR_CLOSE_ICON_NAME "window-close-symbolic" typedef struct { @@ -207,9 +208,8 @@ eos_top_bar_init (EosTopBar *self) "halign", GTK_ALIGN_END, "valign", GTK_ALIGN_CENTER, NULL); - priv->maximize_icon = - gtk_image_new_from_icon_name (_EOS_TOP_BAR_MAXIMIZE_ICON_NAME, - GTK_ICON_SIZE_SMALL_TOOLBAR); + priv->maximize_icon = gtk_image_new (); + eos_top_bar_update_window_maximized (self, TRUE); g_object_set(priv->maximize_icon, "pixel-size", _EOS_TOP_BAR_ICON_SIZE_PX, "margin", _EOS_TOP_BAR_BUTTON_PADDING_PX, @@ -236,10 +236,10 @@ eos_top_bar_init (EosTopBar *self) priv->left_top_bar_attach); gtk_container_add (GTK_CONTAINER (priv->actions_grid), priv->center_top_bar_attach); - gtk_container_add (GTK_CONTAINER (priv->actions_grid), - priv->minimize_button); gtk_container_add (GTK_CONTAINER (priv->actions_grid), priv->maximize_button); + gtk_container_add (GTK_CONTAINER (priv->actions_grid), + priv->minimize_button); gtk_container_add (GTK_CONTAINER (priv->actions_grid), priv->close_button); @@ -323,3 +323,25 @@ eos_top_bar_set_center_widget (EosTopBar *self, priv->center_top_bar_widget); } } + +/* + * eos_top_bar_update_window_maximized: + * @self: the top bar + * @is_maximized: whether the window is currently maximized + * + * Private method for eos_window to update the topbar on the window maximized + * state. The top bar will flip the asset of the maximized button depending on + * the state + */ +void +eos_top_bar_update_window_maximized (EosTopBar *self, + gboolean is_maximized) +{ + g_return_if_fail (EOS_IS_TOP_BAR (self)); + EosTopBarPrivate *priv = eos_top_bar_get_instance_private (self); + + gchar *icon_name = is_maximized ? _EOS_TOP_BAR_UNMAXIMIZE_ICON_NAME : _EOS_TOP_BAR_MAXIMIZE_ICON_NAME; + gtk_image_set_from_icon_name (GTK_IMAGE (priv->maximize_icon), + icon_name, + GTK_ICON_SIZE_SMALL_TOOLBAR); +} diff --git a/endless/eoswindow.c b/endless/eoswindow.c index 8b91919..bbe2422 100644 --- a/endless/eoswindow.c +++ b/endless/eoswindow.c @@ -737,6 +737,7 @@ on_window_state_event_cb (GtkWidget *widget, EosWindowPrivate *priv = eos_window_get_instance_private (self); GdkWindowState window_state = event->new_window_state; priv->maximized = window_state & GDK_WINDOW_STATE_MAXIMIZED; + eos_top_bar_update_window_maximized (EOS_TOP_BAR (priv->top_bar), priv->maximized); } /* Make sure that the edge finishing does not catch input events */ -- cgit v1.2.3