int main(int argc, char* argv[]) { gtk_init(&argc, &argv); if (argc == 1) { printf("Usage: URI\n"); return 1; } const char *uri = argv[1]; if(!g_thread_supported()) g_thread_init(NULL); // Create a Window, set colormap to RGBA GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL); GdkScreen *screen = gtk_widget_get_screen(window); #if GTK_CHECK_VERSION(3, 0, 0) GdkVisual *visual = gdk_screen_get_rgba_visual(screen); if (visual && gdk_screen_is_composited (screen)) { gtk_widget_set_visual(GTK_WIDGET(window), visual); } #else GdkColormap *rgba = gdk_screen_get_rgba_colormap (screen);s if (rgba && gdk_screen_is_composited (screen)) { gtk_widget_set_default_colormap(rgba); gtk_widget_set_default_colormap(rgba); } #endif gtk_window_set_default_size(GTK_WINDOW(window), 600, 400); g_signal_connect(window, "destroy", G_CALLBACK(destroy_cb), NULL); // Optional: for dashboard style borderless windows gtk_window_set_decorated(GTK_WINDOW(window), FALSE); // Create a WebView, set it transparent, add it to the window WebKitWebView* web_view = WEBKIT_WEB_VIEW(webkit_web_view_new()); webkit_web_view_set_transparent(web_view, TRUE); gtk_container_add (GTK_CONTAINER(window), GTK_WIDGET(web_view)); // Load a default page webkit_web_view_load_uri(web_view, uri); // Show it and continue running until the window closes gtk_widget_grab_focus(GTK_WIDGET(web_view)); gtk_widget_show_all(window); gtk_main(); return 0; }
static void msd_osd_window_init (MsdOsdWindow *window) { GdkScreen *screen; window->priv = MSD_OSD_WINDOW_GET_PRIVATE (window); screen = gtk_widget_get_screen (GTK_WIDGET (window)); window->priv->is_composited = gdk_screen_is_composited (screen); if (window->priv->is_composited) { gdouble scalew, scaleh, scale; gint size; gtk_window_set_decorated (GTK_WINDOW (window), FALSE); gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE); /* assume 130x130 on a 640x480 display and scale from there */ scalew = gdk_screen_get_width (screen) / 640.0; scaleh = gdk_screen_get_height (screen) / 480.0; scale = MIN (scalew, scaleh); size = 130 * MAX (1, scale); gtk_window_set_default_size (GTK_WINDOW (window), size, size); window->priv->fade_out_alpha = 1.0; } else { gtk_container_set_border_width (GTK_CONTAINER (window), 12); } }
static GtkWidget * create_select_window (void) { GtkWidget *window; GdkScreen *screen; GdkVisual *visual; screen = gdk_screen_get_default (); visual = gdk_screen_get_rgba_visual (screen); window = gtk_window_new (GTK_WINDOW_POPUP); if (gdk_screen_is_composited (screen) && visual) { gtk_widget_set_visual (window, visual); gtk_widget_set_app_paintable (window, TRUE); } g_signal_connect (window, "draw", G_CALLBACK (select_window_draw), NULL); gtk_window_move (GTK_WINDOW (window), -100, -100); gtk_window_resize (GTK_WINDOW (window), 10, 10); gtk_widget_show (window); return window; }
void on_composited_changed ( GdkScreen *screen, gpointer user_data) { GromitData *data = (GromitData *) user_data; if(data->debug) g_printerr("DEBUG: got composited-changed event\n"); data->composited = gdk_screen_is_composited (data->screen); if(data->composited) { // undo shape gtk_widget_shape_combine_region(data->win, NULL); // re-apply transparency gtk_window_set_opacity(GTK_WINDOW(data->win), 0.75); } // set anti-aliasing GHashTableIter it; gpointer value; g_hash_table_iter_init (&it, data->tool_config); while (g_hash_table_iter_next (&it, NULL, &value)) { GromitPaintContext *context = value; cairo_set_antialias(context->paint_ctx, data->composited ? CAIRO_ANTIALIAS_DEFAULT : CAIRO_ANTIALIAS_NONE); } GdkRectangle rect = {0, 0, data->width, data->height}; gdk_window_invalidate_rect(gtk_widget_get_window(data->win), &rect, 0); }
void composited_changed_handler (GtkWidget* window, gpointer data) { g_composited = gdk_screen_is_composited(gtk_widget_get_screen (window)); update_shape (window, (gint) CORNER_RADIUS, (gint) BUBBLE_SHADOW_SIZE); }
static void gsd_media_keys_window_init (GsdMediaKeysWindow *window) { GdkScreen *screen; window->priv = GSD_MEDIA_KEYS_WINDOW_GET_PRIVATE (window); screen = gtk_widget_get_screen (GTK_WIDGET (window)); window->priv->is_composited = gdk_screen_is_composited (screen); if (window->priv->is_composited) { gdouble scalew, scaleh, scale; gint size; gtk_window_set_decorated (GTK_WINDOW (window), FALSE); gtk_widget_set_app_paintable (GTK_WIDGET (window), TRUE); /* assume 130x130 on a 640x480 display and scale from there */ scalew = gdk_screen_get_width (screen) / 640.0; scaleh = gdk_screen_get_height (screen) / 480.0; scale = MIN (scalew, scaleh); size = 130 * MAX (1, scale); gtk_window_set_default_size (GTK_WINDOW (window), size, size); g_signal_connect (window, "expose-event", G_CALLBACK (on_expose_event), window); window->priv->fade_out_alpha = 1.0; } else { GtkBuilder *builder; const gchar *objects[] = {"acme_frame", NULL}; GtkWidget *frame; builder = gtk_builder_new (); gtk_builder_add_objects_from_file (builder, GTKBUILDERDIR "/acme.ui", (char **) objects, NULL); window->priv->image = GTK_IMAGE (gtk_builder_get_object (builder, "acme_image")); window->priv->progress = GTK_WIDGET (gtk_builder_get_object (builder, "acme_volume_progressbar")); frame = GTK_WIDGET (gtk_builder_get_object (builder, "acme_frame")); if (frame != NULL) { gtk_container_add (GTK_CONTAINER (window), frame); gtk_widget_show_all (frame); } /* The builder needs to stay alive until the window takes ownership of the frame (and its children) */ g_object_unref (builder); } }
static void _start_watching_composite_state (void) { // get the current state. GdkScreen *pScreen = gdk_screen_get_default (); myData.bIsComposited = gdk_screen_is_composited (pScreen); // draw it. cd_draw_current_state (); // listen for future changes. g_signal_connect (G_OBJECT (pScreen), "composited-changed", G_CALLBACK(_on_composited_changed), NULL); }
static void is_compiz_valid(GdkScreen* screen, gpointer data G_GNUC_UNUSED) { if (!gdk_screen_is_composited(screen)) { GtkWidget* dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "compiz is dead"); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); exit(1); } }
static void idol_fullscreen_composited_changed_cb (GdkScreen *screen, IdolFullscreen *fs) { if (gdk_screen_is_composited (screen)) { if (fs->priv->osd == NULL) fs->priv->osd = gsd_media_keys_window_new (); } else { if (fs->priv->osd != NULL) { gtk_widget_destroy (fs->priv->osd); fs->priv->osd = NULL; } } }
static void setup(GtkWidget *win) { GdkScreen *screen; GdkVisual *visual; gtk_widget_set_app_paintable(win, TRUE); gtk_window_set_type_hint(GTK_WINDOW(win), GDK_WINDOW_TYPE_HINT_DOCK); // gtk_window_set_keep_below(GTK_WINDOW(win), TRUE); screen = gdk_screen_get_default(); visual = gdk_screen_get_rgba_visual(screen); if(visual != NULL && gdk_screen_is_composited(screen)) gtk_widget_set_visual(win, visual); }
static void initialize_alpha_mode (GsdMediaKeysWindow *window, GdkScreen *screen) { GdkColormap *colormap = NULL; if (gdk_screen_is_composited (screen)) { colormap = gdk_screen_get_rgba_colormap (screen); } if (colormap != NULL) { gtk_widget_set_colormap (GTK_WIDGET (window), colormap); window->priv->is_composited = TRUE; } else { window->priv->is_composited = FALSE; } }
static gboolean cheese_flash_start_fade (gpointer data) { CheeseFlashPrivate *flash_priv = CHEESE_FLASH_GET_PRIVATE (CHEESE_FLASH (data)); GtkWindow *flash_window = flash_priv->window; /* If the screen is non-composited, just hide and finish up */ if (!gdk_screen_is_composited (gtk_window_get_screen (flash_window))) { gtk_widget_hide (GTK_WIDGET (flash_window)); return FALSE; } flash_priv->fade_timeout_tag = g_timeout_add (1000.0 / FLASH_ANIMATION_RATE, cheese_flash_opacity_fade, data); return FALSE; }
/* * http://web.mit.edu/ghudson/dev/nokrb/third/libwnck/libwnck/test-wnck.c * constructor * set the window transparence */ AppWindow::AppWindow() { add_events(Gdk::BUTTON_PRESS_MASK); set_app_paintable(true); GdkScreen *screen; GdkVisual *visual; gtk_widget_set_app_paintable(GTK_WIDGET(gobj()), TRUE); screen = gdk_screen_get_default(); visual = gdk_screen_get_rgba_visual(screen); if (visual != NULL && gdk_screen_is_composited(screen)) { gtk_widget_set_visual(GTK_WIDGET(gobj()), visual); } }
static void on_screen_changed (GtkWidget *window, GdkScreen *previous, GtkTooltip *tooltip) { GdkScreen *screen; GdkColormap *cmap; screen = gtk_widget_get_screen (window); cmap = NULL; if (gdk_screen_is_composited (screen)) cmap = gdk_screen_get_rgba_colormap (screen); if (cmap == NULL) cmap = gdk_screen_get_rgb_colormap (screen); gtk_widget_set_colormap (window, cmap); }
static void launcher_do_zoom_animation (GtkWidget *widget) { GdkScreen *screen; GtkSettings *settings; gboolean enable_animations; ButtonWidget *button_widget; GdkPixbuf *pixbuf; PanelOrientation orientation; gint x, y; GtkAllocation allocation; screen = gtk_widget_get_screen (widget); settings = gtk_widget_get_settings (widget); enable_animations = TRUE; g_object_get (settings, "gtk-enable-animations", &enable_animations, NULL); if (!enable_animations || !gdk_screen_is_composited (screen)) return; button_widget = BUTTON_WIDGET (widget); pixbuf = button_widget_get_pixbuf (button_widget); orientation = button_widget_get_orientation (button_widget); if (!pixbuf) return; gdk_window_get_origin (gtk_widget_get_window (widget), &x, &y); gtk_widget_get_allocation (widget, &allocation); if (!gtk_widget_get_has_window (widget)) { x += allocation.x; y += allocation.y; } draw_zoom_animation_composited (screen, x, y, allocation.width, allocation.height, pixbuf, orientation); g_object_unref (pixbuf); }
static gboolean xplayer_fullscreen_exit_popup_draw_cb (GtkWidget *widget, cairo_t *cr, XplayerFullscreen *fs) { GdkScreen *screen; screen = gtk_widget_get_screen (widget); if (gdk_screen_is_composited (screen) == FALSE) return FALSE; gtk_widget_set_app_paintable (widget, TRUE); cairo_set_source_rgba (cr, 1., 1., 1., 0.); cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); cairo_paint (cr); return FALSE; }
static gboolean cheese_flash_start_fade (gpointer data) { CheeseFlash *self = data; CheeseFlashPrivate *flash_priv = CHEESE_FLASH_GET_PRIVATE (self); GtkWindow *flash_window = flash_priv->window; /* If the screen is non-composited, just hide and finish up */ if (!gdk_screen_is_composited (gtk_window_get_screen (flash_window))) { gtk_widget_hide (GTK_WIDGET (flash_window)); return FALSE; } flash_priv->fade_timeout_tag = g_timeout_add_full (G_PRIORITY_DEFAULT, 1000.0 / FLASH_ANIMATION_RATE, cheese_flash_opacity_fade, g_object_ref (self), g_object_unref); return FALSE; }
static void awn_tooltip_set_type_hint (GtkWidget *widget) { if (gtk_widget_get_visible (widget)) return; GdkScreen *screen = gtk_widget_get_screen (widget); if (gdk_screen_is_composited (screen) && strcmp (gdk_x11_screen_get_window_manager_name (screen), "Metacity") == 0) { // metacity shows a nasty shadow around our nice tooltip if we say // we're a tooltip window, so pretend we aren't tooltip to fool it // FIXME: always set the hint once noone cares about metacity gtk_window_set_type_hint (GTK_WINDOW (widget), GDK_WINDOW_TYPE_HINT_DND); } else { gtk_window_set_type_hint (GTK_WINDOW (widget), GDK_WINDOW_TYPE_HINT_TOOLTIP); } }
static gboolean idol_fullscreen_exit_popup_expose_cb (GtkWidget *widget, GdkEventExpose *event, IdolFullscreen *fs) { GdkScreen *screen; cairo_t *cr; screen = gtk_widget_get_screen (widget); if (gdk_screen_is_composited (screen) == FALSE) return FALSE; gtk_widget_set_app_paintable (widget, TRUE); cr = gdk_cairo_create (gtk_widget_get_window (widget)); cairo_set_source_rgba (cr, 1., 1., 1., 0.); cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); cairo_paint (cr); cairo_destroy (cr); return FALSE; }
GtkWindow* create_notification(UrlClickedCb url_clicked) { GtkWidget* win; 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; #endif windata = g_new0(WindowData, 1); windata->urgency = URGENCY_NORMAL; windata->url_clicked = url_clicked; win = gtk_window_new(GTK_WINDOW_POPUP); gtk_window_set_resizable(GTK_WINDOW(win), FALSE); gtk_widget_set_app_paintable(win, TRUE); g_signal_connect(G_OBJECT(win), "style-set", G_CALLBACK(on_style_set), windata); g_signal_connect(G_OBJECT(win), "map-event", G_CALLBACK(on_window_map), windata); g_signal_connect(G_OBJECT(win), "expose-event", G_CALLBACK(on_window_expose), windata); g_signal_connect(G_OBJECT(win), "realize", G_CALLBACK(on_window_realize), 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); if (colormap != NULL) { gtk_widget_set_colormap(win, colormap); if (gdk_screen_is_composited(screen)) { windata->composited = TRUE; } } g_signal_connect(win, "composited-changed", G_CALLBACK(on_composited_changed), 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); 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(on_configure_event), windata); main_vbox = gtk_vbox_new(FALSE, 0); g_signal_connect(G_OBJECT(main_vbox), "style-set", G_CALLBACK(on_style_set), windata); gtk_widget_show(main_vbox); gtk_container_add(GTK_CONTAINER(win), main_vbox); gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 12); 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_alignment_new(0.5, 0, 0, 0); gtk_widget_show(windata->iconbox); gtk_alignment_set_padding(GTK_ALIGNMENT(windata->iconbox), 5, 0, 0, 0); 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_widget_show(windata->icon); gtk_container_add(GTK_CONTAINER(windata->iconbox), windata->icon); 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); close_button = gtk_button_new(); g_signal_connect(G_OBJECT(close_button), "style-set", G_CALLBACK(on_style_set), windata); gtk_widget_show(close_button); windata->close_button = 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); g_object_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."); 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); g_signal_connect(G_OBJECT(windata->summary_label), "style-set", G_CALLBACK(on_style_set), 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); 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_widget_show(windata->content_hbox); 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); windata->body_label = gtk_label_new(NULL); g_signal_connect(G_OBJECT(windata->body_label), "style-set", G_CALLBACK(on_style_set), windata); gtk_widget_show(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); 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); windata->actions_box = gtk_hbox_new(FALSE, 6); gtk_widget_show(windata->actions_box); gtk_container_add(GTK_CONTAINER(alignment), windata->actions_box); return GTK_WINDOW(win); }
static void on_composited_changed(GtkWidget* window, WindowData* windata) { windata->composited = gdk_screen_is_composited(gtk_widget_get_screen(window)); update_shape(windata); }
GtkWindow* create_notification(UrlClickedCb url_clicked) { GtkWidget* win; GtkWidget* main_vbox; GtkWidget* vbox; GtkWidget* close_button; GtkWidget* image; GtkWidget* alignment; AtkObject* atkobj; WindowData* windata; GdkVisual *visual; GdkScreen* screen; windata = g_new0(WindowData, 1); windata->urgency = URGENCY_NORMAL; windata->url_clicked = url_clicked; win = gtk_window_new(GTK_WINDOW_POPUP); gtk_window_set_resizable(GTK_WINDOW(win), FALSE); gtk_widget_set_app_paintable(win, TRUE); g_signal_connect(G_OBJECT(win), "style-updated", G_CALLBACK(on_style_updated), windata); g_signal_connect(G_OBJECT(win), "map-event", G_CALLBACK(on_window_map), windata); g_signal_connect(G_OBJECT(win), "draw", G_CALLBACK(on_draw), windata); g_signal_connect(G_OBJECT(win), "realize", G_CALLBACK(on_window_realize), windata); windata->win = win; windata->composited = FALSE; screen = gtk_window_get_screen(GTK_WINDOW(win)); visual = gdk_screen_get_rgba_visual(screen); if (visual != NULL) { gtk_widget_set_visual(win, visual); if (gdk_screen_is_composited(screen)) { windata->composited = TRUE; } } g_signal_connect(win, "composited-changed", G_CALLBACK(on_composited_changed), windata); 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); 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(on_configure_event), windata); main_vbox = gtk_vbox_new(FALSE, 0); #if GTK_CHECK_VERSION (3, 0, 0) g_signal_connect(G_OBJECT(main_vbox), "style-updated", G_CALLBACK(on_style_updated), windata); #else g_signal_connect(G_OBJECT(main_vbox), "style-set", G_CALLBACK(on_style_set), windata); #endif gtk_widget_show(main_vbox); gtk_container_add(GTK_CONTAINER(win), main_vbox); gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 12); windata->main_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 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_alignment_new(0.5, 0, 0, 0); gtk_widget_show(windata->iconbox); gtk_alignment_set_padding(GTK_ALIGNMENT(windata->iconbox), 5, 0, 0, 0); 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_widget_show(windata->icon); gtk_container_add(GTK_CONTAINER(windata->iconbox), windata->icon); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 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); close_button = gtk_button_new(); gtk_widget_show(close_button); windata->close_button = 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); 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_icon_name ("window-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); gtk_widget_show(windata->summary_label); gtk_box_pack_start(GTK_BOX(vbox), windata->summary_label, TRUE, TRUE, 0); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (windata->summary_label), 0.0); gtk_label_set_yalign (GTK_LABEL (windata->summary_label), 0.0); #else gtk_misc_set_alignment(GTK_MISC(windata->summary_label), 0.0, 0.0); #endif gtk_label_set_line_wrap(GTK_LABEL(windata->summary_label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (windata->summary_label), PANGO_WRAP_WORD_CHAR); atkobj = gtk_widget_get_accessible(windata->summary_label); atk_object_set_description(atkobj, "Notification summary text."); windata->content_hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show(windata->content_hbox); gtk_box_pack_start(GTK_BOX(vbox), windata->content_hbox, FALSE, FALSE, 0); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 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); gtk_widget_show(windata->body_label); gtk_box_pack_start(GTK_BOX(vbox), windata->body_label, TRUE, TRUE, 0); #if GTK_CHECK_VERSION (3, 16, 0) gtk_label_set_xalign (GTK_LABEL (windata->body_label), 0.0); gtk_label_set_yalign (GTK_LABEL (windata->body_label), 0.0); #else gtk_misc_set_alignment(GTK_MISC(windata->body_label), 0.0, 0.0); #endif gtk_label_set_line_wrap(GTK_LABEL(windata->body_label), TRUE); gtk_label_set_line_wrap_mode (GTK_LABEL (windata->body_label), PANGO_WRAP_WORD_CHAR); gtk_label_set_max_width_chars (GTK_LABEL (windata->body_label), 50); g_signal_connect_swapped(G_OBJECT(windata->body_label), "activate-link", G_CALLBACK(windata->url_clicked), win); 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); windata->actions_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6); gtk_widget_show(windata->actions_box); gtk_container_add(GTK_CONTAINER(alignment), windata->actions_box); return GTK_WINDOW(win); }
static void on_composited_changed(GtkWidget* window, WindowData* windata) { windata->composited = gdk_screen_is_composited(gtk_widget_get_screen(window)); gtk_widget_queue_draw (windata->win); }
static void pragha_application_startup (GApplication *application) { PraghaToolbar *toolbar; PraghaPlaylist *playlist; const gchar *version = NULL; const gchar *desktop = NULL; gint playlist_id = 0; const GBindingFlags binding_flags = G_BINDING_SYNC_CREATE | G_BINDING_BIDIRECTIONAL; PraghaApplication *pragha = PRAGHA_APPLICATION (application); G_APPLICATION_CLASS (pragha_application_parent_class)->startup (application); /* Allocate memory for simple structures */ pragha->preferences = pragha_preferences_get(); pragha->cdbase = pragha_database_get(); if (pragha_database_start_successfully(pragha->cdbase) == FALSE) { g_error("Unable to init music dbase"); } version = pragha_preferences_get_installed_version (pragha->preferences); if (string_is_not_empty (version) && (g_ascii_strcasecmp (version, "1.3.90") < 0)) { pragha_database_compatibilize_version (pragha->cdbase); } playlist_id = pragha_database_find_playlist (pragha->cdbase, _("Favorites")); if (playlist_id == 0) pragha_database_add_new_playlist (pragha->cdbase, _("Favorites")); pragha->provider = pragha_database_provider_get (); g_signal_connect (pragha->provider, "want-upgrade", G_CALLBACK(pragha_application_provider_want_upgrade), pragha); g_signal_connect (pragha->provider, "want-update", G_CALLBACK(pragha_application_provider_want_update), pragha); pragha->enum_map = pragha_music_enum_get (); g_signal_connect (pragha->enum_map, "enum-removed", G_CALLBACK(pragha_enum_map_removed_handler), pragha); #ifdef HAVE_LIBPEAS pragha->plugins_engine = pragha_plugins_engine_new (G_OBJECT(pragha)); #endif pragha->art_cache = pragha_art_cache_get (); g_signal_connect (pragha->art_cache, "cache-changed", G_CALLBACK(pragha_art_cache_changed_handler), pragha); pragha->backend = pragha_backend_new (); g_signal_connect (pragha->backend, "finished", G_CALLBACK(pragha_backend_finished_song), pragha); g_signal_connect (pragha->backend, "tags-changed", G_CALLBACK(pragha_backend_tags_changed), pragha); g_signal_connect (pragha->backend, "error", G_CALLBACK(gui_backend_error_show_dialog_cb), pragha); g_signal_connect (pragha->backend, "error", G_CALLBACK(gui_backend_error_update_current_playlist_cb), pragha); g_signal_connect (pragha->backend, "notify::state", G_CALLBACK (pragha_menubar_update_playback_state_cb), pragha); /* * Collect widgets and construct the window. */ pragha_application_construct_window (pragha); /* Connect Signals and Bindings. */ toolbar = pragha->toolbar; g_signal_connect_swapped (toolbar, "prev", G_CALLBACK(pragha_playback_prev_track), pragha); g_signal_connect_swapped (toolbar, "play", G_CALLBACK(pragha_playback_play_pause_resume), pragha); g_signal_connect_swapped (toolbar, "stop", G_CALLBACK(pragha_playback_stop), pragha); g_signal_connect_swapped (toolbar, "next", G_CALLBACK(pragha_playback_next_track), pragha); g_signal_connect (toolbar, "unfull-activated", G_CALLBACK(pragha_window_unfullscreen), pragha); g_signal_connect (toolbar, "album-art-activated", G_CALLBACK(pragha_playback_show_current_album_art), pragha); g_signal_connect_swapped (toolbar, "track-info-activated", G_CALLBACK(pragha_playback_edit_current_track), pragha); g_signal_connect (toolbar, "track-progress-activated", G_CALLBACK(pragha_playback_seek_fraction), pragha); g_signal_connect (toolbar, "favorite-toggle", G_CALLBACK(pragha_playback_toogle_favorite), pragha); playlist = pragha->playlist; g_signal_connect (playlist, "playlist-set-track", G_CALLBACK(pragha_playback_set_playlist_track), pragha); g_signal_connect (playlist, "playlist-change-tags", G_CALLBACK(pragha_playlist_update_change_tags), pragha); g_signal_connect (playlist, "playlist-changed", G_CALLBACK(pragha_playlist_update_statusbar_playtime), pragha); pragha_playlist_update_statusbar_playtime (playlist, pragha); g_signal_connect (pragha->library, "library-append-playlist", G_CALLBACK(pragha_library_pane_append_tracks), pragha); g_signal_connect (pragha->library, "library-replace-playlist", G_CALLBACK(pragha_library_pane_replace_tracks), pragha); g_signal_connect (pragha->library, "library-replace-playlist-and-play", G_CALLBACK(pragha_library_pane_replace_tracks_and_play), pragha); g_signal_connect (pragha->library, "library-addto-playlist-and-play", G_CALLBACK(pragha_library_pane_addto_playlist_and_play), pragha); g_signal_connect (G_OBJECT(pragha->mainwindow), "window-state-event", G_CALLBACK(pragha_toolbar_window_state_event), toolbar); g_signal_connect (G_OBJECT(toolbar), "notify::timer-remaining-mode", G_CALLBACK(pragha_toolbar_show_ramaning_time_cb), pragha->backend); g_signal_connect (pragha->backend, "notify::state", G_CALLBACK(pragha_toolbar_playback_state_cb), toolbar); g_signal_connect (pragha->backend, "tick", G_CALLBACK(pragha_toolbar_update_playback_progress), toolbar); g_signal_connect (pragha->backend, "buffering", G_CALLBACK(pragha_toolbar_update_buffering_cb), toolbar); g_signal_connect (pragha->backend, "notify::state", G_CALLBACK (update_current_playlist_view_playback_state_cb), pragha->playlist); g_object_bind_property (pragha->backend, "volume", toolbar, "volume", binding_flags); g_object_bind_property (pragha->preferences, "timer-remaining-mode", toolbar, "timer-remaining-mode", binding_flags); g_signal_connect (pragha->preferences, "LibraryChanged", G_CALLBACK (pragha_libary_list_changed_cb), pragha); g_signal_connect (pragha->preferences, "NeedRestart", G_CALLBACK (pragha_need_restart_cb), pragha); g_signal_connect (pragha->preferences, "notify::system-titlebar", G_CALLBACK (pragha_system_titlebar_changed_cb), pragha); pragha->sidebar2_binding = g_object_bind_property (pragha->preferences, "secondary-lateral-panel", pragha->sidebar2, "visible", binding_flags); pragha->setting_dialog = pragha_preferences_dialog_new (pragha->mainwindow); #ifdef HAVE_LIBPEAS gboolean sidebar2_visible = // FIXME: Hack to allow hide sidebar when init. pragha_preferences_get_secondary_lateral_panel(pragha->preferences); pragha_plugins_engine_startup (pragha->plugins_engine); pragha_preferences_set_secondary_lateral_panel(pragha->preferences, sidebar2_visible); #endif /* If first run and the desktop is gnome adapts style. */ if (pragha_application_is_first_run (pragha)) { desktop = g_getenv ("XDG_CURRENT_DESKTOP"); if (desktop && (g_strcmp0(desktop, "GNOME") == 0) && gdk_screen_is_composited (gdk_screen_get_default())) { pragha_preferences_set_system_titlebar (pragha->preferences, FALSE); pragha_preferences_set_toolbar_size (pragha->preferences, GTK_ICON_SIZE_SMALL_TOOLBAR); pragha_preferences_set_show_menubar (pragha->preferences, FALSE); } } /* Forse update menubar and toolbar playback actions */ pragha_menubar_update_playback_state_cb (pragha->backend, NULL, pragha); pragha_toolbar_playback_state_cb (pragha->backend, NULL, pragha->toolbar); /* Finally fill the library and the playlist */ pragha_init_gui_state (pragha); }
/* Create new notification */ GtkWindow * create_notification(UrlClickedCb url_clicked) { GtkWidget *spacer; GtkWidget *win; GtkWidget *drawbox; GtkWidget *main_vbox; GtkWidget *hbox; GtkWidget *vbox; GtkWidget *close_button; GtkWidget *image; GtkWidget *alignment; AtkObject *atkobj; WindowData *windata; GdkColormap *colormap; GdkScreen *screen; windata = g_new0(WindowData, 1); windata->urgency = URGENCY_NORMAL; windata->url_clicked = url_clicked; win = gtk_window_new(GTK_WINDOW_POPUP); windata->win = win; windata->enable_transparency = FALSE; 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)) windata->enable_transparency = TRUE; } gtk_window_set_title(GTK_WINDOW(win), "Notification"); gtk_widget_add_events(win, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); gtk_widget_realize(win); gtk_widget_set_size_request(win, WIDTH, -1); 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); /* * For some reason, there are occasionally graphics glitches when * repainting the window. Despite filling the window with a background * color, parts of the other windows on the screen or the shadows around * 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), 1); g_signal_connect(G_OBJECT(main_vbox), "expose_event", G_CALLBACK(paint_window), windata); windata->top_spacer = gtk_image_new(); gtk_box_pack_start(GTK_BOX(main_vbox), windata->top_spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(windata->top_spacer, -1, DEFAULT_ARROW_HEIGHT); 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->bottom_spacer = gtk_image_new(); gtk_box_pack_start(GTK_BOX(main_vbox), windata->bottom_spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(windata->bottom_spacer, -1, DEFAULT_ARROW_HEIGHT); 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); hbox = gtk_hbox_new(FALSE, 6); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); spacer = gtk_image_new(); gtk_widget_show(spacer); gtk_box_pack_start(GTK_BOX(hbox), spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(spacer, SPACER_LEFT, -1); windata->summary_label = gtk_label_new(NULL); gtk_widget_show(windata->summary_label); gtk_box_pack_start(GTK_BOX(hbox), 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); atkobj = gtk_widget_get_accessible(windata->summary_label); atk_object_set_description(atkobj, "Notification summary text."); /* Add the close button */ close_button = gtk_button_new(); gtk_widget_show(close_button); gtk_box_pack_start(GTK_BOX(hbox), close_button, FALSE, FALSE, 0); gtk_button_set_relief(GTK_BUTTON(close_button), GTK_RELIEF_NONE); gtk_container_set_border_width(GTK_CONTAINER(close_button), 0); gtk_widget_set_size_request(close_button, 24, 24); g_signal_connect_swapped(G_OBJECT(close_button), "clicked", G_CALLBACK(gtk_widget_destroy), win); 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); windata->content_hbox = gtk_hbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(vbox), windata->content_hbox, FALSE, FALSE, 0); windata->iconbox = gtk_hbox_new(FALSE, 0); gtk_widget_show(windata->iconbox); gtk_box_pack_start(GTK_BOX(windata->content_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.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); 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(G_OBJECT(windata->body_label), "activate-link", G_CALLBACK(activate_link), windata); 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); windata->actions_box = gtk_hbox_new(FALSE, 6); gtk_container_add(GTK_CONTAINER(alignment), windata->actions_box); return GTK_WINDOW(win); }
GtkWindow* create_notification(UrlClickedCb url_clicked) { GtkWidget* spacer; GtkWidget* win; GtkWidget* main_vbox; GtkWidget* hbox; GtkWidget* vbox; GtkWidget* close_button; GtkWidget* image; GtkWidget* alignment; AtkObject* atkobj; #if !GTK_CHECK_VERSION(3, 0, 0) GtkRcStyle* rcstyle; #endif WindowData* windata; #if GTK_CHECK_VERSION (3, 0, 0) GdkVisual *visual; #else GdkColormap* colormap; #endif GdkScreen* screen; windata = g_new0(WindowData, 1); windata->urgency = URGENCY_NORMAL; windata->url_clicked = url_clicked; win = gtk_window_new(GTK_WINDOW_POPUP); windata->win = win; windata->composited = FALSE; screen = gtk_window_get_screen(GTK_WINDOW(win)); #if GTK_CHECK_VERSION (3, 0, 0) visual = gdk_screen_get_rgba_visual(screen); if (visual != NULL) { gtk_widget_set_visual(win, visual); if (gdk_screen_is_composited(screen)) { windata->composited = TRUE; } } #else colormap = gdk_screen_get_rgba_colormap(screen); if (colormap != NULL && gdk_screen_is_composited(screen)) { gtk_widget_set_colormap(win, colormap); windata->composited = TRUE; } #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_widget_set_size_request(win, WIDTH, -1); 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); main_vbox = gtk_vbox_new(FALSE, 0); gtk_widget_show(main_vbox); gtk_container_add (GTK_CONTAINER (win), main_vbox); gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 1); #if GTK_CHECK_VERSION (3, 0, 0) g_signal_connect (G_OBJECT (main_vbox), "draw", G_CALLBACK (on_draw), windata); #else g_signal_connect (G_OBJECT (main_vbox), "expose_event", G_CALLBACK (on_expose_event), windata); #endif windata->top_spacer = gtk_image_new(); gtk_box_pack_start(GTK_BOX(main_vbox), windata->top_spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(windata->top_spacer, -1, DEFAULT_ARROW_HEIGHT); 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->bottom_spacer = gtk_image_new(); gtk_box_pack_start(GTK_BOX(main_vbox), windata->bottom_spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(windata->bottom_spacer, -1, DEFAULT_ARROW_HEIGHT); 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); hbox = gtk_hbox_new(FALSE, 6); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); spacer = gtk_image_new(); gtk_widget_show(spacer); gtk_box_pack_start(GTK_BOX(hbox), spacer, FALSE, FALSE, 0); gtk_widget_set_size_request(spacer, SPACER_LEFT, -1); windata->summary_label = gtk_label_new(NULL); gtk_widget_show(windata->summary_label); gtk_box_pack_start(GTK_BOX(hbox), windata->summary_label, TRUE, TRUE, 0); #if GTK_CHECK_VERSION (3, 15, 2) gtk_label_set_xalign (GTK_LABEL (windata->summary_label), 0.0); gtk_label_set_yalign (GTK_LABEL (windata->summary_label), 0.0); #else gtk_misc_set_alignment(GTK_MISC(windata->summary_label), 0, 0); #endif gtk_label_set_line_wrap(GTK_LABEL(windata->summary_label), TRUE); #if GTK_CHECK_VERSION (3, 0, 0) gtk_label_set_line_wrap_mode (GTK_LABEL (windata->summary_label), PANGO_WRAP_WORD_CHAR); #endif atkobj = gtk_widget_get_accessible(windata->summary_label); atk_object_set_description(atkobj, "Notification summary text."); /* Add the close button */ alignment = gtk_alignment_new(1, 0, 0, 0); gtk_widget_show(alignment); gtk_box_pack_start(GTK_BOX(hbox), alignment, FALSE, FALSE, 0); 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); //gtk_widget_set_size_request(close_button, 20, 20); g_signal_connect_swapped(G_OBJECT(close_button), "clicked", G_CALLBACK(gtk_widget_destroy), win); #if !GTK_CHECK_VERSION(3, 0, 0) rcstyle = gtk_rc_style_new(); rcstyle->xthickness = rcstyle->ythickness = 0; gtk_widget_modify_style(close_button, rcstyle); g_object_unref(rcstyle); #endif 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); windata->content_hbox = gtk_hbox_new(FALSE, 6); gtk_box_pack_start(GTK_BOX(vbox), windata->content_hbox, FALSE, FALSE, 0); windata->iconbox = gtk_hbox_new(FALSE, 0); gtk_widget_show(windata->iconbox); gtk_box_pack_start(GTK_BOX(windata->content_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.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); gtk_box_pack_start(GTK_BOX(vbox), windata->body_label, TRUE, TRUE, 0); #if GTK_CHECK_VERSION (3, 15, 2) gtk_label_set_xalign (GTK_LABEL (windata->body_label), 0.0); gtk_label_set_yalign (GTK_LABEL (windata->body_label), 0.0); #else gtk_misc_set_alignment(GTK_MISC(windata->body_label), 0, 0); #endif gtk_label_set_line_wrap(GTK_LABEL(windata->body_label), TRUE); #if GTK_CHECK_VERSION (3, 0, 0) gtk_label_set_line_wrap_mode (GTK_LABEL (windata->body_label), PANGO_WRAP_WORD_CHAR); #endif g_signal_connect(G_OBJECT(windata->body_label), "activate-link", G_CALLBACK(activate_link), windata); 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); windata->actions_box = gtk_hbox_new(FALSE, 6); gtk_container_add(GTK_CONTAINER(alignment), windata->actions_box); return GTK_WINDOW(win); }
void build_mainwindow(void) { mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_app_paintable(mainwindow, TRUE); gtk_widget_set_size_request(mainwindow, conf_get_width(), conf_get_height()); gtk_window_set_decorated(GTK_WINDOW(mainwindow), FALSE); gtk_window_set_skip_taskbar_hint(GTK_WINDOW(mainwindow), TRUE); gtk_window_set_skip_pager_hint(GTK_WINDOW(mainwindow), TRUE); gtk_window_set_resizable(GTK_WINDOW(mainwindow), TRUE); mainwindow_reset_position(); fullscreen = FALSE; toggled = FALSE; GtkAccelGroup* accel_group; GClosure *new_tab, *delete_tab, *next_tab, *prev_tab, *delete_all, *maximize, *copy, *paste; accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(mainwindow), accel_group); maximize = g_cclosure_new_swap(G_CALLBACK(mainwindow_toggle_fullscreen), NULL, NULL); gtk_accel_group_connect(accel_group, GDK_F11, 0, GTK_ACCEL_VISIBLE, maximize); new_tab = g_cclosure_new_swap(G_CALLBACK(mainwindow_new_tab), NULL, NULL); gtk_accel_group_connect(accel_group, 't', conf_get_key_mod(), GTK_ACCEL_VISIBLE, new_tab); delete_tab = g_cclosure_new_swap(G_CALLBACK(mainwindow_delete_tab), NULL, NULL); gtk_accel_group_connect(accel_group, 'w', conf_get_key_mod(), GTK_ACCEL_VISIBLE, delete_tab); next_tab = g_cclosure_new_swap(G_CALLBACK(mainwindow_next_tab), NULL, NULL); gtk_accel_group_connect(accel_group, GDK_Page_Down, conf_get_key_mod(), GTK_ACCEL_VISIBLE, next_tab); prev_tab = g_cclosure_new_swap(G_CALLBACK(mainwindow_prev_tab), NULL, NULL); gtk_accel_group_connect(accel_group, GDK_Page_Up, conf_get_key_mod(), GTK_ACCEL_VISIBLE, prev_tab); delete_all = g_cclosure_new_swap(G_CALLBACK(mainwindow_destroy), NULL, NULL); gtk_accel_group_connect(accel_group, 'q', conf_get_key_mod(), GTK_ACCEL_VISIBLE, delete_all); copy = g_cclosure_new_swap(G_CALLBACK(mainwindow_copy), NULL, NULL); gtk_accel_group_connect(accel_group, 'c', conf_get_key_mod(), GTK_ACCEL_VISIBLE, copy); paste = g_cclosure_new_swap(G_CALLBACK(mainwindow_paste), NULL, NULL); gtk_accel_group_connect(accel_group, 'v', conf_get_key_mod(), GTK_ACCEL_VISIBLE, paste); activetab = -1; tabs = g_array_new(TRUE, FALSE, sizeof(VteTerminal*)); tabcount = 0; GtkVBox* mainbox = GTK_VBOX(gtk_vbox_new(FALSE, 0)); tabbar = GTK_NOTEBOOK(gtk_notebook_new()); g_signal_connect(G_OBJECT(tabbar), "switch-page", G_CALLBACK(mainwindow_switch_tab), NULL); if (conf_get_opacity() < 100) { GdkScreen *screen = gdk_screen_get_default(); GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen); screen_is_composited = (colormap != NULL && gdk_screen_is_composited(screen)); if (screen_is_composited) { gtk_widget_set_colormap(GTK_WIDGET(mainwindow), colormap); gdk_screen_set_default_colormap(screen, colormap); } } gtk_box_pack_start(GTK_BOX(mainbox), GTK_WIDGET(tabbar), TRUE, TRUE, 0); mainwindow_create_tab(); gtk_widget_show_all(GTK_WIDGET(mainbox)); gtk_container_add(GTK_CONTAINER(mainwindow), GTK_WIDGET(mainbox)); int border = conf_get_border(); if (border == BORDER_THIN) gtk_container_set_border_width(GTK_CONTAINER(mainwindow), 1); else if (border == BORDER_THICK) gtk_container_set_border_width(GTK_CONTAINER(mainwindow), 5); if (border != BORDER_NONE) g_signal_connect(G_OBJECT(mainwindow), "expose-event", G_CALLBACK(mainwindow_expose_event), NULL); /* * g_signal_connect connects a GCallback function to a signal for a * particular object. For example, when the 'focus-out-event' signal is * triggered (That is, when Stjerm loses focus), the * 'mainwindow_focus_out_event' function will run. */ if (conf_get_auto_hide()) g_signal_connect(G_OBJECT(mainwindow), "focus-out-event", G_CALLBACK(mainwindow_focus_out_event), NULL); g_signal_connect(G_OBJECT(mainwindow), "show", G_CALLBACK(mainwindow_show), NULL); g_signal_connect(G_OBJECT(mainwindow), "destroy", G_CALLBACK(mainwindow_destroy), NULL); gtk_notebook_set_show_border(tabbar, FALSE); gtk_notebook_set_scrollable(tabbar, TRUE); if (conf_get_show_tab() == TABS_ONE|| conf_get_show_tab() == TABS_NEVER) gtk_notebook_set_show_tabs(tabbar, FALSE); gtk_notebook_set_tab_pos(tabbar, conf_get_tab_pos()); XSetErrorHandler(handle_x_error); init_key(); // init_key and grab_key are grab_key(); // defined globally in stjerm.h g_thread_create((GThreadFunc)wait_key, NULL, FALSE, NULL); }
gboolean gsd_media_keys_window_is_valid (GsdMediaKeysWindow *window) { GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (window)); return gdk_screen_is_composited (screen) == window->priv->is_composited; }
static void _on_composited_changed (GdkScreen *pScreen, gpointer data) { myData.bIsComposited = gdk_screen_is_composited (pScreen); cd_draw_current_state (); }
GtkWindow* create_notification(Settings settings) { WindowData *windata; GtkWidget *win; #ifdef USE_COMPOSITE GdkColormap *colormap; GdkScreen *screen; #endif // create WindowData object windata = g_new0(WindowData, 1); // create GTK window win = gtk_window_new(GTK_WINDOW_POPUP); gtk_window_set_resizable(GTK_WINDOW (win), FALSE); gtk_widget_set_app_paintable(win, TRUE); windata->win = win; windata->settings = settings; // connect signals g_signal_connect (G_OBJECT (win), "style-set", G_CALLBACK (on_style_set), windata); g_signal_connect (G_OBJECT (win), "map-event", G_CALLBACK (on_window_map), windata); g_signal_connect (G_OBJECT (win), "expose-event", G_CALLBACK (on_window_expose), windata); g_signal_connect (G_OBJECT (win), "realize", G_CALLBACK (on_window_realize), windata); // prepare composite windata->composited = FALSE; #ifdef USE_COMPOSITE 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)) { windata->composited = TRUE; } } g_signal_connect(win, "composited-changed", G_CALLBACK (on_composited_changed), windata); #endif gtk_window_set_title(GTK_WINDOW (win), "Notification"); gtk_window_set_type_hint(GTK_WINDOW (win), GDK_WINDOW_TYPE_HINT_NOTIFICATION); gtk_window_set_default_size(GTK_WINDOW(win), 400, 400); gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); g_object_set_data_full (G_OBJECT (win), "windata", windata, (GDestroyNotify)destroy_windata); g_signal_connect (G_OBJECT (win), "configure-event", G_CALLBACK (on_configure_event), windata); windata->main_vbox = gtk_vbox_new(FALSE, 0); g_signal_connect(G_OBJECT(windata->main_vbox), "style-set", G_CALLBACK(on_style_set), windata); gtk_widget_show(windata->main_vbox); gtk_container_add(GTK_CONTAINER(win), windata->main_vbox); gtk_container_set_border_width(GTK_CONTAINER(windata->main_vbox), DEFAULT_BORDER); // 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); // icon box windata->iconbox = gtk_alignment_new (0.5f, 0, 0, 0); gtk_widget_show (windata->iconbox); gtk_alignment_set_padding (GTK_ALIGNMENT (windata->iconbox), 0, IMAGE_PADDING, 0, 0); gtk_box_pack_start (GTK_BOX (windata->main_vbox), windata->iconbox, FALSE, FALSE, 0); gtk_widget_set_size_request (windata->iconbox, BODY_X_OFFSET, -1); // icon windata->icon = gtk_image_new (); gtk_widget_show (windata->icon); gtk_container_add (GTK_CONTAINER (windata->iconbox), windata->icon); // progress bar box windata->progressbarbox = gtk_alignment_new (0.5f, 0, 0, 0); gtk_widget_show (windata->progressbarbox); // gtk_alignment_set_padding (GTK_ALIGNMENT (windata->iconbox), // 5, 0, 0, 0); gtk_box_pack_start (GTK_BOX (windata->main_vbox), windata->progressbarbox, FALSE, FALSE, 0); gtk_widget_set_size_request (windata->progressbarbox, BODY_X_OFFSET, -1); // progress bar windata->progressbar = gtk_image_new (); gtk_widget_show (windata->progressbar); gtk_container_add (GTK_CONTAINER (windata->progressbarbox), windata->progressbar); return GTK_WINDOW(win); }