create and destroy the dialog.

2002-07-10  Jody Goldberg <jody@gnome.org>

	* theme-switcher.c (show_install_dialog) : create and destroy the
	  dialog.
This commit is contained in:
Jody Goldberg 2002-07-10 21:25:27 +00:00 committed by Jody Goldberg
parent 70354bdf8f
commit bfa7fc3e6d
4 changed files with 155 additions and 313 deletions

View file

@ -1,3 +1,8 @@
2002-07-10 Jody Goldberg <jody@gnome.org>
* theme-switcher.c (show_install_dialog) : create and destroy the
dialog.
2002-07-05 jacob berkman <jacob@ximian.com>
* theme-switcher.c (transfer_done_cb): do the real work in an idle

View file

@ -12,7 +12,7 @@ Desktop_in_files = gtk-theme-selector.desktop.in
desktop_DATA = $(Desktop_in_files:.desktop.in=.desktop)
gladedir = $(GNOMECC_GLADE_DIR)
glade_DATA = theme-properties.glade
glade_DATA = theme-properties.glade theme-install.glade
INCLUDES = \
$(GNOMECC_CAPPLETS_CFLAGS) \

View file

@ -168,6 +168,57 @@
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox5">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">8</property>
<child>
<widget class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="stock">gtk-dialog-info</property>
<property name="icon_size">6</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="label" translatable="yes">New themes can also be installed by dragging them into the window.</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">True</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
@ -207,222 +258,4 @@
</child>
</widget>
<widget class="GtkDialog" id="install_dialog">
<property name="title" translatable="yes">Install new theme</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox2">
<property name="border_width">2</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area2">
<property name="border_width">5</property>
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<property name="spacing">10</property>
<child>
<widget class="GtkButton" id="helpbutton2">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-help</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="response_id">-11</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="button3">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="response_id">-6</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="button4">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="response_id">0</property>
<child>
<widget class="GtkAlignment" id="alignment1">
<property name="visible">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xscale">0</property>
<property name="yscale">0</property>
<child>
<widget class="GtkHBox" id="hbox3">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">2</property>
<child>
<widget class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="stock">gtk-ok</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="label" translatable="yes">_Install</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox6">
<property name="border_width">16</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">16</property>
<child>
<widget class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="stock">gtk-dialog-question</property>
<property name="icon_size">6</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">16</property>
<child>
<widget class="GtkLabel" id="label8">
<property name="visible">True</property>
<property name="label" translatable="yes">_Location of new theme:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">install_theme_combo_entry</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GnomeFileEntry" id="install_theme_picker">
<property name="visible">True</property>
<property name="max_saved">10</property>
<property name="directory_entry">False</property>
<property name="modal">False</property>
<child internal-child="entry">
<widget class="GtkEntry" id="install_theme_combo_entry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char" translatable="yes">*</property>
<property name="activates_default">False</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

View file

