diff options
Diffstat (limited to 'src/theme.c')
-rw-r--r-- | src/theme.c | 720 |
1 files changed, 378 insertions, 342 deletions
diff --git a/src/theme.c b/src/theme.c index e3f7b2b..1c21453 100644 --- a/src/theme.c +++ b/src/theme.c @@ -23,8 +23,8 @@ #include <gtk/gtk.h> -typedef void (*ActionInvokedCb)(GtkWindow *nw, const char *key); -typedef void (*UrlClickedCb)(GtkWindow *nw, const char *url); +typedef void (*ActionInvokedCb) (GtkWindow *nw, const char *key); +typedef void (*UrlClickedCb) (GtkWindow *nw, const char *url); typedef struct { @@ -54,11 +54,11 @@ typedef struct } WindowData; enum -{ - URGENCY_LOW, - URGENCY_NORMAL, - URGENCY_CRITICAL -}; + { + URGENCY_LOW, + URGENCY_NORMAL, + URGENCY_CRITICAL + }; #define WIDTH 400 #define DEFAULT_X0 0 @@ -142,7 +142,9 @@ draw_round_rect (cairo_t* cr, } static void -fill_background (GtkWidget *widget, WindowData *windata, cairo_t *cr) +fill_background (GtkWidget *widget, + WindowData *windata, + cairo_t *cr) { GdkColor color; double r, g, b; @@ -160,26 +162,26 @@ fill_background (GtkWidget *widget, WindowData *windata, cairo_t *cr) g = (float)color.green / 65535.0; b = (float)color.blue / 65535.0; cairo_set_source_rgba (cr, r, g, b, BACKGROUND_OPACITY); - cairo_fill_preserve(cr); + cairo_fill_preserve (cr); switch (windata->urgency) { - case URGENCY_LOW: - color = widget->style->fg[GTK_STATE_NORMAL]; - break; - - case URGENCY_CRITICAL: - gdk_color_parse("#CC0000", &color); - break; - - case URGENCY_NORMAL: - default: - color = widget->style->fg[GTK_STATE_SELECTED]; - break; + case URGENCY_LOW: + color = widget->style->fg [GTK_STATE_NORMAL]; + break; + + case URGENCY_CRITICAL: + gdk_color_parse ("#CC0000", &color); + break; + + case URGENCY_NORMAL: + default: + color = widget->style->fg [GTK_STATE_SELECTED]; + break; } - r = (float)color.red / 65535.0; - g = (float)color.green / 65535.0; - b = (float)color.blue / 65535.0; + r = (float) color.red / 65535.0; + g = (float) color.green / 65535.0; + b = (float) color.blue / 65535.0; cairo_set_source_rgba (cr, r, g, b, BACKGROUND_OPACITY); cairo_set_line_width (cr, 2); cairo_stroke (cr); @@ -225,35 +227,35 @@ update_shape (WindowData *windata) } static gboolean -paint_window(GtkWidget *widget, - GdkEventExpose *event, - WindowData *windata) +paint_window (GtkWidget *widget, + GdkEventExpose *event, + WindowData *windata) { - cairo_t *context; + cairo_t *context; cairo_surface_t *surface; - cairo_t *cr; + cairo_t *cr; if (windata->width == 0) { windata->width = windata->win->allocation.width; windata->height = windata->win->allocation.height; } - context = gdk_cairo_create(widget->window); + context = gdk_cairo_create (widget->window); - cairo_set_operator(context, CAIRO_OPERATOR_SOURCE); - surface = cairo_surface_create_similar(cairo_get_target(context), - CAIRO_CONTENT_COLOR_ALPHA, - widget->allocation.width, - widget->allocation.height); - cr = cairo_create(surface); + cairo_set_operator (context, CAIRO_OPERATOR_SOURCE); + surface = cairo_surface_create_similar (cairo_get_target (context), + CAIRO_CONTENT_COLOR_ALPHA, + widget->allocation.width, + widget->allocation.height); + cr = cairo_create (surface); - fill_background(widget, windata, cr); + fill_background (widget, windata, cr); - cairo_destroy(cr); - cairo_set_source_surface(context, surface, 0, 0); - cairo_paint(context); - cairo_surface_destroy(surface); - cairo_destroy(context); + cairo_destroy (cr); + cairo_set_source_surface (context, surface, 0, 0); + cairo_paint (context); + cairo_surface_destroy (surface); + cairo_destroy (context); update_shape (windata); @@ -263,37 +265,34 @@ paint_window(GtkWidget *widget, static void destroy_windata(WindowData *windata) { - g_free(windata); + g_free (windata); } static void -update_content_hbox_visibility(WindowData *windata) +update_content_hbox_visibility (WindowData *windata) { /* * This is all a hack, but until we have a libview-style ContentBox, * it'll just have to do. */ - if (GTK_WIDGET_VISIBLE(windata->icon) || - GTK_WIDGET_VISIBLE(windata->body_label) || - GTK_WIDGET_VISIBLE(windata->actions_box)) - { - gtk_widget_show(windata->content_hbox); - } - else - { - gtk_widget_hide(windata->content_hbox); + if (GTK_WIDGET_VISIBLE (windata->icon) + || GTK_WIDGET_VISIBLE (windata->body_label) + || GTK_WIDGET_VISIBLE (windata->actions_box)) { + gtk_widget_show (windata->content_hbox); + } else { + gtk_widget_hide (windata->content_hbox); } } static gboolean -configure_event_cb(GtkWidget *nw, - GdkEventConfigure *event, - WindowData *windata) +configure_event_cb (GtkWidget *nw, + GdkEventConfigure *event, + WindowData *windata) { windata->width = event->width; windata->height = event->height; - gtk_widget_queue_draw(nw); + gtk_widget_queue_draw (nw); return FALSE; } @@ -337,41 +336,44 @@ on_composited_changed (GtkWidget *window, } GtkWindow * -create_notification(UrlClickedCb url_clicked) +create_notification (UrlClickedCb url_clicked) { - GtkWidget *win; - GtkWidget *drawbox; - GtkWidget *main_vbox; - GtkWidget *vbox; - GtkWidget *close_button; - GtkWidget *image; - GtkWidget *alignment; - AtkObject *atkobj; - GtkRcStyle *rcstyle; - WindowData *windata; + GtkWidget *win; + GtkWidget *drawbox; + GtkWidget *main_vbox; + GtkWidget *vbox; + GtkWidget *close_button; + GtkWidget *image; + GtkWidget *alignment; + AtkObject *atkobj; + GtkRcStyle *rcstyle; + WindowData *windata; #ifdef USE_COMPOSITE GdkColormap *colormap; - GdkScreen *screen; + GdkScreen *screen; #endif - windata = g_new0(WindowData, 1); + windata = g_new0 (WindowData, 1); windata->urgency = URGENCY_NORMAL; windata->url_clicked = url_clicked; - win = gtk_window_new(GTK_WINDOW_POPUP); + win = gtk_window_new (GTK_WINDOW_POPUP); invert_style (win); - g_signal_connect (G_OBJECT(win), "style-set", - G_CALLBACK(style_set_cb), windata); + g_signal_connect (G_OBJECT (win), + "style-set", + G_CALLBACK (style_set_cb), + windata); windata->win = win; windata->composited = FALSE; #ifdef USE_COMPOSITE - screen = gtk_window_get_screen(GTK_WINDOW(win)); - colormap = gdk_screen_get_rgba_colormap(screen); + screen = gtk_window_get_screen (GTK_WINDOW (win)); + colormap = gdk_screen_get_rgba_colormap (screen); if (colormap != NULL) { - gtk_widget_set_colormap(win, colormap); - if (gdk_screen_is_composited(screen)) + gtk_widget_set_colormap (win, colormap); + if (gdk_screen_is_composited (screen)) { windata->composited = TRUE; + } } g_signal_connect (win, "composited-changed", @@ -379,18 +381,21 @@ create_notification(UrlClickedCb url_clicked) windata); #endif - gtk_window_set_title(GTK_WINDOW(win), "Notification"); - gtk_window_set_type_hint(GTK_WINDOW(win), - GDK_WINDOW_TYPE_HINT_NOTIFICATION); - gtk_widget_add_events(win, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); - gtk_widget_realize(win); + gtk_window_set_title (GTK_WINDOW (win), "Notification"); + gtk_window_set_type_hint (GTK_WINDOW (win), + GDK_WINDOW_TYPE_HINT_NOTIFICATION); + gtk_widget_add_events (win, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); + gtk_widget_realize (win); - g_object_set_data_full(G_OBJECT(win), "windata", windata, - (GDestroyNotify)destroy_windata); - atk_object_set_role(gtk_widget_get_accessible(win), ATK_ROLE_ALERT); + g_object_set_data_full (G_OBJECT (win), + "windata", windata, + (GDestroyNotify)destroy_windata); + atk_object_set_role (gtk_widget_get_accessible (win), ATK_ROLE_ALERT); - g_signal_connect(G_OBJECT(win), "configure-event", - G_CALLBACK(configure_event_cb), windata); + g_signal_connect (G_OBJECT (win), + "configure-event", + G_CALLBACK(configure_event_cb), + windata); /* * For some reason, there are occasionally graphics glitches when @@ -399,394 +404,425 @@ create_notification(UrlClickedCb url_clicked) * notifications will appear on the notification. Somehow, adding this * eventbox makes that problem just go away. Whatever works for now. */ - drawbox = gtk_event_box_new(); - gtk_widget_show(drawbox); - gtk_container_add(GTK_CONTAINER(win), drawbox); - - main_vbox = gtk_vbox_new(FALSE, 0); - gtk_widget_show(main_vbox); - gtk_container_add(GTK_CONTAINER(drawbox), main_vbox); - gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 12); + drawbox = gtk_event_box_new (); + gtk_widget_show (drawbox); + gtk_container_add (GTK_CONTAINER (win), drawbox); + + main_vbox = gtk_vbox_new (FALSE, 0); + gtk_widget_show (main_vbox); + gtk_container_add (GTK_CONTAINER (drawbox), main_vbox); + gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); invert_style (main_vbox); - g_signal_connect(G_OBJECT(main_vbox), "expose-event", - G_CALLBACK(paint_window), windata); + g_signal_connect (G_OBJECT (main_vbox), + "expose-event", + G_CALLBACK (paint_window), + windata); - windata->main_hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(windata->main_hbox); - gtk_box_pack_start(GTK_BOX(main_vbox), windata->main_hbox, - FALSE, FALSE, 0); + windata->main_hbox = gtk_hbox_new (FALSE, 0); + gtk_widget_show (windata->main_hbox); + gtk_box_pack_start (GTK_BOX (main_vbox), + windata->main_hbox, + FALSE, FALSE, 0); /* First row (icon, vbox, close) */ - windata->iconbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(windata->iconbox); - gtk_box_pack_start(GTK_BOX(windata->main_hbox), windata->iconbox, - FALSE, FALSE, 0); - gtk_widget_set_size_request(windata->iconbox, BODY_X_OFFSET, -1); - - windata->icon = gtk_image_new(); - gtk_box_pack_start(GTK_BOX(windata->iconbox), windata->icon, - TRUE, TRUE, 0); - gtk_misc_set_alignment(GTK_MISC(windata->icon), 0.5, 0); - - vbox = gtk_vbox_new(FALSE, 6); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(windata->main_hbox), vbox, TRUE, TRUE, 0); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); + windata->iconbox = gtk_hbox_new (FALSE, 0); + gtk_widget_show (windata->iconbox); + gtk_box_pack_start (GTK_BOX (windata->main_hbox), + windata->iconbox, + FALSE, FALSE, 0); + gtk_widget_set_size_request (windata->iconbox, BODY_X_OFFSET, -1); + + windata->icon = gtk_image_new (); + gtk_box_pack_start (GTK_BOX (windata->iconbox), + windata->icon, + TRUE, TRUE, 0); + gtk_misc_set_alignment (GTK_MISC (windata->icon), 0.5, 0); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox); + gtk_box_pack_start (GTK_BOX (windata->main_hbox), vbox, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 10); /* Add the close button */ - alignment = gtk_alignment_new(0.5, 0, 0, 0); - gtk_widget_show(alignment); - gtk_box_pack_start(GTK_BOX(windata->main_hbox), alignment, FALSE, FALSE, 0); + alignment = gtk_alignment_new (0.5, 0, 0, 0); + gtk_widget_show (alignment); + gtk_box_pack_start (GTK_BOX (windata->main_hbox), alignment, FALSE, FALSE, 0); - close_button = gtk_button_new(); + close_button = gtk_button_new (); windata->close_button = close_button; - gtk_widget_show(close_button); - gtk_container_add(GTK_CONTAINER(alignment), close_button); - gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE); - gtk_container_set_border_width(GTK_CONTAINER(close_button), 0); - g_signal_connect_swapped(G_OBJECT(close_button), "clicked", - G_CALLBACK(gtk_widget_destroy), win); - - rcstyle = gtk_rc_style_new(); + gtk_widget_show (close_button); + gtk_container_add (GTK_CONTAINER (alignment), close_button); + gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE); + gtk_container_set_border_width (GTK_CONTAINER(close_button), 0); + g_signal_connect_swapped (G_OBJECT (close_button), + "clicked", + G_CALLBACK (gtk_widget_destroy), + win); + + rcstyle = gtk_rc_style_new (); rcstyle->xthickness = rcstyle->ythickness = 0; - gtk_widget_modify_style(close_button, rcstyle); - gtk_rc_style_unref(rcstyle); + gtk_widget_modify_style (close_button, rcstyle); + gtk_rc_style_unref (rcstyle); - atkobj = gtk_widget_get_accessible(close_button); - atk_action_set_description(ATK_ACTION(atkobj), 0, - "Closes the notification."); - atk_object_set_name(atkobj, ""); - atk_object_set_description(atkobj, "Closes the notification."); + atkobj = gtk_widget_get_accessible (close_button); + atk_action_set_description (ATK_ACTION (atkobj), 0, + "Closes the notification."); + atk_object_set_name (atkobj, ""); + atk_object_set_description (atkobj, "Closes the notification."); - image = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); - gtk_widget_show(image); - gtk_container_add(GTK_CONTAINER(close_button), image); + image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); + gtk_widget_show (image); + gtk_container_add (GTK_CONTAINER (close_button), image); /* center vbox */ - windata->summary_label = gtk_label_new(NULL); + windata->summary_label = gtk_label_new (NULL); invert_style (windata->summary_label); - gtk_widget_show(windata->summary_label); - gtk_box_pack_start(GTK_BOX(vbox), windata->summary_label, TRUE, TRUE, 0); - gtk_misc_set_alignment(GTK_MISC(windata->summary_label), 0, 0); - gtk_label_set_line_wrap(GTK_LABEL(windata->summary_label), TRUE); - g_signal_connect (G_OBJECT(windata->summary_label), "style-set", - G_CALLBACK(style_set_cb), windata); + gtk_widget_show (windata->summary_label); + gtk_box_pack_start (GTK_BOX (vbox), windata->summary_label, TRUE, TRUE, 0); + gtk_misc_set_alignment (GTK_MISC (windata->summary_label), 0, 0); + gtk_label_set_line_wrap (GTK_LABEL (windata->summary_label), TRUE); + g_signal_connect (G_OBJECT (windata->summary_label), + "style-set", + G_CALLBACK (style_set_cb), + windata); - atkobj = gtk_widget_get_accessible(windata->summary_label); - atk_object_set_description(atkobj, "Notification summary text."); + atkobj = gtk_widget_get_accessible (windata->summary_label); + atk_object_set_description (atkobj, "Notification summary text."); - windata->content_hbox = gtk_hbox_new(FALSE, 6); - gtk_box_pack_start(GTK_BOX(vbox), windata->content_hbox, FALSE, FALSE, 0); + windata->content_hbox = gtk_hbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (vbox), windata->content_hbox, FALSE, FALSE, 0); - vbox = gtk_vbox_new(FALSE, 6); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(windata->content_hbox), vbox, TRUE, TRUE, 0); + vbox = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox); + gtk_box_pack_start (GTK_BOX (windata->content_hbox), vbox, TRUE, TRUE, 0); - windata->body_label = gtk_label_new(NULL); + windata->body_label = gtk_label_new (NULL); invert_style (windata->body_label); - gtk_box_pack_start(GTK_BOX(vbox), windata->body_label, TRUE, TRUE, 0); - gtk_misc_set_alignment(GTK_MISC(windata->body_label), 0, 0); - gtk_label_set_line_wrap(GTK_LABEL(windata->body_label), TRUE); - g_signal_connect_swapped(G_OBJECT(windata->body_label), "activate-link", - G_CALLBACK(windata->url_clicked), win); - g_signal_connect (G_OBJECT(windata->body_label), "style-set", - G_CALLBACK(style_set_cb), windata); + gtk_box_pack_start (GTK_BOX (vbox), windata->body_label, TRUE, TRUE, 0); + gtk_misc_set_alignment (GTK_MISC (windata->body_label), 0, 0); + gtk_label_set_line_wrap (GTK_LABEL (windata->body_label), TRUE); + g_signal_connect_swapped (G_OBJECT (windata->body_label), + "activate-link", + G_CALLBACK (windata->url_clicked), + win); + g_signal_connect (G_OBJECT (windata->body_label), + "style-set", + G_CALLBACK (style_set_cb), + windata); - atkobj = gtk_widget_get_accessible(windata->body_label); - atk_object_set_description(atkobj, "Notification body text."); + atkobj = gtk_widget_get_accessible (windata->body_label); + atk_object_set_description (atkobj, "Notification body text."); - alignment = gtk_alignment_new(1, 0.5, 0, 0); - gtk_widget_show(alignment); - gtk_box_pack_start(GTK_BOX(vbox), alignment, FALSE, TRUE, 0); + alignment = gtk_alignment_new (1, 0.5, 0, 0); + gtk_widget_show (alignment); + gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, TRUE, 0); - windata->actions_box = gtk_hbox_new(FALSE, 6); - gtk_container_add(GTK_CONTAINER(alignment), windata->actions_box); + windata->actions_box = gtk_hbox_new (FALSE, 6); + gtk_container_add (GTK_CONTAINER (alignment), windata->actions_box); - return GTK_WINDOW(win); + return GTK_WINDOW (win); } void -set_notification_hints(GtkWindow *nw, GHashTable *hints) +set_notification_hints (GtkWindow *nw, + GHashTable *hints) { - WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); - GValue *value; + WindowData *windata = g_object_get_data (G_OBJECT(nw), "windata"); + GValue *value; - g_assert(windata != NULL); + g_assert (windata != NULL); - value = (GValue *)g_hash_table_lookup(hints, "urgency"); + value = (GValue *)g_hash_table_lookup (hints, "urgency"); - if (value != NULL && G_VALUE_HOLDS_UCHAR(value)) - { - windata->urgency = g_value_get_uchar(value); + if (value != NULL && G_VALUE_HOLDS_UCHAR (value)) + { + windata->urgency = g_value_get_uchar (value); - if (windata->urgency == URGENCY_CRITICAL) { - gtk_window_set_title(GTK_WINDOW(nw), "Critical Notification"); - } else { - gtk_window_set_title(GTK_WINDOW(nw), "Notification"); + if (windata->urgency == URGENCY_CRITICAL) { + gtk_window_set_title (GTK_WINDOW (nw), "Critical Notification"); + } else { + gtk_window_set_title (GTK_WINDOW (nw), "Notification"); + } } - } } void -set_notification_timeout(GtkWindow *nw, glong timeout) +set_notification_timeout (GtkWindow *nw, + glong timeout) { - WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); - g_assert(windata != NULL); + WindowData *windata = g_object_get_data (G_OBJECT (nw), "windata"); + + g_assert (windata != NULL); windata->timeout = timeout; } void -notification_tick(GtkWindow *nw, glong remaining) +notification_tick (GtkWindow *nw, + glong remaining) { WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); + windata->remaining = remaining; if (windata->pie_countdown != NULL) - { - gtk_widget_queue_draw_area(windata->pie_countdown, 0, 0, - PIE_WIDTH, PIE_HEIGHT); - } + { + gtk_widget_queue_draw_area (windata->pie_countdown, 0, 0, + PIE_WIDTH, PIE_HEIGHT); + } } void -set_notification_text(GtkWindow *nw, const char *summary, const char *body) +set_notification_text (GtkWindow *nw, + const char *summary, + const char *body) { char *str, *quoted; GtkRequisition req; - WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); - g_assert(windata != NULL); + WindowData *windata = g_object_get_data (G_OBJECT (nw), "windata"); - quoted = g_markup_escape_text(summary, -1); - str = g_strdup_printf("<b><big>%s</big></b>", quoted); - g_free(quoted); + g_assert (windata != NULL); - gtk_label_set_markup(GTK_LABEL(windata->summary_label), str); - g_free(str); + quoted = g_markup_escape_text (summary, -1); + str = g_strdup_printf ("<b><big>%s</big></b>", quoted); + g_free (quoted); - gtk_label_set_markup(GTK_LABEL(windata->body_label), body); + gtk_label_set_markup (GTK_LABEL (windata->summary_label), str); + g_free (str); - if (body == NULL || *body == '\0') - gtk_widget_hide(windata->body_label); - else - gtk_widget_show(windata->body_label); + gtk_label_set_markup (GTK_LABEL (windata->body_label), body); - update_content_hbox_visibility(windata); + if (body == NULL || *body == '\0') { + gtk_widget_hide (windata->body_label); + } else { + gtk_widget_show (windata->body_label); + } - if (body != NULL && *body != '\0') - { + update_content_hbox_visibility (windata); + + if (body != NULL && *body != '\0') { gtk_widget_size_request (windata->iconbox, &req); - gtk_widget_set_size_request( - windata->body_label, - /* -1: border width for - -6: spacing for hbox */ - WIDTH - (1*2) - (10*2) - req.width - 6, - -1); + gtk_widget_set_size_request (windata->body_label, + /* -1: border width for + -6: spacing for hbox */ + WIDTH - (1*2) - (10*2) - req.width - 6, + -1); } gtk_widget_size_request (windata->close_button, &req); - gtk_widget_set_size_request(windata->summary_label, - /* -1: main_vbox border width - -10: vbox border width - -6: spacing for hbox */ - WIDTH - (1*2) - (10*2) - BODY_X_OFFSET - req.width - (6*2), - -1); + gtk_widget_set_size_request (windata->summary_label, + /* -1: main_vbox border width + -10: vbox border width + -6: spacing for hbox */ + WIDTH - (1*2) - (10*2) - BODY_X_OFFSET - req.width - (6*2), + -1); } void -set_notification_icon(GtkWindow *nw, GdkPixbuf *pixbuf) +set_notification_icon (GtkWindow *nw, + GdkPixbuf *pixbuf) { - WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); - g_assert(windata != NULL); + WindowData *windata = g_object_get_data (G_OBJECT (nw), "windata"); - gtk_image_set_from_pixbuf(GTK_IMAGE(windata->icon), pixbuf); + g_assert (windata != NULL); - if (pixbuf != NULL) - { - int pixbuf_width = gdk_pixbuf_get_width(pixbuf); + gtk_image_set_from_pixbuf (GTK_IMAGE (windata->icon), pixbuf); - gtk_widget_show(windata->icon); - gtk_widget_set_size_request(windata->iconbox, - MAX(BODY_X_OFFSET, pixbuf_width), -1); - } - else - { - gtk_widget_hide(windata->icon); - gtk_widget_set_size_request(windata->iconbox, BODY_X_OFFSET, -1); + if (pixbuf != NULL) { + int pixbuf_width = gdk_pixbuf_get_width (pixbuf); + + gtk_widget_show (windata->icon); + gtk_widget_set_size_request (windata->iconbox, + MAX (BODY_X_OFFSET, pixbuf_width), -1); + } else { + gtk_widget_hide (windata->icon); + gtk_widget_set_size_request (windata->iconbox, BODY_X_OFFSET, -1); } - update_content_hbox_visibility(windata); + update_content_hbox_visibility (windata); } void -set_notification_arrow(GtkWidget *nw, gboolean visible, int x, int y) +set_notification_arrow (GtkWidget *nw, + gboolean visible, + int x, + int y) { - WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); - g_assert(windata != NULL); + WindowData *windata = g_object_get_data (G_OBJECT (nw), "windata"); + g_assert (windata != NULL); } static gboolean -countdown_expose_cb(GtkWidget *pie, GdkEventExpose *event, - WindowData *windata) +countdown_expose_cb (GtkWidget *pie, + GdkEventExpose *event, + WindowData *windata) { - GtkStyle *style = gtk_widget_get_style(windata->win); - cairo_t *context; + GtkStyle *style; + cairo_t *context; cairo_surface_t *surface; - cairo_t *cr; + cairo_t *cr; - context = gdk_cairo_create(GDK_DRAWABLE(windata->pie_countdown->window)); - cairo_set_operator(context, CAIRO_OPERATOR_SOURCE); - surface = cairo_surface_create_similar( - cairo_get_target(context), - CAIRO_CONTENT_COLOR_ALPHA, - pie->allocation.width, - pie->allocation.height); - cr = cairo_create(surface); + style = gtk_widget_get_style (windata->win); + context = gdk_cairo_create (GDK_DRAWABLE (windata->pie_countdown->window)); + cairo_set_operator (context, CAIRO_OPERATOR_SOURCE); + surface = cairo_surface_create_similar (cairo_get_target(context), + CAIRO_CONTENT_COLOR_ALPHA, + pie->allocation.width, + pie->allocation.height); + cr = cairo_create (surface); - fill_background(pie, windata, cr); + fill_background (pie, windata, cr); - if (windata->timeout > 0) - { - gdouble pct = (gdouble)windata->remaining / (gdouble)windata->timeout; + if (windata->timeout > 0) { + gdouble pct = (gdouble) windata->remaining / (gdouble) windata->timeout; - gdk_cairo_set_source_color(cr, &style->bg[GTK_STATE_ACTIVE]); + gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_ACTIVE]); - cairo_move_to(cr, PIE_RADIUS, PIE_RADIUS); - cairo_arc_negative(cr, PIE_RADIUS, PIE_RADIUS, PIE_RADIUS, - -G_PI_2, -(pct * G_PI * 2) - G_PI_2); - cairo_line_to(cr, PIE_RADIUS, PIE_RADIUS); - cairo_fill(cr); + cairo_move_to (cr, PIE_RADIUS, PIE_RADIUS); + cairo_arc_negative (cr, PIE_RADIUS, PIE_RADIUS, PIE_RADIUS, + -G_PI_2, -(pct * G_PI * 2) - G_PI_2); + cairo_line_to (cr, PIE_RADIUS, PIE_RADIUS); + cairo_fill (cr); } - cairo_destroy(cr); - cairo_set_source_surface(context, surface, 0, 0); - cairo_paint(context); - cairo_surface_destroy(surface); - cairo_destroy(context); + cairo_destroy (cr); + cairo_set_source_surface (context, surface, 0, 0); + cairo_paint (context); + cairo_surface_destroy (surface); + cairo_destroy (context); return TRUE; } static void -action_clicked_cb(GtkWidget *w, GdkEventButton *event, - ActionInvokedCb action_cb) +action_clicked_cb (GtkWidget *w, + GdkEventButton *event, + ActionInvokedCb action_cb) { - GtkWindow *nw = g_object_get_data(G_OBJECT(w), "_nw"); - const char *key = g_object_get_data(G_OBJECT(w), "_action_key"); + GtkWindow *nw = g_object_get_data (G_OBJECT (w), "_nw"); + const char *key = g_object_get_data (G_OBJECT (w), "_action_key"); - action_cb(nw, key); + action_cb (nw, key); } void -add_notification_action(GtkWindow *nw, const char *text, const char *key, - ActionInvokedCb cb) +add_notification_action (GtkWindow *nw, + const char *text, + const char *key, + ActionInvokedCb cb) { - WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); + WindowData *windata = g_object_get_data (G_OBJECT (nw), "windata"); GtkWidget *label; GtkWidget *button; GtkWidget *hbox; GdkPixbuf *pixbuf; char *buf; - g_assert(windata != NULL); + g_assert (windata != NULL); - if (!GTK_WIDGET_VISIBLE(windata->actions_box)) - { + if (!GTK_WIDGET_VISIBLE (windata->actions_box)) { GtkWidget *alignment; - gtk_widget_show(windata->actions_box); - update_content_hbox_visibility(windata); - - alignment = gtk_alignment_new(1, 0.5, 0, 0); - gtk_widget_show(alignment); - gtk_box_pack_end(GTK_BOX(windata->actions_box), alignment, - FALSE, TRUE, 0); - - windata->pie_countdown = gtk_drawing_area_new(); - gtk_widget_show(windata->pie_countdown); - gtk_container_add(GTK_CONTAINER(alignment), windata->pie_countdown); - gtk_widget_set_size_request(windata->pie_countdown, - PIE_WIDTH, PIE_HEIGHT); - g_signal_connect(G_OBJECT(windata->pie_countdown), "expose_event", - G_CALLBACK(countdown_expose_cb), windata); + gtk_widget_show (windata->actions_box); + update_content_hbox_visibility (windata); + + alignment = gtk_alignment_new (1, 0.5, 0, 0); + gtk_widget_show (alignment); + gtk_box_pack_end (GTK_BOX (windata->actions_box), + alignment, + FALSE, TRUE, 0); + + windata->pie_countdown = gtk_drawing_area_new (); + gtk_widget_show (windata->pie_countdown); + gtk_container_add (GTK_CONTAINER (alignment), windata->pie_countdown); + gtk_widget_set_size_request (windata->pie_countdown, + PIE_WIDTH, PIE_HEIGHT); + g_signal_connect (G_OBJECT (windata->pie_countdown), + "expose_event", + G_CALLBACK (countdown_expose_cb), + windata); } - button = gtk_button_new(); - gtk_widget_show(button); - gtk_box_pack_start(GTK_BOX(windata->actions_box), button, FALSE, FALSE, 0); + button = gtk_button_new (); + gtk_widget_show (button); + gtk_box_pack_start (GTK_BOX (windata->actions_box), button, FALSE, FALSE, 0); - hbox = gtk_hbox_new(FALSE, 6); - gtk_widget_show(hbox); - gtk_container_add(GTK_CONTAINER(button), hbox); + hbox = gtk_hbox_new (FALSE, 6); + gtk_widget_show (hbox); + gtk_container_add (GTK_CONTAINER (button), hbox); /* Try to be smart and find a suitable icon. */ - buf = g_strdup_printf("stock_%s", key); - pixbuf = gtk_icon_theme_load_icon( - gtk_icon_theme_get_for_screen( - gdk_drawable_get_screen(GTK_WIDGET(nw)->window)), - buf, 16, GTK_ICON_LOOKUP_USE_BUILTIN, NULL); + buf = g_strdup_printf ("stock_%s", key); + pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_for_screen (gdk_drawable_get_screen (GTK_WIDGET (nw)->window)), + buf, + 16, + GTK_ICON_LOOKUP_USE_BUILTIN, + NULL); g_free(buf); - if (pixbuf != NULL) - { - GtkWidget *image = gtk_image_new_from_pixbuf(pixbuf); - gtk_widget_show(image); - gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0); - gtk_misc_set_alignment(GTK_MISC(image), 0.5, 0.5); + if (pixbuf != NULL) { + GtkWidget *image = gtk_image_new_from_pixbuf (pixbuf); + gtk_widget_show (image); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.5); } - label = gtk_label_new(NULL); - gtk_widget_show(label); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - buf = g_strdup_printf("<small>%s</small>", text); - gtk_label_set_markup(GTK_LABEL(label), buf); - g_free(buf); - - g_object_set_data(G_OBJECT(button), "_nw", nw); - g_object_set_data_full(G_OBJECT(button), - "_action_key", g_strdup(key), g_free); - g_signal_connect(G_OBJECT(button), "button-release-event", - G_CALLBACK(action_clicked_cb), cb); + label = gtk_label_new (NULL); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + buf = g_strdup_printf ("<small>%s</small>", text); + gtk_label_set_markup (GTK_LABEL (label), buf); + g_free (buf); + + g_object_set_data (G_OBJECT (button), "_nw", nw); + g_object_set_data_full (G_OBJECT (button), + "_action_key", g_strdup (key), g_free); + g_signal_connect (G_OBJECT (button), "button-release-event", + G_CALLBACK (action_clicked_cb), cb); } void -clear_notification_actions(GtkWindow *nw) +clear_notification_actions (GtkWindow *nw) { - WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); + WindowData *windata = g_object_get_data (G_OBJECT (nw), "windata"); windata->pie_countdown = NULL; - gtk_widget_hide(windata->actions_box); - gtk_container_foreach(GTK_CONTAINER(windata->actions_box), - (GtkCallback)gtk_object_destroy, NULL); + gtk_widget_hide (windata->actions_box); + gtk_container_foreach (GTK_CONTAINER (windata->actions_box), + (GtkCallback)gtk_object_destroy, + NULL); } void -move_notification(GtkWidget *nw, int x, int y) +move_notification (GtkWidget *nw, + int x, + int y) { - WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); - g_assert(windata != NULL); + WindowData *windata = g_object_get_data (G_OBJECT (nw), "windata"); + + g_assert (windata != NULL); - gtk_window_move(GTK_WINDOW(nw), x, y); + gtk_window_move (GTK_WINDOW (nw), x, y); } void -get_theme_info(char **theme_name, - char **theme_ver, - char **author, - char **homepage) +get_theme_info (char **theme_name, + char **theme_ver, + char **author, + char **homepage) { - *theme_name = g_strdup("Chelonia"); - *theme_ver = g_strdup_printf("%d.%d.%d", - THEME_MAJOR_VERSION, - THEME_MINOR_VERSION, - THEME_MICRO_VERSION); - *author = g_strdup("William Jon McCann"); - *homepage = g_strdup("http://www.fedoraproject.org/"); + *theme_name = g_strdup ("Chelonia"); + *theme_ver = g_strdup_printf ("%d.%d.%d", + THEME_MAJOR_VERSION, + THEME_MINOR_VERSION, + THEME_MICRO_VERSION); + *author = g_strdup ("William Jon McCann"); + *homepage = g_strdup ("http://www.fedoraproject.org/"); } gboolean @@ -795,6 +831,6 @@ theme_check_init (unsigned int major_ver, unsigned int micro_ver) { return major_ver == THEME_MAJOR_VERSION && - minor_ver == THEME_MINOR_VERSION && - micro_ver == THEME_MICRO_VERSION; + minor_ver == THEME_MINOR_VERSION && + micro_ver == THEME_MICRO_VERSION; } |