gboolean glade_gtk_menu_tool_button_add_verify (GladeWidgetAdaptor *adaptor, GtkWidget *container, GtkWidget *child, gboolean user_feedback) { if (!GTK_IS_MENU (child)) { if (user_feedback) { GladeWidgetAdaptor *menu_adaptor = glade_widget_adaptor_get_by_type (GTK_TYPE_MENU); glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, ONLY_THIS_GOES_IN_THAT_MSG, glade_widget_adaptor_get_title (menu_adaptor), glade_widget_adaptor_get_title (adaptor)); } return FALSE; } return TRUE; }
gboolean glade_gtk_listbox_add_verify (GladeWidgetAdaptor *adaptor, GtkWidget *container, GtkWidget *child, gboolean user_feedback) { if (!GTK_IS_LIST_BOX_ROW (child)) { if (user_feedback) { GladeWidgetAdaptor *tool_item_adaptor = glade_widget_adaptor_get_by_type (GTK_TYPE_LIST_BOX_ROW); glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, ONLY_THIS_GOES_IN_THAT_MSG, glade_widget_adaptor_get_title (tool_item_adaptor), glade_widget_adaptor_get_title (adaptor)); } return FALSE; } return TRUE; }
gboolean glade_gtk_tool_palette_add_verify (GladeWidgetAdaptor *adaptor, GtkWidget *container, GtkWidget *child, gboolean user_feedback) { if (!GTK_IS_TOOL_ITEM_GROUP (child)) { if (user_feedback) { GladeWidgetAdaptor *tool_item_group_adaptor = glade_widget_adaptor_get_by_type (GTK_TYPE_TOOL_ITEM_GROUP); glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, ONLY_THIS_GOES_IN_THAT_MSG, glade_widget_adaptor_get_title (tool_item_group_adaptor), glade_widget_adaptor_get_title (adaptor)); } return FALSE; } return TRUE; }
gboolean glade_gtk_text_tag_table_add_verify (GladeWidgetAdaptor *adaptor, GtkWidget *container, GtkWidget *child, gboolean user_feedback) { if (!GTK_IS_TEXT_TAG (child)) { if (user_feedback) { GladeWidgetAdaptor *tag_adaptor = glade_widget_adaptor_get_by_type (GTK_TYPE_TEXT_TAG); glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, ONLY_THIS_GOES_IN_THAT_MSG, glade_widget_adaptor_get_title (tag_adaptor), glade_widget_adaptor_get_title (adaptor)); } return FALSE; } return TRUE; }
gboolean glade_gtk_treeview_add_verify (GladeWidgetAdaptor *adaptor, GtkWidget *container, GtkWidget *child, gboolean user_feedback) { if (!GTK_IS_TREE_VIEW_COLUMN (child)) { if (user_feedback) { GladeWidgetAdaptor *cell_adaptor = glade_widget_adaptor_get_by_type (GTK_TYPE_TREE_VIEW_COLUMN); glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, ONLY_THIS_GOES_IN_THAT_MSG, glade_widget_adaptor_get_title (cell_adaptor), glade_widget_adaptor_get_title (adaptor)); } return FALSE; } return TRUE; }
gboolean glade_gtk_container_add_verify (GladeWidgetAdaptor *adaptor, GtkWidget *container, GtkWidget *child, gboolean user_feedback) { GladeWidget *gwidget = glade_widget_get_from_gobject (container); if (GTK_IS_WINDOW (child)) { if (user_feedback) glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, _("Cannot add a toplevel window to a containter.")); return FALSE; } else if (!GTK_IS_WIDGET (child) || GTK_IS_TOOL_ITEM (child) || GTK_IS_MENU_ITEM (child)) { if (user_feedback) glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, _("Widgets of type %s can only have widgets as children."), glade_widget_adaptor_get_title (adaptor)); return FALSE; } else if (GWA_USE_PLACEHOLDERS (adaptor) && glade_util_count_placeholders (gwidget) == 0) { if (user_feedback) glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, _("Widgets of type %s need placeholders to add children."), glade_widget_adaptor_get_title (adaptor)); return FALSE; } return TRUE; }
gboolean glade_gtk_menu_item_add_verify (GladeWidgetAdaptor *adaptor, GtkWidget *container, GtkWidget *child, gboolean user_feedback) { if (!GTK_IS_MENU (child)) { if (user_feedback) { GladeWidgetAdaptor *menu_adaptor = glade_widget_adaptor_get_by_type (GTK_TYPE_MENU); glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, ONLY_THIS_GOES_IN_THAT_MSG, glade_widget_adaptor_get_title (menu_adaptor), glade_widget_adaptor_get_title (adaptor)); } return FALSE; } else if (GTK_IS_SEPARATOR_MENU_ITEM (container)) { if (user_feedback) { glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, _("An object of type %s cannot have any children."), glade_widget_adaptor_get_title (adaptor)); } return FALSE; } return TRUE; }
static void verify_clicked (GtkWidget *button, GladeProjectProperties *properties) { GladeProjectPropertiesPrivate *priv = properties->priv; if (glade_project_verify (priv->project, FALSE, GLADE_VERIFY_VERSIONS | GLADE_VERIFY_DEPRECATIONS | GLADE_VERIFY_UNRECOGNIZED)) { gchar *name = glade_project_get_name (priv->project); glade_util_ui_message (glade_app_get_window (), GLADE_UI_INFO, NULL, _("Project %s has no deprecated widgets " "or version mismatches."), name); g_free (name); } }
static void value_icon_activate (GtkCellRendererToggle *cell_renderer, gchar *path, GladeEPropAttrs *eprop_attrs) { GtkWidget *dialog; GtkTreeIter iter; PangoAttrType type; AttrEditType edit_type; GdkRGBA color = {0,}; gchar *text = NULL, *new_text; /* Find type etc */ if (!gtk_tree_model_get_iter_from_string (eprop_attrs->model, &iter, path)) return; gtk_tree_model_get (eprop_attrs->model, &iter, COLUMN_TEXT, &text, COLUMN_TYPE, &type, COLUMN_EDIT_TYPE, &edit_type, -1); /* Launch dialog etc. */ switch (edit_type) { case EDIT_COLOR: dialog = gtk_color_chooser_dialog_new (_("Select a color"), GTK_WINDOW (glade_app_get_window ())); /* Get response etc... */ if (text && gdk_rgba_parse (&color, text)) gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (dialog), &color); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &color); /* Use GdkColor string format */ if (((guint8)(color.red * 0xFF)) * 0x101 == (guint16)(color.red * 0xFFFF) && ((guint8)(color.green * 0xFF)) * 0x101 == (guint16)(color.green * 0xFFFF) && ((guint8)(color.blue * 0xFF)) * 0x101 == (guint16)(color.blue * 0xFFFF)) new_text = g_strdup_printf ("#%02X%02X%02X", (guint8)(color.red * 0xFF), (guint8)(color.green * 0xFF), (guint8)(color.blue * 0xFF)); else new_text = g_strdup_printf ("#%04X%04X%04X", (guint16)(color.red * 0xFFFF), (guint16)(color.green * 0xFFFF), (guint16)(color.blue * 0xFFFF)); gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, COLUMN_TEXT, new_text, COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, COLUMN_TEXT_FG, "Black", -1); g_free (new_text); gtk_widget_destroy (dialog); break; case EDIT_FONT: dialog = gtk_font_chooser_dialog_new (_("Select a font"), GTK_WINDOW (glade_app_get_window ())); /* Get response etc... */ if (text) gtk_font_chooser_set_font (GTK_FONT_CHOOSER (dialog), text); gtk_dialog_run (GTK_DIALOG (dialog)); new_text = gtk_font_chooser_get_font (GTK_FONT_CHOOSER (dialog)); gtk_list_store_set (GTK_LIST_STORE (eprop_attrs->model), &iter, COLUMN_TEXT, new_text, COLUMN_NAME_WEIGHT, PANGO_WEIGHT_BOLD, COLUMN_TEXT_STYLE, PANGO_STYLE_NORMAL, COLUMN_TEXT_FG, "Black", -1); g_free (new_text); gtk_widget_destroy (dialog); break; default: break; } sync_object (eprop_attrs, FALSE); g_free (text); }
/** * glade_app_config_save * * Saves the GKeyFile to "g_get_user_config_dir()/GLADE_CONFIG_FILENAME" * * Return 0 on success. */ gint glade_app_config_save () { GIOChannel *channel; GIOStatus status; gchar *data = NULL, *filename; const gchar *config_dir = g_get_user_config_dir (); GError *error = NULL; gsize size, written, bytes_written = 0; static gboolean error_shown = FALSE; GladeApp *app; /* If we had any errors; wait untill next session to retry. */ if (error_shown) return -1; app = glade_app_get (); /* Just in case... try to create the config directory */ if (g_file_test (config_dir, G_FILE_TEST_IS_DIR) == FALSE) { if (g_file_test (config_dir, G_FILE_TEST_EXISTS)) { /* Config dir exists but is not a directory */ glade_util_ui_message (glade_app_get_window (), GLADE_UI_ERROR, NULL, _("Trying to save private data to %s directory " "but it is a regular file.\n" "No private data will be saved in this session"), config_dir); error_shown = TRUE; return -1; } else if (g_mkdir (config_dir, S_IRWXU) != 0) { /* Doesnt exist; failed to create */ glade_util_ui_message (glade_app_get_window (), GLADE_UI_ERROR, NULL, _("Failed to create directory %s to save private data.\n" "No private data will be saved in this session"), config_dir); error_shown = TRUE; return -1; } } filename = g_build_filename (config_dir, GLADE_CONFIG_FILENAME, NULL); if ((channel = g_io_channel_new_file (filename, "w", &error)) != NULL) { if ((data = g_key_file_to_data (app->priv->config, &size, &error)) != NULL) { /* Implement loop here */ while ((status = g_io_channel_write_chars (channel, data + bytes_written, /* Offset of write */ size - bytes_written, /* Size left to write */ &written, &error)) != G_IO_STATUS_ERROR && (bytes_written + written) < size) bytes_written += written; if (status == G_IO_STATUS_ERROR) { glade_util_ui_message (glade_app_get_window (), GLADE_UI_ERROR, NULL, _("Error writing private data to %s (%s).\n" "No private data will be saved in this session"), filename, error->message); error_shown = TRUE; } g_free (data); } else { glade_util_ui_message (glade_app_get_window (), GLADE_UI_ERROR, NULL, _("Error serializing configuration data to save (%s).\n" "No private data will be saved in this session"), error->message); error_shown = TRUE; } g_io_channel_shutdown (channel, TRUE, NULL); g_io_channel_unref (channel); } else { glade_util_ui_message (glade_app_get_window (), GLADE_UI_ERROR, NULL, _("Error opening %s to write private data (%s).\n" "No private data will be saved in this session"), filename, error->message); error_shown = TRUE; } g_free (filename); if (error) { g_error_free (error); return -1; } return 0; }