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:
parent
70354bdf8f
commit
bfa7fc3e6d
4 changed files with 155 additions and 313 deletions
|
@ -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
|
||||
|
|
|
@ -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) \
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue