void set_notification_icon(GtkWindow* nw, GdkPixbuf* pixbuf) { WindowData* windata = g_object_get_data(G_OBJECT(nw), "windata"); g_assert(windata != NULL); GdkPixbuf* scaled = NULL; if (pixbuf != NULL) { scaled = scale_pixbuf(pixbuf, MAX_ICON_SIZE, MAX_ICON_SIZE, TRUE); } gtk_image_set_from_pixbuf(GTK_IMAGE(windata->icon), scaled); if (scaled != NULL) { int pixbuf_width = gdk_pixbuf_get_width(scaled); gtk_widget_show(windata->icon); gtk_widget_set_size_request(windata->iconbox, MAX(BODY_X_OFFSET, pixbuf_width), -1); g_object_unref(scaled); } else { gtk_widget_hide(windata->icon); gtk_widget_set_size_request(windata->iconbox, BODY_X_OFFSET, -1); } update_content_hbox_visibility(windata); }
/* Set the notification text */ void set_notification_text(GtkWindow *nw, const char *summary, const char *body) { char *str; WindowData *windata = g_object_get_data(G_OBJECT(nw), "windata"); g_assert(windata != NULL); str = g_strdup_printf("<b><big>%s</big></b>", summary); gtk_label_set_markup(GTK_LABEL(windata->summary_label), str); g_free(str); gtk_label_set_markup(GTK_LABEL(windata->body_label), body); if (body == NULL || *body == '\0') gtk_widget_hide(windata->body_label); else gtk_widget_show(windata->body_label); update_content_hbox_visibility(windata); gtk_widget_set_size_request( ((body != NULL && *body == '\0') ? windata->body_label : windata->summary_label), WIDTH - (IMAGE_SIZE + IMAGE_PADDING) - 10, -1); }
void set_notification_text(GtkWindow* nw, const char* summary, const char* body) { char* str; char* quoted; GtkRequisition req; WindowData* windata; windata = g_object_get_data(G_OBJECT(nw), "windata"); g_assert(windata != NULL); 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->summary_label), str); g_free(str); gtk_label_set_markup(GTK_LABEL(windata->body_label), body); if (body == NULL || *body == '\0') { gtk_widget_hide(windata->body_label); } else { gtk_widget_show(windata->body_label); } update_content_hbox_visibility(windata); if (body != NULL && *body != '\0') { #if GTK_CHECK_VERSION (3, 0, 0) gtk_widget_get_preferred_size (windata->iconbox, NULL, &req); #else gtk_widget_size_request(windata->iconbox, &req); #endif /* -1: border width for * -6: spacing for hbox */ gtk_widget_set_size_request(windata->body_label, WIDTH - (1 * 2) - (10 * 2) - req.width - 6, -1); } #if GTK_CHECK_VERSION (3, 0, 0) gtk_widget_get_preferred_size (windata->close_button, NULL, &req); #else gtk_widget_size_request(windata->close_button, &req); #endif /* -1: main_vbox border width * -10: vbox border width * -6: spacing for hbox */ gtk_widget_set_size_request(windata->summary_label, WIDTH - (1 * 2) - (10 * 2) - SPACER_LEFT - req.width - (6 * 2), -1); }
void set_notification_text(GtkWindow* nw, const char* summary, const char* body) { char* str; char* quoted; GtkRequisition req; WindowData* windata; int summary_width; windata = g_object_get_data(G_OBJECT(nw), "windata"); g_assert(windata != NULL); 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->summary_label), str); g_free(str); gtk_label_set_markup(GTK_LABEL(windata->body_label), body); if (body == NULL || *body == '\0') { gtk_widget_hide(windata->body_label); } else { gtk_widget_show(windata->body_label); } update_content_hbox_visibility(windata); gtk_widget_size_request(windata->close_button, &req); /* -1: main_vbox border width -10: vbox border width -6: spacing for hbox */ summary_width = WIDTH - (1 * 2) - (10 * 2) - BODY_X_OFFSET - req.width - (6 * 2); if (body != NULL && *body != '\0') { gtk_widget_set_size_request(windata->body_label, summary_width, -1); } gtk_widget_set_size_request(windata->summary_label, summary_width, -1); }
void add_notification_action(GtkWindow* nw, const char* text, const char* key, ActionInvokedCb cb) { WindowData* windata = g_object_get_data(G_OBJECT(nw), "windata"); GtkWidget* label; GtkWidget* button; GtkWidget* hbox; GdkPixbuf* pixbuf; char* buf; g_assert(windata != NULL); 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(); g_signal_connect(G_OBJECT(windata->pie_countdown), "style-set", G_CALLBACK(on_style_set), windata); 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(on_countdown_expose), windata); } button = gtk_button_new(); g_signal_connect(G_OBJECT(button), "style-set", G_CALLBACK(on_style_set), windata); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(windata->actions_box), button, FALSE, FALSE, 0); gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); gtk_container_set_border_width(GTK_CONTAINER(button), 0); 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); g_free(buf); if (pixbuf != NULL) { GtkWidget* image = gtk_image_new_from_pixbuf(pixbuf); g_signal_connect(G_OBJECT(image), "style-set", G_CALLBACK(on_style_set), windata); 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); g_signal_connect(G_OBJECT(label), "style-set", G_CALLBACK(on_style_set), windata); 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(on_action_clicked), cb); }