static void ide_clang_completion_item_class_init (IdeClangCompletionItemClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); const gchar *icon_names[] = { "lang-class-symbolic", "lang-enum-symbolic", "lang-enum-value-symbolic", "lang-function-symbolic", "lang-method-symbolic", "lang-struct-symbolic", "struct-field-symbolic", NULL }; gint i; object_class->finalize = ide_clang_completion_item_finalize; object_class->get_property = ide_clang_completion_item_get_property; object_class->set_property = ide_clang_completion_item_set_property; gParamSpecs [PROP_INDEX] = g_param_spec_uint ("index", _("Index"), _("The index in the result set."), 0, G_MAXUINT-1, 0, (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); gParamSpecs [PROP_RESULTS] = g_param_spec_boxed ("results", _("Results"), _("The Clang result set."), IDE_TYPE_REF_PTR, (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs); gIcons = g_hash_table_new (g_str_hash, g_str_equal); for (i = 0; icon_names [i]; i++) { g_autofree gchar *path = NULL; g_autoptr(GError) error = NULL; GdkPixbuf *icon; path = g_strdup_printf ("/org/gnome/libide/icons/autocomplete/%s.svg", icon_names [i]); icon = gdk_pixbuf_new_from_resource_at_scale (path, 16, 16, TRUE, &error); if (error) g_warning ("%s", error->message); else g_hash_table_insert (gIcons, (gchar *)g_intern_string (icon_names [i]), icon); } }
static void test_resource_at_scale (void) { const gchar *path; GError *error = NULL; GdkPixbuf *pixbuf, *ref; path = g_test_get_filename (G_TEST_DIST, "icc-profile.png", NULL); ref = gdk_pixbuf_new_from_file_at_scale (path, 40, 10, FALSE, &error); g_assert_no_error (error); pixbuf = gdk_pixbuf_new_from_resource_at_scale ("/test/resource/icc-profile.png", 40, 10, FALSE, &error); g_assert_no_error (error); g_assert (pixbuf_equal (pixbuf, ref)); g_object_unref (pixbuf); g_object_unref (ref); }
static void show_account_creation(RingMainWindow *win) { RingMainWindowPrivate *priv = RING_MAIN_WINDOW_GET_PRIVATE(win); gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->account_creation_1, CREATE_ACCOUNT_1_VIEW_NAME); gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->account_creation_2, CREATE_ACCOUNT_2_VIEW_NAME); /* hide settings button until account creation is complete */ gtk_widget_hide(priv->ring_settings); /* set ring logo */ GError *error = NULL; GdkPixbuf* logo_ring = gdk_pixbuf_new_from_resource_at_scale("/cx/ring/RingGnome/ring-logo-blue", -1, 75, TRUE, &error); if (logo_ring == NULL) { g_debug("Could not load logo: %s", error->message); g_clear_error(&error); } else gtk_image_set_from_pixbuf(GTK_IMAGE(priv->image_ring_logo), logo_ring); /* style of alias and hash entry; give them a larger font */ gtk_widget_override_font(priv->entry_alias, pango_font_description_from_string("15")); gtk_widget_override_font(priv->entry_hash, pango_font_description_from_string("monospace 15")); gtk_entry_set_text(GTK_ENTRY(priv->entry_alias), g_get_real_name()); /* connect signals */ g_signal_connect(priv->entry_alias, "changed", G_CALLBACK(alias_entry_changed), win); g_signal_connect(priv->button_account_creation_next, "clicked", G_CALLBACK(account_creation_next_clicked), win); g_signal_connect(priv->button_account_creation_done, "clicked", G_CALLBACK(account_creation_done_clicked), win); g_signal_connect(priv->entry_alias, "activate", G_CALLBACK(entry_alias_activated), win); g_signal_connect_swapped(priv->entry_hash, "activate", G_CALLBACK(gtk_button_clicked), priv->button_account_creation_done); gtk_stack_set_visible_child_name(GTK_STACK(priv->stack_main_view), CREATE_ACCOUNT_1_VIEW_NAME); }
void egg_empty_state_set_resource (EggEmptyState *self, const gchar *resource) { EggEmptyStatePrivate *priv = egg_empty_state_get_instance_private (self); g_return_if_fail (EGG_IS_EMPTY_STATE (self)); if (resource != NULL) { GdkPixbuf *pixbuf; GError *error = NULL; gint scale_factor; scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (self)); pixbuf = gdk_pixbuf_new_from_resource_at_scale (resource, 128 * scale_factor, 128 * scale_factor, TRUE, &error); if (pixbuf == NULL) { g_warning ("%s", error->message); g_clear_error (&error); return; } g_object_set (priv->image, "pixbuf", pixbuf, NULL); g_clear_object (&pixbuf); } }
static GdkPixbuf* get_icon_for_channel (const gchar *url) { GdkPixbuf *ret; GError *error; ret = NULL; error = NULL; if (url != NULL) { ret = gdk_pixbuf_new_from_resource_at_scale (url, ICON_SIZE, ICON_SIZE, TRUE, &error); if (ret == NULL) { g_message ("Unable to build icon for channel: %s", error->message); g_error_free (error); } } if (ret == NULL) ret = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), "application-rss+xml-symbolic", ICON_SIZE, GTK_ICON_LOOKUP_GENERIC_FALLBACK, NULL); return ret; }
GtkWidget * do_listbox (GtkWidget *do_widget) { GtkWidget *scrolled, *listbox, *vbox, *label; GtkMessage *message; GtkMessageRow *row; GBytes *data; char **lines; int i; if (!window) { avatar_pixbuf_other = gdk_pixbuf_new_from_resource_at_scale ("/listbox/apple-red.png", 32, 32, FALSE, NULL); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (do_widget)); gtk_window_set_title (GTK_WINDOW (window), "List Box"); gtk_window_set_default_size (GTK_WINDOW (window), 400, 600); /* NULL window variable when window is closed */ g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_add (GTK_CONTAINER (window), vbox); label = gtk_label_new ("Messages from Gtk+ and friends"); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); gtk_box_pack_start (GTK_BOX (vbox), scrolled, TRUE, TRUE, 0); listbox = gtk_list_box_new (); gtk_container_add (GTK_CONTAINER (scrolled), listbox); gtk_list_box_set_sort_func (GTK_LIST_BOX (listbox), (GtkListBoxSortFunc)gtk_message_row_sort, listbox, NULL); gtk_list_box_set_activate_on_single_click (GTK_LIST_BOX (listbox), FALSE); g_signal_connect (listbox, "row-activated", G_CALLBACK (row_activated), NULL); gtk_widget_show_all (vbox); data = g_resources_lookup_data ("/listbox/messages.txt", 0, NULL); lines = g_strsplit (g_bytes_get_data (data, NULL), "\n", 0); for (i = 0; lines[i] != NULL && *lines[i]; i++) { message = gtk_message_new (lines[i]); row = gtk_message_row_new (message); gtk_widget_show (GTK_WIDGET (row)); gtk_container_add (GTK_CONTAINER (listbox), GTK_WIDGET (row)); } g_strfreev (lines); g_bytes_unref (data); } if (!gtk_widget_get_visible (window)) gtk_widget_show (window); else gtk_widget_destroy (window); return window; }
static void ring_main_window_init(RingMainWindow *win) { RingMainWindowPrivate *priv = RING_MAIN_WINDOW_GET_PRIVATE(win); gtk_widget_init_template(GTK_WIDGET(win)); /* set window icon */ GError *error = NULL; GdkPixbuf* icon = gdk_pixbuf_new_from_resource("/cx/ring/RingGnome/ring-symbol-blue", &error); if (icon == NULL) { g_debug("Could not load icon: %s", error->message); g_clear_error(&error); } else gtk_window_set_icon(GTK_WINDOW(win), icon); /* set menu icon */ GdkPixbuf* image_ring = gdk_pixbuf_new_from_resource_at_scale("/cx/ring/RingGnome/ring-symbol-blue", -1, 24, TRUE, &error); if (image_ring == NULL) { g_debug("Could not load icon: %s", error->message); g_clear_error(&error); } else gtk_image_set_from_pixbuf(GTK_IMAGE(priv->image_ring), image_ring); /* ring menu */ GtkBuilder *builder = gtk_builder_new_from_resource("/cx/ring/RingGnome/ringgearsmenu.ui"); GMenuModel *menu = G_MENU_MODEL(gtk_builder_get_object(builder, "menu")); gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(priv->ring_menu), menu); g_object_unref(builder); /* settings icon */ gtk_image_set_from_icon_name(GTK_IMAGE(priv->image_settings), "emblem-system-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR); /* connect settings button signal */ g_signal_connect(priv->ring_settings, "clicked", G_CALLBACK(settings_clicked), win); /* add the call view to the main stack */ gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->vbox_call_view, CALL_VIEW_NAME); if (has_ring_account()) { /* user has ring account, so show the call view right away */ gtk_stack_set_visible_child(GTK_STACK(priv->stack_main_view), priv->vbox_call_view); } else { /* user has to create the ring account */ show_account_creation(win); } /* init the settings views */ priv->account_settings_view = account_view_new(); gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->account_settings_view, ACCOUNT_SETTINGS_VIEW_NAME); priv->media_settings_view = media_settings_view_new(); gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->media_settings_view, MEDIA_SETTINGS_VIEW_NAME); priv->general_settings_view = general_settings_view_new(); gtk_stack_add_named(GTK_STACK(priv->stack_main_view), priv->general_settings_view, GENERAL_SETTINGS_VIEW_NAME); /* make the setting we will show first the active one */ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->radiobutton_general_settings), TRUE); priv->last_settings_view = priv->general_settings_view; /* connect the settings button signals to switch settings views */ g_signal_connect(priv->radiobutton_media_settings, "toggled", G_CALLBACK(show_media_settings), win); g_signal_connect(priv->radiobutton_account_settings, "toggled", G_CALLBACK(show_account_settings), win); g_signal_connect(priv->radiobutton_general_settings, "toggled", G_CALLBACK(show_general_settings), win); /* populate the notebook */ auto smart_view = recent_contacts_view_new(); gtk_container_add(GTK_CONTAINER(priv->scrolled_window_smartview), smart_view); auto contacts_view = contacts_view_new(); gtk_container_add(GTK_CONTAINER(priv->scrolled_window_contacts), contacts_view); auto history_view = history_view_new(); gtk_container_add(GTK_CONTAINER(priv->scrolled_window_history), history_view); /* welcome/default view */ priv->welcome_view = ring_welcome_view_new(); g_object_ref(priv->welcome_view); // gtk_stack_add_named(GTK_STACK(priv->stack_call_view), welcome_view, DEFAULT_VIEW_NAME); gtk_container_add(GTK_CONTAINER(priv->frame_call), priv->welcome_view); gtk_widget_show(priv->welcome_view); /* call/chat selection */ QObject::connect( RecentModel::instance().selectionModel(), &QItemSelectionModel::currentChanged, [win](const QModelIndex current, G_GNUC_UNUSED const QModelIndex & previous) { if (auto call = RecentModel::instance().getActiveCall(current)) { /* if the call is on hold, we want to put it off hold automatically * when switching to it */ if (call->state() == Call::State::HOLD) call << Call::Action::HOLD; } selection_changed(current, win); } ); /* connect to dataChanged of the RecentModel to see if we need to change the view */ QObject::connect( &RecentModel::instance(), &RecentModel::dataChanged, [win](const QModelIndex & topLeft, G_GNUC_UNUSED const QModelIndex & bottomRight, G_GNUC_UNUSED const QVector<int> & roles) { /* it is possible for dataChanged to be emitted inside of a dataChanged handler or * some other signal; since the connection is via a lambda, Qt would cause the * handler to be called directly. This is not behaviour we usually want, so we call our * function via g_idle so that it gets called after the initial handler is done. */ if (topLeft == RecentModel::instance().selectionModel()->currentIndex()) g_idle_add((GSourceFunc)selected_item_changed, win); } ); g_signal_connect(priv->button_placecall, "clicked", G_CALLBACK(search_entry_placecall), win); g_signal_connect(priv->search_entry, "activate", G_CALLBACK(search_entry_placecall), win); /* autocompletion */ priv->q_completion_model = new NumberCompletionModel(); /* autocompletion renderers */ GtkCellArea *completion_area = gtk_cell_area_box_new(); /* photo renderer */ GtkCellRenderer *renderer = gtk_cell_renderer_pixbuf_new(); gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(completion_area), renderer, TRUE, /* expand */ TRUE, /* align */ TRUE); /* fixed size */ gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(completion_area), renderer, (GtkCellLayoutDataFunc)autocompletion_photo_render, NULL, NULL); /* name renderer */ renderer = gtk_cell_renderer_text_new(); g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(completion_area), renderer, TRUE, /* expand */ TRUE, /* align */ TRUE); /* fixed size */ gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(completion_area), renderer, (GtkCellLayoutDataFunc)autocompletion_name_render, NULL, NULL); /* number renderer */ renderer = gtk_cell_renderer_text_new(); g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(completion_area), renderer, TRUE, /* expand */ TRUE, /* align */ TRUE); /* fixed size */ gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(completion_area), renderer, (GtkCellLayoutDataFunc)autocompletion_number_render, NULL, NULL); /* account renderer */ renderer = gtk_cell_renderer_text_new(); g_object_set(G_OBJECT(renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL); gtk_cell_area_box_pack_start(GTK_CELL_AREA_BOX(completion_area), renderer, TRUE, /* expand */ TRUE, /* align */ TRUE); /* fixed size */ gtk_cell_layout_set_cell_data_func(GTK_CELL_LAYOUT(completion_area), renderer, (GtkCellLayoutDataFunc)autocompletion_account_render, NULL, NULL); GtkEntryCompletion *entry_completion = gtk_entry_completion_new_with_area(completion_area); GtkQTreeModel *completion_model = gtk_q_tree_model_new( (QAbstractItemModel *)priv->q_completion_model, 1, Qt::DisplayRole, G_TYPE_STRING); gtk_entry_completion_set_model(entry_completion, GTK_TREE_MODEL(completion_model)); gtk_entry_set_completion(GTK_ENTRY(priv->search_entry), entry_completion); gtk_entry_completion_set_match_func( entry_completion, (GtkEntryCompletionMatchFunc) completion_match_func, NULL, NULL); /* connect signal to when text is entered in the entry */ g_signal_connect(priv->search_entry, "changed", G_CALLBACK(search_entry_text_changed), win); g_signal_connect(entry_completion, "match-selected", G_CALLBACK(select_autocompletion), win); /* connect to incoming call and focus */ QObject::connect( &CallModel::instance(), &CallModel::incomingCall, [=](Call* call) { CallModel::instance().selectionModel()->setCurrentIndex( CallModel::instance().getIndex(call), QItemSelectionModel::ClearAndSelect); } ); /* react to digit key press events */ g_signal_connect(win, "key-press-event", G_CALLBACK(dtmf_pressed), NULL); /* set the search entry placeholder text */ gtk_entry_set_placeholder_text(GTK_ENTRY(priv->search_entry), C_("Please try to make the translation 50 chars or less so that it fits into the layout", "Search contacts or enter number")); }
static void ring_welcome_view_init(RingWelcomeView *self) { RingWelcomeViewPrivate *priv = RING_WELCOME_VIEW_GET_PRIVATE(self); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(self), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); auto box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 15); gtk_container_add(GTK_CONTAINER(self), box); gtk_box_set_baseline_position(GTK_BOX(box), GTK_BASELINE_POSITION_CENTER); gtk_widget_set_vexpand(GTK_WIDGET(box), TRUE); gtk_widget_set_hexpand(GTK_WIDGET(box), FALSE); gtk_widget_set_valign(GTK_WIDGET(box), GTK_ALIGN_CENTER); gtk_widget_set_halign(GTK_WIDGET(box), GTK_ALIGN_CENTER); /* get logo */ GError *error = NULL; GdkPixbuf* logo = gdk_pixbuf_new_from_resource_at_scale("/cx/ring/RingGnome/ring-logo-blue", 350, -1, TRUE, &error); if (logo == NULL) { g_debug("Could not load logo: %s", error->message); g_clear_error(&error); } else { auto image_ring_logo = gtk_image_new_from_pixbuf(logo); gtk_box_pack_start(GTK_BOX(box), image_ring_logo, FALSE, TRUE, 0); } /* welcome text */ auto label_welcome_text = gtk_label_new(_("Ring is a secure and distributed voice, video, and chat communication platform that requires no centralized server and leaves the power of privacy in the hands of the user.")); gtk_label_set_justify(GTK_LABEL(label_welcome_text), GTK_JUSTIFY_CENTER); gtk_widget_override_font(label_welcome_text, pango_font_description_from_string("12")); gtk_label_set_line_wrap(GTK_LABEL(label_welcome_text), TRUE); /* the max width chars is to limit how much the text expands */ gtk_label_set_max_width_chars(GTK_LABEL(label_welcome_text), 50); gtk_label_set_selectable(GTK_LABEL(label_welcome_text), TRUE); gtk_box_pack_start(GTK_BOX(box), label_welcome_text, FALSE, TRUE, 0); /* RingID explanation */ auto label_explanation = gtk_label_new(C_("Do not translate \"RingID\"", "This is your RingID.\nCopy and share it with your friends!")); auto context = gtk_widget_get_style_context(label_explanation); gtk_style_context_add_class(context, GTK_STYLE_CLASS_DIM_LABEL); gtk_label_set_justify(GTK_LABEL(label_explanation), GTK_JUSTIFY_CENTER); gtk_label_set_selectable(GTK_LABEL(label_explanation), TRUE); gtk_widget_set_margin_top(label_explanation, 20); /* we migth need to hide the label if a RING account doesn't exist */ gtk_widget_set_no_show_all(label_explanation, TRUE); gtk_box_pack_start(GTK_BOX(box), label_explanation, FALSE, TRUE, 0); /* RingID label */ auto label_ringid = gtk_label_new(NULL); gtk_label_set_selectable(GTK_LABEL(label_ringid), TRUE); gtk_widget_override_font(label_ringid, pango_font_description_from_string("monospace 12")); show_ring_id(GTK_LABEL(label_ringid), get_active_ring_account()); gtk_widget_set_no_show_all(label_ringid, TRUE); gtk_box_pack_start(GTK_BOX(box), label_ringid, FALSE, TRUE, 0); gtk_label_set_ellipsize(GTK_LABEL(label_ringid), PANGO_ELLIPSIZE_END); if (get_active_ring_account()) { gtk_widget_show(label_explanation); gtk_widget_show(label_ringid); } priv-> ringaccount_updated = QObject::connect( &AccountModel::instance(), &AccountModel::dataChanged, [label_explanation, label_ringid] () { /* check if the active ring account has changed, * eg: if it was deleted */ auto account = get_active_ring_account(); show_ring_id(GTK_LABEL(label_ringid), get_active_ring_account()); if (account) { gtk_widget_show(label_explanation); gtk_widget_show(label_ringid); } else { gtk_widget_hide(label_explanation); gtk_widget_hide(label_ringid); } } ); gtk_widget_show_all(GTK_WIDGET(self)); }