GladeEditable * glade_gtk_window_create_editable (GladeWidgetAdaptor * adaptor, GladeEditorPageType type) { GladeEditable *editable; if (type == GLADE_PAGE_GENERAL && /* Don't show all the GtkWindow properties for offscreen windows. * * We spoof the offscreen window type instead of using the real GType, * so don't check it by GType but use strcmp() instead. */ strcmp (glade_widget_adaptor_get_name (adaptor), "GtkOffscreenWindow") != 0) { GType window_type = glade_widget_adaptor_get_object_type (adaptor); if (g_type_is_a (window_type, GTK_TYPE_ABOUT_DIALOG)) editable = (GladeEditable *) glade_about_dialog_editor_new (); else if (g_type_is_a (window_type, GTK_TYPE_FILE_CHOOSER_DIALOG)) editable = (GladeEditable *) glade_file_chooser_dialog_editor_new (); else if (g_type_is_a (window_type, GTK_TYPE_FONT_CHOOSER_DIALOG)) editable = (GladeEditable *) glade_font_chooser_dialog_editor_new (); else if (g_type_is_a (window_type, GTK_TYPE_RECENT_CHOOSER_DIALOG)) editable = (GladeEditable *) glade_recent_chooser_dialog_editor_new (); else if (g_type_is_a (window_type, GTK_TYPE_MESSAGE_DIALOG)) editable = (GladeEditable *) glade_message_dialog_editor_new (); else editable = (GladeEditable *) glade_window_editor_new (); } else editable = GWA_GET_CLASS (GTK_TYPE_WIDGET)->create_editable (adaptor, type); return editable; }
static gboolean treemodelfilter_visible_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { _GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (data); GladeWidgetAdaptor *adaptor = NULL; gboolean visible = TRUE; gtk_tree_model_get (model, iter, COLUMN_ADAPTOR, &adaptor, -1); if (!adaptor) return priv->show_group_title && !priv->search_text; /* Skip classes not available in project target version */ if (priv->project) { const gchar *catalog = NULL; gint major, minor; catalog = glade_widget_adaptor_get_catalog (adaptor); glade_project_get_target_version (priv->project, catalog, &major, &minor); visible = GWA_VERSION_CHECK (adaptor, major, minor); } if (visible && priv->flags) { GType type = glade_widget_adaptor_get_object_type (adaptor); _GladeAdaptorChooserWidgetFlags flags = priv->flags; /* Skip adaptors according to flags */ if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_DEPRECATED && GWA_DEPRECATED (adaptor)) visible = FALSE; else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_TOPLEVEL && GWA_IS_TOPLEVEL (adaptor)) visible = FALSE; else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_WIDGET && !g_type_is_a (type, GTK_TYPE_WIDGET)) visible = FALSE; else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_TOPLEVEL && !GWA_IS_TOPLEVEL (adaptor)) visible = FALSE; } if (visible && priv->search_text) visible = chooser_match_func (data, model, priv->search_text, iter); g_clear_object (&adaptor); return visible; }
/* ----------------------------- GtkButton ------------------------------ */ GladeEditable * glade_gtk_button_create_editable (GladeWidgetAdaptor * adaptor, GladeEditorPageType type) { if (type == GLADE_PAGE_GENERAL) { GType type = glade_widget_adaptor_get_object_type (adaptor); if (g_type_is_a (type, GTK_TYPE_FONT_BUTTON)) return (GladeEditable *) glade_font_button_editor_new (); else if (g_type_is_a (type, GTK_TYPE_SCALE_BUTTON)) return (GladeEditable *) glade_scale_button_editor_new (); else return (GladeEditable *) glade_button_editor_new (); } return GWA_GET_CLASS (GTK_TYPE_CONTAINER)->create_editable (adaptor, type); }
int main (int argc, char *argv[]) { GList *adaptors, *l; gtk_test_init (&argc, &argv, NULL); glade_init (); glade_app_get (); adaptors = g_list_sort (glade_widget_adaptor_list_adaptors (), adaptor_cmp); for (l = adaptors; l; l = l->next) { GladeWidgetAdaptor *adaptor = l->data; GType adaptor_type; adaptor_type = glade_widget_adaptor_get_object_type (adaptor); if (G_TYPE_IS_INSTANTIATABLE (adaptor_type) && !G_TYPE_IS_ABSTRACT (adaptor_type) && /* FIXME: FileChooserButton leaks a GTask which will crash in the following test */ adaptor_type != GTK_TYPE_FILE_CHOOSER_BUTTON && /* FIXME: GtkRecentChooser tries to remove an unknown source id */ !g_type_is_a (adaptor_type, GTK_TYPE_RECENT_CHOOSER)) { gchar *test_path = g_strdup_printf ("/CreateWidget/%s", glade_widget_adaptor_get_name (adaptor)); g_test_add_data_func (test_path, adaptor, test_create_widget); g_free (test_path); } } g_list_free (adaptors); return g_test_run (); }
void accel_edited (GtkCellRendererAccel * accel, gchar * path_string, guint accel_key, GdkModifierType accel_mods, guint hardware_keycode, GladeEPropAccel * eprop_accel) { gboolean key_was_set; GtkTreeIter iter, parent_iter, new_iter; gchar *accel_text; GladePropertyClass *pclass; GladeWidgetAdaptor *adaptor; gboolean is_action; pclass = glade_editor_property_get_pclass (GLADE_EDITOR_PROPERTY (eprop_accel)); adaptor = glade_property_class_get_adaptor (pclass); if (!gtk_tree_model_get_iter_from_string (eprop_accel->model, &iter, path_string)) return; is_action = (glade_widget_adaptor_get_object_type (adaptor) == GTK_TYPE_ACTION || g_type_is_a (glade_widget_adaptor_get_object_type (adaptor), GTK_TYPE_ACTION)); gtk_tree_model_get (eprop_accel->model, &iter, ACCEL_COLUMN_KEY_ENTERED, &key_was_set, -1); accel_text = gtk_accelerator_name (accel_key, accel_mods); gtk_tree_store_set (GTK_TREE_STORE (eprop_accel->model), &iter, ACCEL_COLUMN_KEY_ENTERED, TRUE, ACCEL_COLUMN_STYLE, PANGO_STYLE_NORMAL, ACCEL_COLUMN_FOREGROUND, "Black", ACCEL_COLUMN_TEXT, accel_text, ACCEL_COLUMN_KEYCODE, accel_key, ACCEL_COLUMN_MODIFIERS, accel_mods, -1); g_free (accel_text); /* Append a new one if needed */ if (is_action == FALSE && key_was_set == FALSE && gtk_tree_model_iter_parent (eprop_accel->model, &parent_iter, &iter)) { gchar *signal, *real_signal; gtk_tree_model_get (eprop_accel->model, &iter, ACCEL_COLUMN_SIGNAL, &signal, ACCEL_COLUMN_REAL_SIGNAL, &real_signal, -1); /* Append a new empty slot at the end */ gtk_tree_store_insert_after (GTK_TREE_STORE (eprop_accel->model), &new_iter, &parent_iter, &iter); gtk_tree_store_set (GTK_TREE_STORE (eprop_accel->model), &new_iter, ACCEL_COLUMN_SIGNAL, signal, ACCEL_COLUMN_REAL_SIGNAL, real_signal, ACCEL_COLUMN_TEXT, _("<choose a key>"), ACCEL_COLUMN_WEIGHT, PANGO_WEIGHT_NORMAL, ACCEL_COLUMN_STYLE, PANGO_STYLE_ITALIC, ACCEL_COLUMN_FOREGROUND, "Grey", ACCEL_COLUMN_VISIBLE, TRUE, ACCEL_COLUMN_KEYCODE, 0, ACCEL_COLUMN_MODIFIERS, 0, ACCEL_COLUMN_KEY_ENTERED, FALSE, -1); g_free (signal); g_free (real_signal); } }
static void glade_eprop_accel_populate_view (GladeEditorProperty * eprop, GtkTreeView * view) { GladeEPropAccel *eprop_accel = GLADE_EPROP_ACCEL (eprop); GladeSignalClass *sclass; GladePropertyClass *pclass = glade_editor_property_get_pclass (eprop); GladeProperty *property = glade_editor_property_get_property (eprop); GladeWidgetAdaptor *adaptor = glade_property_class_get_adaptor (pclass); GtkTreeStore *model = (GtkTreeStore *) gtk_tree_view_get_model (view); GtkTreeIter iter; GladeEpropIterTab *parent_tab; GladeAccelInfo *info; GList *l, *found, *accelerators; gchar *name, *accel_text; const GList *list; accelerators = g_value_get_boxed (glade_property_inline_value (property)); /* First make parent iters... */ for (list = glade_widget_adaptor_get_signals (adaptor); list; list = list->next) { sclass = list->data; /* Special case for GtkAction accelerators */ if (glade_widget_adaptor_get_object_type (adaptor) == GTK_TYPE_ACTION || g_type_is_a (glade_widget_adaptor_get_object_type (adaptor), GTK_TYPE_ACTION)) { if (g_strcmp0 (glade_signal_class_get_type (sclass), "GtkAction") != 0 || g_strcmp0 (glade_signal_class_get_name (sclass), "activate") != 0) continue; } /* Only action signals have accelerators. */ else if ((glade_signal_class_get_flags (sclass) & G_SIGNAL_ACTION) == 0) continue; if (g_list_find_custom (eprop_accel->parent_iters, glade_signal_class_get_type (sclass), (GCompareFunc) eprop_find_iter) == NULL) { gtk_tree_store_append (model, &iter, NULL); gtk_tree_store_set (model, &iter, ACCEL_COLUMN_SIGNAL, glade_signal_class_get_type (sclass), ACCEL_COLUMN_WEIGHT, PANGO_WEIGHT_BOLD, ACCEL_COLUMN_VISIBLE, FALSE, -1); parent_tab = g_new0 (GladeEpropIterTab, 1); parent_tab->name = glade_signal_class_get_type (sclass); parent_tab->iter = gtk_tree_iter_copy (&iter); eprop_accel->parent_iters = g_list_prepend (eprop_accel->parent_iters, parent_tab); } } /* Now we populate... */ for (list = glade_widget_adaptor_get_signals (adaptor); list; list = list->next) { sclass = list->data; /* Special case for GtkAction accelerators */ if (glade_widget_adaptor_get_object_type (adaptor) == GTK_TYPE_ACTION || g_type_is_a (glade_widget_adaptor_get_object_type (adaptor), GTK_TYPE_ACTION)) { if (g_strcmp0 (glade_signal_class_get_type (sclass), "GtkAction") != 0 || g_strcmp0 (glade_signal_class_get_name (sclass), "activate") != 0) continue; } /* Only action signals have accelerators. */ else if ((glade_signal_class_get_flags (sclass) & G_SIGNAL_ACTION) == 0) continue; if ((found = g_list_find_custom (eprop_accel->parent_iters, glade_signal_class_get_type (sclass), (GCompareFunc) eprop_find_iter)) != NULL) { parent_tab = found->data; name = g_strdup_printf (" %s", glade_signal_class_get_name (sclass)); /* Populate from accelerator list */ for (l = accelerators; l; l = l->next) { info = l->data; if (g_strcmp0 (info->signal, glade_signal_class_get_name (sclass))) continue; accel_text = gtk_accelerator_name (info->key, info->modifiers); gtk_tree_store_append (model, &iter, parent_tab->iter); gtk_tree_store_set (model, &iter, ACCEL_COLUMN_SIGNAL, name, ACCEL_COLUMN_REAL_SIGNAL, glade_signal_class_get_name (sclass), ACCEL_COLUMN_TEXT, accel_text, ACCEL_COLUMN_WEIGHT, PANGO_WEIGHT_NORMAL, ACCEL_COLUMN_STYLE, PANGO_STYLE_NORMAL, ACCEL_COLUMN_FOREGROUND, "Black", ACCEL_COLUMN_VISIBLE, TRUE, ACCEL_COLUMN_KEYCODE, info->key, ACCEL_COLUMN_MODIFIERS, info->modifiers, ACCEL_COLUMN_KEY_ENTERED, TRUE, -1); g_free (accel_text); } /* Special case for GtkAction accelerators */ if ((glade_widget_adaptor_get_object_type (adaptor) == GTK_TYPE_ACTION || g_type_is_a (glade_widget_adaptor_get_object_type (adaptor), GTK_TYPE_ACTION)) && g_list_length (accelerators) > 0) continue; /* Append a new empty slot at the end */ gtk_tree_store_append (model, &iter, parent_tab->iter); gtk_tree_store_set (model, &iter, ACCEL_COLUMN_SIGNAL, name, ACCEL_COLUMN_REAL_SIGNAL, glade_signal_class_get_name (sclass), ACCEL_COLUMN_TEXT, _("<choose a key>"), ACCEL_COLUMN_WEIGHT, PANGO_WEIGHT_NORMAL, ACCEL_COLUMN_STYLE, PANGO_STYLE_ITALIC, ACCEL_COLUMN_FOREGROUND, "Grey", ACCEL_COLUMN_VISIBLE, TRUE, ACCEL_COLUMN_KEYCODE, 0, ACCEL_COLUMN_MODIFIERS, 0, ACCEL_COLUMN_KEY_ENTERED, FALSE, -1); g_free (name); } } }