@ -248,81 +248,6 @@ sort_func (GtkTreeModel *model,
return g_utf8_collate (a_str, b_str);
}
/* Callback issued during drag movements */
static gboolean
drag_motion_cb (GtkWidget *widget, GdkDragContext *context,
gint x, gint y, guint time, gpointer data)
{
return FALSE;
}
/* Callback issued during drag leaves */
static void
drag_leave_cb (GtkWidget *widget, GdkDragContext *context,
guint time, gpointer data)
{
gtk_widget_queue_draw (widget);
}
/* Callback issued on actual drops. Attempts to load the file dropped. */
static void
drag_data_received_cb (GtkWidget *widget, GdkDragContext *context,
gint x, gint y,
GtkSelectionData *selection_data,
guint info, guint time, gpointer data)
{
GList *uris;
GladeXML *dialog = data;
gchar *filename;
if (!(info == TARGET_URI_LIST || info == TARGET_NS_URL))
return;
uris = gnome_vfs_uri_list_parse ((gchar *) selection_data->data);
filename = gnome_vfs_uri_to_string (uris->data, GNOME_VFS_URI_HIDE_NONE);
if (strncmp (filename, "http://", 7) && strncmp (filename, "ftp://", 6))
{
g_free (filename);
filename = gnome_vfs_uri_to_string (uris->data, GNOME_VFS_URI_HIDE_TOPLEVEL_METHOD);
}
gnome_file_entry_set_filename (GNOME_FILE_ENTRY (WID ("install_theme_picker")), filename);
g_free (filename);
gnome_vfs_uri_list_unref (uris);
gtk_widget_show (WID ("install_dialog"));
}
static void
show_install_dialog (GtkWidget *button, gpointer data)
{
GladeXML *dialog = data;
gtk_widget_show (WID ("install_dialog"));
}
static void
show_manage_themes (GtkWidget *button, gpointer data)
{
gchar *path, *command;
GnomeVFSURI *uri;
path = g_strdup_printf ("%s/.themes", g_get_home_dir ());
uri = gnome_vfs_uri_new (path);
if (!gnome_vfs_uri_exists (uri)) {
/* Create the directory */
gnome_vfs_make_directory_for_uri (uri, 0775);
}
gnome_vfs_uri_unref (uri);
command = g_strdup_printf ("nautilus --no-desktop %s", path);
g_free (path);
g_spawn_command_line_async (command, NULL);
g_free (command);
}
static void
transfer_cancel_cb (GtkWidget *dlg, gchar *path)
{
@ -397,8 +322,6 @@ install_dialog_response (GtkWidget *widget, int response_id, gpointer data)
if (filename == NULL)
return;
gtk_widget_hide (widget);
src_uri = gnome_vfs_uri_new (filename);
base = gnome_vfs_uri_extract_short_name (src_uri);
src = g_list_append (NULL, src_uri);
@ -422,8 +345,94 @@ install_dialog_response (GtkWidget *widget, int response_id, gpointer data)
g_signal_connect (G_OBJECT (dlg), "done",
G_CALLBACK (transfer_done_cb), path);
gtk_widget_show (dlg);
} else
gtk_widget_hide (widget);
}
}
static void
show_install_dialog (GtkWidget *button, gpointer parent)
{
GladeXML *dialog = glade_xml_new (GLADEDIR "/theme-install.glade", NULL, NULL);
GtkWidget *widget = WID ("install_dialog");
g_signal_connect (G_OBJECT (widget), "response",
G_CALLBACK (install_dialog_response), dialog);
gtk_window_set_transient_for (GTK_WINDOW (widget), parent);
gtk_window_set_position (GTK_WINDOW (widget), GTK_WIN_POS_CENTER_ON_PARENT);
while (gtk_dialog_run (GTK_DIALOG (widget)) == GTK_RESPONSE_HELP)
;
gtk_widget_destroy (widget);
g_object_unref (G_OBJECT (dialog));
}
/* Callback issued during drag movements */
static gboolean
drag_motion_cb (GtkWidget *widget, GdkDragContext *context,
gint x, gint y, guint time, gpointer data)
{
return FALSE;
}
/* Callback issued during drag leaves */
static void
drag_leave_cb (GtkWidget *widget, GdkDragContext *context,
guint time, gpointer data)
{
gtk_widget_queue_draw (widget);
}
/* Callback issued on actual drops. Attempts to load the file dropped. */
static void
drag_data_received_cb (GtkWidget *widget, GdkDragContext *context,
gint x, gint y,
GtkSelectionData *selection_data,
guint info, guint time, gpointer data)
{
GList *uris;
GladeXML *dialog = data;
gchar *filename;
if (!(info == TARGET_URI_LIST || info == TARGET_NS_URL))
return;
uris = gnome_vfs_uri_list_parse ((gchar *) selection_data->data);
filename = gnome_vfs_uri_to_string (uris->data, GNOME_VFS_URI_HIDE_NONE);
if (strncmp (filename, "http://", 7) && strncmp (filename, "ftp://", 6))
{
g_free (filename);
filename = gnome_vfs_uri_to_string (uris->data, GNOME_VFS_URI_HIDE_TOPLEVEL_METHOD);
}
gnome_file_entry_set_filename (GNOME_FILE_ENTRY (WID ("install_theme_picker")), filename);
g_free (filename);
gnome_vfs_uri_list_unref (uris);
show_install_dialog (NULL, widget);
}
static void
show_manage_themes (GtkWidget *button, gpointer data)
{
gchar *path, *command;
GnomeVFSURI *uri;
path = g_strdup_printf ("%s/.themes", g_get_home_dir ());
uri = gnome_vfs_uri_new (path);
if (!gnome_vfs_uri_exists (uri)) {
/* Create the directory */
gnome_vfs_make_directory_for_uri (uri, 0775);
}
gnome_vfs_uri_unref (uri);
command = g_strdup_printf ("nautilus --no-desktop %s", path);
g_free (path);
g_spawn_command_line_async (command, NULL);
g_free (command);
}
static void
@ -441,11 +450,12 @@ static void
setup_dialog (GladeXML *dialog)
{
GConfClient *client;
GtkWidget *widget;
GtkWidget *widget, *parent;
GtkTreeModel *model;
GtkTreeSelection *selection;
client = gconf_client_get_default ();
parent = WID ("theme_dialog");
gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (WID ("theme_treeview")),
-1, NULL,
@ -471,35 +481,29 @@ setup_dialog (GladeXML *dialog)
widget = WID ("install_button");
g_signal_connect (G_OBJECT (widget), "clicked",
G_CALLBACK (show_install_dialog), dialog);
G_CALLBACK (show_install_dialog), parent);
widget = WID ("manage_button");
g_signal_connect (G_OBJECT (widget), "clicked",
G_CALLBACK (show_manage_themes), dialog);
widget = WID ("install_dialog");
g_signal_connect (G_OBJECT (widget), "response",
G_CALLBACK (install_dialog_response), dialog);
widget = WID ("theme_dialog");
g_signal_connect (G_OBJECT (widget),
g_signal_connect (G_OBJECT (parent),
"response",
G_CALLBACK (cb_dialog_response), NULL);
gtk_drag_dest_set (widget, GTK_DEST_DEFAULT_ALL,
gtk_drag_dest_set (parent, GTK_DEST_DEFAULT_ALL,
drop_types, n_drop_types,
GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE);
g_signal_connect (G_OBJECT (widget), "drag-motion",
g_signal_connect (G_OBJECT (parent), "drag-motion",
G_CALLBACK (drag_motion_cb), NULL);
g_signal_connect (G_OBJECT (widget), "drag-leave",
g_signal_connect (G_OBJECT (parent), "drag-leave",
G_CALLBACK (drag_leave_cb), NULL);
g_signal_connect (G_OBJECT (widget), "drag-data-received",
g_signal_connect (G_OBJECT (parent), "drag-data-received",
G_CALLBACK (drag_data_received_cb),
dialog);
capplet_set_icon (widget, "gnome-ccthemes.png");
gtk_widget_show (widget);
capplet_set_icon (parent, "gnome-ccthemes.png");
gtk_widget_show (parent);
}
int