diff options
Diffstat (limited to 'shell/panel.c')
| -rw-r--r-- | shell/panel.c | 87 |
1 files changed, 69 insertions, 18 deletions
diff --git a/shell/panel.c b/shell/panel.c index 7324c71..74ab751 100644 --- a/shell/panel.c +++ b/shell/panel.c @@ -29,7 +29,9 @@ enum { APP_MENU_TOGGLED, + SYSTEM_TOGGLED, VOLUME_TOGGLED, + FAVORITE_LAUNCHED, N_SIGNALS }; static guint signals[N_SIGNALS] = { 0 }; @@ -40,6 +42,8 @@ struct MaynardPanelPrivate { GtkWidget *revealer_buttons; /* for the top buttons */ GtkWidget *revealer_clock; /* for the vertical clock */ + GtkWidget *system_button; + gboolean volume_showing; GtkWidget *volume_button; gchar *volume_icon_name; @@ -83,6 +87,13 @@ app_menu_button_clicked_cb (GtkButton *button, } static void +system_button_clicked_cb (GtkButton *button, + MaynardPanel *self) +{ + g_signal_emit (self, signals[SYSTEM_TOGGLED], 0); +} + +static void volume_button_clicked_cb (GtkButton *button, MaynardPanel *self) { @@ -90,6 +101,13 @@ volume_button_clicked_cb (GtkButton *button, } static void +favorite_launched_cb (MaynardFavorites *favorites, + MaynardPanel *self) +{ + g_signal_emit (self, signals[FAVORITE_LAUNCHED], 0); +} + +static void maynard_panel_constructed (GObject *object) { MaynardPanel *self = MAYNARD_PANEL (object); @@ -97,6 +115,7 @@ maynard_panel_constructed (GObject *object) GtkWidget *ebox; GtkWidget *image; GtkWidget *button; + GtkWidget *favorites; G_OBJECT_CLASS (maynard_panel_parent_class)->constructed (object); @@ -147,15 +166,25 @@ maynard_panel_constructed (GObject *object) gtk_container_add (GTK_CONTAINER (self->priv->revealer_buttons), buttons_box); /* system button */ - image = gtk_image_new_from_icon_name ("emblem-system-symbolic", + ebox = gtk_event_box_new (); + gtk_box_pack_start (GTK_BOX (buttons_box), ebox, FALSE, FALSE, 0); + button = gtk_button_new_from_icon_name ("emblem-system-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_style_context_add_class (gtk_widget_get_style_context (image), + gtk_style_context_add_class (gtk_widget_get_style_context (button), "maynard-system"); - gtk_box_pack_start (GTK_BOX (buttons_box), image, FALSE, FALSE, 0); + gtk_style_context_remove_class (gtk_widget_get_style_context (button), + "button"); + gtk_style_context_remove_class (gtk_widget_get_style_context (button), + "image-button"); + g_signal_connect (button, "clicked", + G_CALLBACK (system_button_clicked_cb), self); + gtk_container_add (GTK_CONTAINER (ebox), button); + widget_connect_enter_signal (self, ebox); + self->priv->system_button = button; /* sound button */ ebox = gtk_event_box_new (); - gtk_box_pack_end (GTK_BOX (buttons_box), ebox, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (buttons_box), ebox, FALSE, FALSE, 0); button = gtk_button_new_from_icon_name (self->priv->volume_icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); gtk_style_context_add_class (gtk_widget_get_style_context (button), @@ -188,9 +217,13 @@ maynard_panel_constructed (GObject *object) /* favorites */ ebox = gtk_event_box_new (); gtk_box_pack_start (GTK_BOX (main_box), ebox, FALSE, FALSE, 0); - gtk_container_add (GTK_CONTAINER (ebox), maynard_favorites_new ()); + favorites = maynard_favorites_new (); + gtk_container_add (GTK_CONTAINER (ebox), favorites); widget_connect_enter_signal (self, ebox); + g_signal_connect (favorites, "app-launched", + G_CALLBACK (favorite_launched_cb), self); + /* bottom app menu button */ ebox = gtk_event_box_new (); gtk_box_pack_end (GTK_BOX (main_box), ebox, FALSE, FALSE, 0); @@ -229,10 +262,18 @@ maynard_panel_class_init (MaynardPanelClass *klass) G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); + signals[SYSTEM_TOGGLED] = g_signal_new ("system-toggled", + G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, + NULL, G_TYPE_NONE, 0); + signals[VOLUME_TOGGLED] = g_signal_new ("volume-toggled", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL, G_TYPE_NONE, 0); + signals[FAVORITE_LAUNCHED] = g_signal_new ("favorite-launched", + G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, NULL, NULL, + NULL, G_TYPE_NONE, 0); + g_type_class_add_private (object_class, sizeof (MaynardPanelPrivate)); } @@ -252,29 +293,39 @@ maynard_panel_set_expand (MaynardPanel *self, } static void -set_volume_icon (MaynardPanel *self, +set_icon (GtkWidget *button, const gchar *icon_name) { GtkWidget *image; image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_button_set_image (GTK_BUTTON (self->priv->volume_button), + gtk_button_set_image (GTK_BUTTON (button), image); } void -maynard_panel_show_volume_previous (MaynardPanel *self, - gboolean status) +maynard_panel_show_previous (MaynardPanel *self, + MaynardPanelButton button) { - const gchar *icon_name = self->priv->volume_icon_name; - - if (status) - icon_name = "go-previous-symbolic"; - - self->priv->volume_showing = !status; - - set_volume_icon (self, icon_name); + switch (button) + { + case MAYNARD_PANEL_BUTTON_SYSTEM: + set_icon (self->priv->system_button, "go-previous-symbolic"); + set_icon (self->priv->volume_button, self->priv->volume_icon_name); + self->priv->volume_showing = FALSE; + break; + case MAYNARD_PANEL_BUTTON_VOLUME: + set_icon (self->priv->system_button, "emblem-system-symbolic"); + set_icon (self->priv->volume_button, "go-previous-symbolic"); + self->priv->volume_showing = TRUE; + break; + case MAYNARD_PANEL_BUTTON_NONE: + default: + set_icon (self->priv->system_button, "emblem-system-symbolic"); + set_icon (self->priv->volume_button, self->priv->volume_icon_name); + self->priv->volume_showing = FALSE; + } } void @@ -285,5 +336,5 @@ maynard_panel_set_volume_icon_name (MaynardPanel *self, self->priv->volume_icon_name = g_strdup (icon_name); if (self->priv->volume_showing) - set_volume_icon (self, icon_name); + set_icon (self->priv->volume_button, icon_name); } |
