gnome-control-center/capplets/file-types/file-types-capplet.c
Christian Persch 43d40d7a0a Don't define directories in configure. Remove some obsolete defines, and
2007-02-02  Christian Persch  <chpe@svn.gnome.org>

	* Makefile.am:
	* capplets/about-me/Makefile.am:
	* capplets/about-me/gnome-about-me-password.c: (passdlg_init):
	* capplets/about-me/gnome-about-me.c: (about_me_setup_dialog):
	* capplets/accessibility/at-properties/Makefile.am:
	* capplets/accessibility/keyboard/Makefile.am:
	* capplets/accessibility/keyboard/accessibility-keyboard.c:
	(setup_accessX_dialog):
	* capplets/background/Makefile.am:
	* capplets/background/gnome-wp-capplet.c: (gnome_wp_create_dialog):
	* capplets/common/Makefile.am:
	* capplets/common/capplet-util.c: (capplet_set_icon):
	* capplets/default-applications/Makefile.am:
	* capplets/display/Makefile.am:
	* capplets/file-types/Makefile.am:
	* capplets/file-types/file-types-capplet.c: (create_dialog):
	* capplets/file-types/mime-category-edit-dialog.c:
	(mime_category_edit_dialog_init):
	* capplets/file-types/mime-edit-dialog.c: (mime_edit_dialog_init):
	* capplets/file-types/service-edit-dialog.c:
	(service_edit_dialog_init):
	* capplets/font/Makefile.am:
	* capplets/keybindings/Makefile.am:
	* capplets/keybindings/gnome-keybinding-properties.c:
	(create_dialog):
	* capplets/keyboard/Makefile.am:
	* capplets/keyboard/gnome-keyboard-properties-xkblt.c:
	(xkb_layout_choose):
	* capplets/keyboard/gnome-keyboard-properties-xkbmc.c:
	(choose_model):
	* capplets/keyboard/gnome-keyboard-properties.c: (create_dialog):
	* capplets/localization/Makefile.am:
	* capplets/localization/gnome-localization-properties.c:
	(create_dialog):
	* capplets/mime-type/Makefile.am:
	* capplets/mouse/Makefile.am:
	* capplets/mouse/gnome-mouse-properties.c: (create_dialog):
	* capplets/network/Makefile.am:
	* capplets/network/gnome-network-preferences.c:
	(cb_http_details_button_clicked), (main):
	* capplets/rollback/Makefile.am:
	* capplets/sound/Makefile.am:
	* capplets/sound/sound-properties-capplet.c: (create_dialog),
	(device_test_button_clicked):
	* capplets/theme-switcher/Makefile.am:
	* capplets/ui-properties/Makefile.am:
	* capplets/ui-properties/gnome-ui-properties.c: (create_dialog):
	* capplets/url-properties/Makefile.am:
	* capplets/windows/Makefile.am:
	* capplets/wm-properties/wm-desktops/Makefile.am:
	* configure.in:
	* gnome-settings-daemon/Makefile.am:
	* gnome-settings-daemon/actions/Makefile.am:
	* gnome-settings-daemon/gnome-settings-xmodmap.c:
	(gnome_settings_modmap_dialog_call):
	* gnome-settings-daemon/gnome-settings-xrdb.c:
	* gnome-settings-daemon/gsd-media-keys-window.c: (action_changed),
	(gsd_media_keys_window_init):
	* gnome-settings-daemon/xrdb/Makefile.am:
	* typing-break/Makefile.am:
	* vfs-methods/themus/Makefile.am: Don't define directories in
	configure. Remove some obsolete defines, and use the standard
	installation paths. Bug #395383.

svn path=/trunk/; revision=7226
2007-02-02 18:12:40 +00:00

323 lines
9.3 KiB
C

/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* file-types-capplet.h
*
* Copyright (C) 1998 Redhat Software Inc.
* Copyright (C) 2000 Free Software Foundaton
* Copyright (C) 2000 Eazel, Inc.
* Copyright (C) 2002 Ximian, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Authors: Jonathan Blandford <jrb@redhat.com>,
* Gene Z. Ragan <gzr@eazel.com>,
* Bradford Hovinen <hovinen@ximian.com>
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <gnome.h>
#include <glade/glade.h>
#include <gconf/gconf-client.h>
#include "capplet-util.h"
#include "mime-types-model.h"
#include "mime-edit-dialog.h"
#include "mime-category-edit-dialog.h"
#include "mime-type-info.h"
#include "service-edit-dialog.h"
#include "service-info.h"
static void
add_mime_cb (GtkButton *button, GladeXML *dialog)
{
GtkTreeView *treeview;
GtkTreeModel *model;
GObject *add_dialog;
treeview = GTK_TREE_VIEW (WID ("mime_types_tree"));
model = gtk_tree_view_get_model (treeview);
add_dialog = mime_add_dialog_new (model,
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (button))),
NULL);
}
static void
add_service_cb (GtkButton *button, GladeXML *dialog)
{
GtkTreeView *treeview;
GtkTreeModel *model;
treeview = GTK_TREE_VIEW (WID ("mime_types_tree"));
model = gtk_tree_view_get_model (treeview);
service_add_dialog_new (model);
}
static GObject *
launch_edit_dialog (GtkTreeModel *model, GtkTreeIter *iter)
{
ModelEntry *entry;
entry = MODEL_ENTRY_FROM_ITER (iter);
switch (entry->type) {
case MODEL_ENTRY_MIME_TYPE:
return mime_edit_dialog_new (model, MIME_TYPE_INFO (entry));
case MODEL_ENTRY_SERVICE:
return service_edit_dialog_new (model, SERVICE_INFO (entry));
#if 0
case MODEL_ENTRY_CATEGORY:
return mime_category_edit_dialog_new (model, MIME_CATEGORY_INFO (entry));
#endif
default:
return NULL;
}
}
static void
edit_cb (GtkButton *button, GladeXML *dialog)
{
GtkTreeView *treeview;
GtkTreeModel *model;
GtkTreeSelection *selection;
GtkTreeIter iter;
treeview = GTK_TREE_VIEW (WID ("mime_types_tree"));
selection = gtk_tree_view_get_selection (treeview);
gtk_tree_selection_get_selected (selection, &model, &iter);
launch_edit_dialog (model, &iter);
}
static void
row_activated_cb (GtkTreeView *view, GtkTreePath *path, GtkTreeViewColumn *column, GladeXML *dialog)
{
GtkTreeModel *model;
GtkTreeIter iter;
model = gtk_tree_view_get_model (view);
gtk_tree_model_get_iter (model, &iter, path);
launch_edit_dialog (model, &iter);
}
static void
selection_count_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gint *count)
{
if (MODEL_ENTRY_FROM_ITER (iter)->type != MODEL_ENTRY_SERVICES_CATEGORY &&
MODEL_ENTRY_FROM_ITER (iter)->type != MODEL_ENTRY_CATEGORY)
(*count)++;
}
static void
selection_changed_cb (GtkTreeSelection *selection, GladeXML *dialog)
{
gint count = 0;
gtk_tree_selection_selected_foreach (selection, (GtkTreeSelectionForeachFunc) selection_count_cb, &count);
gtk_widget_set_sensitive (WID ("edit_button"), count != 0);
gtk_widget_set_sensitive (WID ("remove_button"), count != 0);
}
static void
remove_cb (GtkButton *button, GladeXML *dialog)
{
GtkTreeView *treeview;
GtkTreeModel *model;
GtkTreeSelection *selection;
GtkTreeIter iter;
ModelEntry *entry;
GtkWidget *warning_dialog;
gint response;
warning_dialog = gtk_message_dialog_new (
GTK_WINDOW (WID("main_dialog")),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_OK_CANCEL,
_("Are you sure you want to permanently delete this entry?"));
gtk_dialog_set_default_response (GTK_DIALOG (warning_dialog), GTK_RESPONSE_CANCEL);
gtk_window_set_resizable (GTK_WINDOW (warning_dialog), FALSE);
response = gtk_dialog_run (GTK_DIALOG (warning_dialog));
if (response == GTK_RESPONSE_OK) {
treeview = GTK_TREE_VIEW (WID ("mime_types_tree"));
selection = gtk_tree_view_get_selection (treeview);
gtk_tree_selection_get_selected (selection, &model, &iter);
entry = MODEL_ENTRY_FROM_ITER (&iter);
model_entry_remove_child (entry->parent, entry, model);
model_entry_delete (entry);
selection_changed_cb (selection, dialog);
}
gtk_widget_destroy (warning_dialog);
}
static void
cb_file_type_dialog_response (GtkDialog *dialog, gint response_id)
{
if (response_id == GTK_RESPONSE_HELP)
capplet_help (GTK_WINDOW (dialog),
"user-guide.xml",
"goscustdoc-7");
else
gtk_main_quit ();
}
static GladeXML *
create_dialog (void)
{
GladeXML *dialog;
GtkTreeModel *model;
GtkWidget *treeview;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkTreeSelection *selection;
dialog = glade_xml_new (GNOMECC_GLADE_DIR "/file-types-properties.glade", "main_dialog", NULL);
model = GTK_TREE_MODEL (mime_types_model_new (FALSE));
treeview = WID ("mime_types_tree");
gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), model);
/* Icon/description column */
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_resizable (column, TRUE);
gtk_tree_view_column_set_title (column, _("Description"));
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_start (column, renderer, FALSE);
gtk_tree_view_column_set_attributes
(column, renderer, "pixbuf", MODEL_COLUMN_ICON, NULL);
/* Description column */
renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column, renderer, FALSE);
gtk_tree_view_column_set_attributes
(column, renderer, "text", MODEL_COLUMN_DESCRIPTION, NULL);
g_object_set (G_OBJECT (treeview),
"search_column", MODEL_COLUMN_DESCRIPTION,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
gtk_tree_view_set_expander_column (GTK_TREE_VIEW (treeview), column);
/* Extensions column */
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_resizable (column, TRUE);
gtk_tree_view_column_set_title (column, _("Extensions"));
renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column, renderer, TRUE);
gtk_tree_view_column_set_attributes
(column, renderer, "text", MODEL_COLUMN_FILE_EXT, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
gtk_widget_set_sensitive (WID ("edit_button"), FALSE);
gtk_widget_set_sensitive (WID ("remove_button"), FALSE);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
g_signal_connect (G_OBJECT (WID ("add_mime_button")), "clicked", (GCallback) add_mime_cb, dialog);
g_signal_connect (G_OBJECT (WID ("add_service_button")), "clicked", (GCallback) add_service_cb, dialog);
g_signal_connect (G_OBJECT (WID ("edit_button")), "clicked", (GCallback) edit_cb, dialog);
g_signal_connect (G_OBJECT (WID ("remove_button")), "clicked", (GCallback) remove_cb, dialog);
g_signal_connect (G_OBJECT (selection), "changed", (GCallback) selection_changed_cb, dialog);
g_signal_connect (G_OBJECT (WID ("mime_types_tree")), "row-activated", (GCallback) row_activated_cb, dialog);
g_signal_connect (G_OBJECT (WID ("main_dialog")),
"response",
G_CALLBACK (cb_file_type_dialog_response), NULL);
return dialog;
}
static void
dialog_done_cb (MimeEditDialog *dialog, gboolean done, MimeTypeInfo *info)
{
gtk_main_quit ();
}
int
main (int argc, char **argv)
{
char const *mime_type = NULL;
char const *file_name = NULL;
GtkTreeModel *model;
GnomeProgram *program;
poptContext popt_ctxt = 0;
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
program = gnome_program_init ("gnome-file-types-properties",
VERSION, LIBGNOMEUI_MODULE,
argc, argv,
NULL);
g_object_get (G_OBJECT (program),
GNOME_PARAM_POPT_CONTEXT, &popt_ctxt,
NULL);
if (popt_ctxt) {
const gchar **startup_files = poptGetArgs (popt_ctxt);
if (startup_files != NULL) {
mime_type = startup_files [0];
if (mime_type != NULL)
file_name = startup_files [1];
}
}
if (mime_type == NULL) {
GladeXML *dialog = create_dialog ();
GtkWidget *mime_dialog = WID ("main_dialog");
gtk_dialog_set_default_response (GTK_DIALOG (mime_dialog),
GTK_RESPONSE_CLOSE);
capplet_set_icon (mime_dialog, "gnome-ccmime.png");
gtk_widget_show_all (mime_dialog);
} else {
MimeTypeInfo *info = NULL;
GObject *mime_dialog;
model = GTK_TREE_MODEL (mime_types_model_new (FALSE));
if (strcmp (GNOME_VFS_MIME_TYPE_UNKNOWN, mime_type)) {
info = mime_type_info_new (mime_type, model);
mime_dialog = mime_edit_dialog_new (model, info);
} else
mime_dialog = mime_add_dialog_new (model, NULL, file_name);
g_signal_connect (mime_dialog,
"done", (GCallback) dialog_done_cb, info);
}
gtk_main ();
return 0;
}