static void theme_drag_data_received_cb (GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time, AppearanceData *data) { gchar **uris; if (!(info == TARGET_URI_LIST || info == TARGET_NS_URL)) return; uris = g_uri_list_extract_uris ((gchar *) gtk_selection_data_get_data (selection_data)); if (uris != NULL && uris[0] != NULL) { GFile *f = g_file_new_for_uri (uris[0]); mate_theme_install (f, GTK_WINDOW (appearance_capplet_get_widget (data, "appearance_window"))); g_object_unref (f); } g_strfreev (uris); }
int main (int argc, char **argv) { AppearanceData *data; GtkWidget *w; gchar *install_filename = NULL; gchar *start_page = NULL; gchar **wallpaper_files = NULL; GOptionContext *option_context; GOptionEntry option_entries[] = { { "install-theme", 'i', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_FILENAME, &install_filename, N_("Specify the filename of a theme to install"), N_("filename") }, { "show-page", 'p', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_STRING, &start_page, /* TRANSLATORS: don't translate the terms in brackets */ N_("Specify the name of the page to show (theme|background|fonts|interface)"), N_("page") }, { G_OPTION_REMAINING, 0, G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_FILENAME_ARRAY, &wallpaper_files, NULL, N_("[WALLPAPER...]") }, { NULL } }; option_context = g_option_context_new (NULL); g_option_context_add_main_entries (option_context, option_entries, GETTEXT_PACKAGE); /* init */ data = init_appearance_data (&argc, &argv, option_context); if (!data) return 1; /* init tabs */ themes_init (data); style_init (data); desktop_init (data, (const gchar **) wallpaper_files); g_strfreev (wallpaper_files); font_init (data); /* init support for other window managers */ support_init (data); /* prepare the main window */ w = appearance_capplet_get_widget (data, "appearance_window"); capplet_set_icon (w, "preferences-desktop-theme"); gtk_widget_show_all (w); g_signal_connect_after (w, "response", (GCallback) main_window_response, data); /* default to background page if files were given on the command line */ if (wallpaper_files && !install_filename && !start_page) start_page = g_strdup ("background"); if (start_page != NULL) { gchar *page_name; page_name = g_strconcat (start_page, "_vbox", NULL); g_free (start_page); w = appearance_capplet_get_widget (data, page_name); if (w != NULL) { GtkNotebook *nb; gint pindex; nb = GTK_NOTEBOOK (appearance_capplet_get_widget (data, "main_notebook")); pindex = gtk_notebook_page_num (nb, w); if (pindex != -1) gtk_notebook_set_current_page (nb, pindex); } g_free (page_name); } if (install_filename != NULL) { GFile *inst = g_file_new_for_commandline_arg (install_filename); g_free (install_filename); mate_theme_install (inst, GTK_WINDOW (w)); g_object_unref (inst); } g_option_context_free (option_context); /* start the mainloop */ gtk_main (); gdk_threads_leave (); /* free stuff */ g_free (data); return 0; }