Beginnings of the mime-type capplet.
Also, fixed the stupid bug that prevented people from debugging capplets in gdb.
This commit is contained in:
parent
70f0623863
commit
fdb99b1ad1
10 changed files with 487 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
|||
1999-03-10 Jonathan Blandford <jrb@redhat.com>
|
||||
|
||||
* capplets/Makefile.am (always_built_SUBDIRS): mime-type capplet.
|
||||
New capplet added.
|
||||
|
||||
1999-03-10 Chris Lahey <clahey@umich.edu>
|
||||
|
||||
* capplets/gnome-edit-properties/gnome-edit-properties.c: Updated
|
||||
|
|
|
@ -3,6 +3,7 @@ always_built_SUBDIRS = desktop-links mouse-properties \
|
|||
theme-switcher sound-properties bell-properties \
|
||||
ui-properties url-properties gnome-edit-properties \
|
||||
session-properties wm-properties keyboard-properties
|
||||
# mime-type
|
||||
|
||||
SUBDIRS = $(always_built_SUBDIRS)
|
||||
|
||||
|
|
23
capplets/mime-type/Makefile.am
Normal file
23
capplets/mime-type/Makefile.am
Normal file
|
@ -0,0 +1,23 @@
|
|||
INCLUDES = -I. -I$(srcdir) \
|
||||
-I$(top_srcdir)/intl -I$(top_builddir)/intl \
|
||||
-I$(srcdir)/../../control-center \
|
||||
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
|
||||
-I$(includedir) $(GNOME_INCLUDEDIR)
|
||||
|
||||
bin_PROGRAMS = mime-type-capplet
|
||||
|
||||
mime_type_capplet_SOURCES = mime-type-capplet.c mime-data.c edit-window.c
|
||||
|
||||
mime_type_capplet_LDADD = ../../control-center/libcapplet.la \
|
||||
$(GNOME_LIBDIR) $(ORB_LIBS) \
|
||||
$(GNOMEUI_LIBS) $(INTLLIBS) -lgnorba
|
||||
|
||||
EXTRA_DIST = \
|
||||
mime-type.desktop
|
||||
|
||||
|
||||
sysdir = $(datadir)/control-center
|
||||
sys_DATA = mime-type.desktop
|
||||
|
||||
install-data-local:
|
||||
$(INSTALL_DATA) $(srcdir)/mime-type.desktop $(datadir)/gnome/apps/Settings/mime-type.desktop
|
23
capplets/mime-type/edit-window.c
Normal file
23
capplets/mime-type/edit-window.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
#include "edit-window.h"
|
||||
typedef struct {
|
||||
GtkWidget *window;
|
||||
} edit_window;
|
||||
static edit_window *main_win = NULL;
|
||||
|
||||
static void
|
||||
initialize_main_win ()
|
||||
{
|
||||
main_win = g_new (edit_window, 1);
|
||||
main_win->window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
launch_edit_window (MimeInfo *mi)
|
||||
{
|
||||
if (main_win == NULL)
|
||||
initialize_main_win ();
|
||||
gtk_widget_show_all (main_win->window);
|
||||
}
|
||||
|
12
capplets/mime-type/edit-window.h
Normal file
12
capplets/mime-type/edit-window.h
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
|
||||
/* Copyright (C) 1998 Redhat Software Inc.
|
||||
* Authors: Jonathan Blandford <jrb@redhat.com>
|
||||
*/
|
||||
#ifndef _EDIT_WINDOW_H_
|
||||
#define _EDIT_WINDOW_H_
|
||||
|
||||
#include "mime-data.h"
|
||||
|
||||
void launch_edit_window (MimeInfo *mi);
|
||||
|
||||
#endif
|
283
capplets/mime-type/mime-data.c
Normal file
283
capplets/mime-type/mime-data.c
Normal file
|
@ -0,0 +1,283 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
|
||||
/* Copyright (C) 1998 Redhat Software Inc.
|
||||
* Authors: Jonathan Blandford <jrb@redhat.com>
|
||||
*/
|
||||
#include <config.h>
|
||||
#include "capplet-widget.h"
|
||||
#include "gnome.h"
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#include <regex.h>
|
||||
#include <ctype.h>
|
||||
#include "mime-data.h"
|
||||
/* Prototypes */
|
||||
static void mime_fill_from_file (const char *filename);
|
||||
static void mime_load_from_dir (const char *mime_info_dir);
|
||||
static void add_to_key (char *mime_type, char *def);
|
||||
static char *get_priority (char *def, int *priority);
|
||||
|
||||
|
||||
/* Global variables */
|
||||
static char *current_lang;
|
||||
/* Our original purpose for having
|
||||
* the hash table seems to have dissappeared.
|
||||
* Oh well... must-fix-later */
|
||||
static GHashTable *mime_types = NULL;
|
||||
|
||||
/* Initialization functions */
|
||||
static char *
|
||||
get_priority (char *def, int *priority)
|
||||
{
|
||||
*priority = 0;
|
||||
|
||||
if (*def == ','){
|
||||
def++;
|
||||
if (*def == '1'){
|
||||
*priority = 0;
|
||||
def++;
|
||||
} else if (*def == '2'){
|
||||
*priority = 1;
|
||||
def++;
|
||||
}
|
||||
}
|
||||
|
||||
while (*def && *def == ':')
|
||||
def++;
|
||||
|
||||
return def;
|
||||
}
|
||||
static void
|
||||
add_to_key (char *mime_type, char *def)
|
||||
{
|
||||
int priority = 1;
|
||||
char *s, *p, *ext;
|
||||
int used;
|
||||
MimeInfo *info;
|
||||
|
||||
info = g_hash_table_lookup (mime_types, (const void *) mime_type);
|
||||
if (info == NULL) {
|
||||
info = g_malloc (sizeof (MimeInfo));
|
||||
info->mime_type = g_strdup (mime_type);
|
||||
info->regex[0] = NULL;
|
||||
info->regex[1] = NULL;
|
||||
info->ext[0] = NULL;
|
||||
info->ext[1] = NULL;
|
||||
info->keys = gnome_mime_get_keys (mime_type);
|
||||
g_hash_table_insert (mime_types, mime_type, info);
|
||||
}
|
||||
if (strncmp (def, "ext", 3) == 0){
|
||||
char *tokp;
|
||||
|
||||
def += 3;
|
||||
def = get_priority (def, &priority);
|
||||
s = p = g_strdup (def);
|
||||
|
||||
used = 0;
|
||||
|
||||
while ((ext = strtok_r (s, " \t\n\r,", &tokp)) != NULL){
|
||||
info->ext[priority] = g_list_prepend (info->ext[priority], ext);
|
||||
g_print ("inserting:%s:\n", ext);
|
||||
used = 1;
|
||||
s = NULL;
|
||||
}
|
||||
if (!used)
|
||||
g_free (p);
|
||||
}
|
||||
|
||||
if (strncmp (def, "regex", 5) == 0){
|
||||
regex_t *regex;
|
||||
|
||||
regex = g_new (regex_t, 1);
|
||||
def += 5;
|
||||
def = get_priority (def, &priority);
|
||||
|
||||
while (*def && isspace (*def))
|
||||
def++;
|
||||
|
||||
if (!*def)
|
||||
return;
|
||||
if (regcomp (regex, def, REG_EXTENDED | REG_NOSUB))
|
||||
g_free (regex);
|
||||
else
|
||||
info->regex[priority] = regex;
|
||||
}
|
||||
}
|
||||
static void
|
||||
mime_fill_from_file (const char *filename)
|
||||
{
|
||||
FILE *f;
|
||||
char buf [1024];
|
||||
char *current_key;
|
||||
gboolean used;
|
||||
|
||||
g_assert (filename != NULL);
|
||||
|
||||
f = fopen (filename, "r");
|
||||
if (!f)
|
||||
return;
|
||||
|
||||
current_key = NULL;
|
||||
used = FALSE;
|
||||
while (fgets (buf, sizeof (buf), f)){
|
||||
char *p;
|
||||
|
||||
if (buf [0] == '#')
|
||||
continue;
|
||||
|
||||
/* Trim trailing spaces */
|
||||
for (p = buf + strlen (buf) - 1; p >= buf; p--){
|
||||
if (isspace (*p) || *p == '\n')
|
||||
*p = 0;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
if (!buf [0])
|
||||
continue;
|
||||
|
||||
if (buf [0] == '\t' || buf [0] == ' '){
|
||||
if (current_key){
|
||||
char *p = buf;
|
||||
|
||||
while (*p && isspace (*p))
|
||||
p++;
|
||||
|
||||
if (*p == 0)
|
||||
continue;
|
||||
|
||||
add_to_key (current_key, p);
|
||||
used = TRUE;
|
||||
}
|
||||
} else {
|
||||
if (!used && current_key)
|
||||
g_free (current_key);
|
||||
current_key = g_strdup (buf);
|
||||
if (current_key [strlen (current_key)-1] == ':')
|
||||
current_key [strlen (current_key)-1] = 0;
|
||||
|
||||
used = FALSE;
|
||||
}
|
||||
}
|
||||
fclose (f);
|
||||
}
|
||||
|
||||
static void
|
||||
mime_load_from_dir (const char *mime_info_dir)
|
||||
{
|
||||
DIR *dir;
|
||||
struct dirent *dent;
|
||||
const int extlen = sizeof (".mime") - 1;
|
||||
|
||||
dir = opendir (mime_info_dir);
|
||||
if (!dir)
|
||||
return;
|
||||
|
||||
while ((dent = readdir (dir)) != NULL){
|
||||
char *filename;
|
||||
|
||||
int len = strlen (dent->d_name);
|
||||
|
||||
if (len <= extlen)
|
||||
continue;
|
||||
|
||||
if (strcmp (dent->d_name + len - extlen, ".mime"))
|
||||
continue;
|
||||
|
||||
filename = g_concat_dir_and_file (mime_info_dir, dent->d_name);
|
||||
mime_fill_from_file (filename);
|
||||
g_free (filename);
|
||||
}
|
||||
closedir (dir);
|
||||
}
|
||||
static void
|
||||
add_mime_vals_to_clist (gchar *mime_type, gpointer mi, gpointer clist)
|
||||
{
|
||||
static gchar *text[2];
|
||||
GList *list;
|
||||
GString *extension;
|
||||
gint row;
|
||||
|
||||
extension = g_string_new ("");
|
||||
|
||||
for (list = ((MimeInfo *) mi)->ext[0];list; list=list->next) {
|
||||
g_string_append (extension, (gchar *) list->data);
|
||||
if (list->next != NULL)
|
||||
g_string_append (extension, ", ");
|
||||
else if (((MimeInfo *) mi)->ext[1] != NULL)
|
||||
g_string_append (extension, ", ");
|
||||
}
|
||||
for (list = ((MimeInfo *) mi)->ext[1];list; list=list->next) {
|
||||
g_string_append (extension, (gchar *) list->data);
|
||||
if (list->next)
|
||||
g_string_append (extension, ", ");
|
||||
}
|
||||
text[0] = ((MimeInfo *) mi)->mime_type;
|
||||
text[1] = extension->str;
|
||||
row = gtk_clist_insert (GTK_CLIST (clist), 1, text);
|
||||
gtk_clist_set_row_data (GTK_CLIST (clist), row, mi);
|
||||
g_string_free (extension, TRUE);
|
||||
}
|
||||
static void
|
||||
selected_row_callback (GtkWidget *widget, gint row, gint column, GdkEvent *event, gpointer data)
|
||||
{
|
||||
MimeInfo *mi;
|
||||
if (column < 0)
|
||||
return;
|
||||
|
||||
mi = (MimeInfo *) gtk_clist_get_row_data (GTK_CLIST (widget),row);
|
||||
|
||||
if (event && event->type == GDK_2BUTTON_PRESS)
|
||||
launch_edit_window (mi);
|
||||
}
|
||||
|
||||
/* public functions */
|
||||
void
|
||||
edit_clicked ()
|
||||
{
|
||||
MimeInfo *mi;
|
||||
|
||||
/*mi = (MimeInfo *) gtk_clist_get_row_data (GTK_CLIST (widget), row);*/
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
get_mime_clist ()
|
||||
{
|
||||
GtkWidget *clist;
|
||||
GtkWidget *retval;
|
||||
gchar *titles[2];
|
||||
|
||||
titles[0] = "Mime Type";
|
||||
titles[1] = "Extension";
|
||||
retval = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (retval),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
clist = gtk_clist_new_with_titles (2, titles);
|
||||
gtk_signal_connect (GTK_OBJECT (clist),
|
||||
"select_row",
|
||||
GTK_SIGNAL_FUNC (selected_row_callback),
|
||||
NULL);
|
||||
gtk_clist_set_auto_sort (GTK_CLIST (clist), TRUE);
|
||||
g_hash_table_foreach (mime_types, (GHFunc) add_mime_vals_to_clist, clist);
|
||||
gtk_clist_columns_autosize (GTK_CLIST (clist));
|
||||
|
||||
gtk_container_add (GTK_CONTAINER (retval), clist);
|
||||
return retval;
|
||||
}
|
||||
void
|
||||
init_mime_type ()
|
||||
{
|
||||
char *mime_info_dir;
|
||||
|
||||
mime_types = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
mime_info_dir = gnome_unconditional_datadir_file ("mime-info");
|
||||
mime_load_from_dir (mime_info_dir);
|
||||
g_free (mime_info_dir);
|
||||
|
||||
mime_info_dir = g_concat_dir_and_file (gnome_util_user_home (), ".gnome/mime-info");
|
||||
mime_load_from_dir (mime_info_dir);
|
||||
g_free (mime_info_dir);
|
||||
|
||||
}
|
22
capplets/mime-type/mime-data.h
Normal file
22
capplets/mime-type/mime-data.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
|
||||
/* Copyright (C) 1998 Redhat Software Inc.
|
||||
* Authors: Jonathan Blandford <jrb@redhat.com>
|
||||
*/
|
||||
#ifndef _MIME_DATA_H_
|
||||
#define _MIME_DATA_H_
|
||||
#include "gnome.h"
|
||||
#include <regex.h>
|
||||
/* Typedefs */
|
||||
typedef struct {
|
||||
char *mime_type;
|
||||
regex_t *regex[2];
|
||||
GList *ext[2];
|
||||
char *file_name;
|
||||
GList *keys;
|
||||
} MimeInfo;
|
||||
|
||||
GtkWidget *get_mime_clist ();
|
||||
void init_mime_type ();
|
||||
|
||||
|
||||
#endif
|
101
capplets/mime-type/mime-type-capplet.c
Normal file
101
capplets/mime-type/mime-type-capplet.c
Normal file
|
@ -0,0 +1,101 @@
|
|||
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- */
|
||||
/* Copyright (C) 1998 Redhat Software Inc.
|
||||
* Authors: Jonathan Blandford <jrb@redhat.com>
|
||||
*/
|
||||
#include <config.h>
|
||||
#include "capplet-widget.h"
|
||||
#include "gnome.h"
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
#include <regex.h>
|
||||
#include <ctype.h>
|
||||
#include "mime-data.h"
|
||||
|
||||
/* Prototypes */
|
||||
static void try_callback ();
|
||||
static void revert_callback ();
|
||||
static void ok_callback ();
|
||||
static void cancel_callback ();
|
||||
static void help_callback ();
|
||||
|
||||
static void
|
||||
try_callback ()
|
||||
{
|
||||
|
||||
}
|
||||
static void
|
||||
revert_callback ()
|
||||
{
|
||||
|
||||
}
|
||||
static void
|
||||
ok_callback ()
|
||||
{
|
||||
|
||||
}
|
||||
static void
|
||||
cancel_callback ()
|
||||
{
|
||||
|
||||
}
|
||||
static void
|
||||
help_callback ()
|
||||
{
|
||||
|
||||
}
|
||||
static void
|
||||
init_mime_capplet ()
|
||||
{
|
||||
GtkWidget *capplet;
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *button;
|
||||
|
||||
capplet = capplet_widget_new ();
|
||||
vbox = gtk_vbox_new (FALSE, GNOME_PAD_SMALL);
|
||||
gtk_container_add (GTK_CONTAINER (capplet), vbox);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), get_mime_clist (), TRUE, TRUE, 0);
|
||||
hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||
button = gtk_button_new_with_label (_("Remove"));
|
||||
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||
button = gtk_button_new_with_label (_("Add"));
|
||||
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||
button = gtk_button_new_with_label (_("Edit"));
|
||||
gtk_box_pack_end (GTK_BOX (hbox), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show_all (capplet);
|
||||
gtk_signal_connect(GTK_OBJECT(capplet), "try",
|
||||
GTK_SIGNAL_FUNC(try_callback), NULL);
|
||||
gtk_signal_connect(GTK_OBJECT(capplet), "revert",
|
||||
GTK_SIGNAL_FUNC(revert_callback), NULL);
|
||||
gtk_signal_connect(GTK_OBJECT(capplet), "ok",
|
||||
GTK_SIGNAL_FUNC(ok_callback), NULL);
|
||||
gtk_signal_connect(GTK_OBJECT(capplet), "cancel",
|
||||
GTK_SIGNAL_FUNC(cancel_callback), NULL);
|
||||
gtk_signal_connect(GTK_OBJECT(capplet), "help",
|
||||
GTK_SIGNAL_FUNC(help_callback), NULL);
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int init_results;
|
||||
|
||||
bindtextdomain (PACKAGE, GNOMELOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
init_results = gnome_capplet_init("mouse-properties", VERSION,
|
||||
argc, argv, NULL, 0, NULL);
|
||||
|
||||
if (init_results < 0) {
|
||||
exit (0);
|
||||
}
|
||||
|
||||
if (init_results == 0) {
|
||||
init_mime_type ();
|
||||
init_mime_capplet ();
|
||||
capplet_gtk_main ();
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -92,6 +92,7 @@ macros/Makefile
|
|||
control-center/Makefile
|
||||
capplets/Makefile
|
||||
capplets/mouse-properties/Makefile
|
||||
capplets/mime-type/Makefile
|
||||
capplets/keyboard-properties/Makefile
|
||||
capplets/desktop-links/Makefile
|
||||
capplets/background-properties/Makefile
|
||||
|
|
28
po/no.po
28
po/no.po
|
@ -5,7 +5,7 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: control-centre 1.0.0\n"
|
||||
"POT-Creation-Date: 1999-03-10 02:02+0100\n"
|
||||
"POT-Creation-Date: 1999-03-09 18:54-0500\n"
|
||||
"PO-Revision-Date: 1999-02-25 01:35+0100\n"
|
||||
"Last-Translator: Kjartan Maraas <kmaraas@fib.hl.no>\n"
|
||||
"Language-Team: Norwegian <no@li.org>\n"
|
||||
|
@ -371,8 +371,7 @@ msgstr "Lydhendelser"
|
|||
#: capplets/sound-properties/sound-properties.c:335
|
||||
msgid ""
|
||||
"This copy of the GNOME control center was not compiled with sound support"
|
||||
msgstr ""
|
||||
"GNOME kontrollsenter ble kompilert uten støtte for lyd"
|
||||
msgstr "GNOME kontrollsenter ble kompilert uten střtte for lyd"
|
||||
|
||||
#: capplets/sound-properties/sound-properties.c:695
|
||||
msgid "The sound file for this event does not exist."
|
||||
|
@ -595,31 +594,31 @@ msgstr "Sett"
|
|||
msgid "Remove"
|
||||
msgstr "Fjern"
|
||||
|
||||
#: control-center/callbacks.c:69
|
||||
#: control-center/callbacks.c:79
|
||||
msgid "GNOME Control Center"
|
||||
msgstr "GNOME Kontrollsenter"
|
||||
|
||||
#: control-center/callbacks.c:72
|
||||
#: control-center/callbacks.c:82
|
||||
msgid "Desktop Properties manager."
|
||||
msgstr "Egenskaper for skrivebord."
|
||||
|
||||
#: control-center/capplet-manager.c:163
|
||||
#: control-center/capplet-manager.c:170
|
||||
msgid "Try"
|
||||
msgstr "Prøv"
|
||||
|
||||
#: control-center/capplet-manager.c:168
|
||||
#: control-center/capplet-manager.c:175
|
||||
msgid "Revert"
|
||||
msgstr "Forkast"
|
||||
|
||||
#: control-center/capplet-manager.c:173
|
||||
#: control-center/capplet-manager.c:180
|
||||
msgid "OK"
|
||||
msgstr "OK"
|
||||
|
||||
#: control-center/capplet-manager.c:178
|
||||
#: control-center/capplet-manager.c:185
|
||||
msgid "Cancel"
|
||||
msgstr "Avbryt"
|
||||
|
||||
#: control-center/capplet-manager.c:181
|
||||
#: control-center/capplet-manager.c:188 control-center/main.c:30
|
||||
msgid "Help"
|
||||
msgstr "Hjelp"
|
||||
|
||||
|
@ -672,12 +671,17 @@ msgstr "capplet-kommando som skal kj
|
|||
msgid "CAPPLET"
|
||||
msgstr "CAPPLET"
|
||||
|
||||
#: control-center/main.c:30
|
||||
#, fuzzy
|
||||
msgid "Help with the GNOME control-center."
|
||||
msgstr "Kontrollsenterets IOR"
|
||||
|
||||
#. we create the widgets
|
||||
#: control-center/main.c:75
|
||||
#: control-center/main.c:58
|
||||
msgid "Discard all changes"
|
||||
msgstr "Forkast alle endringer"
|
||||
|
||||
#. create the app
|
||||
#: control-center/main.c:145
|
||||
#: control-center/main.c:162
|
||||
msgid "Control Center"
|
||||
msgstr "Kontrollsenter"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue