257480480千克等于多少吨?

Bug#257480: marked as done (gxine: improved keybindings editing)
Bug#257480: marked as done (gxine: improved keybindings editing)
[Debian Bug Tracking System]
Your message dated Wed, 24 Nov :04 -0500
with message-id &&
and subject line Bug#257480: fixed in gxine 0.4-rc1
has caused the attached Bug report to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.
Please contact me immediately.)
Debian bug tracking system administrator
(administrator, Debian Bugs database)
--------------------------------------
Received: (at submit) by bugs.debian. 3 Jul :02 +0000
Sat Jul 03 12:01:02 2004
Return-path: &&
Received: from anchor-post-33.mail.demon.net [194.217.242.91]
by spohr.debian.org with esmtp (Exim 3.35 1 (Debian))
id 1Bgpl0-0004nw-00; Sat, 03 Jul :02 -0700
Received: from youmustbejoking.demon.co.uk ([212.228.127.8]
helo=pentagram.youmustbejoking.demon.co.uk)
by anchor-post-33.mail.demon.net with esmtp (Exim 3.35 #1)
id 1Bgpks-000IsE-0X
for ; Sat, 03 Jul :55 +0100
Received: from riscpc ([192.168.0.2])
by pentagram.youmustbejoking.demon.co.uk with esmtp (Exim 3.36 #1
id 1BgpjN-
for &&; Sat, 03 Jul :21 +0100
Date: Sat, 03 Jul :40 +0100
From: Darren Salt &&
Message-ID: &&
User-Agent: Messenger-Pro/2.60a (MsgServe/2.01beta2) (RISC-OS/4.02)
POPstar/2.06-ds
Subject: gxine: improved keybindings editing
X-Editor: Zap 1.46 (22 May 2004) [TEST], ZapEmail 0.28 (22 May 2004) (32)
X-SDate: Sat, 3959 Sep :40 +0100
X-Message-Flag: Outlook Express is broken. Upgrade to mail(1).
MIME-Version: 1.0
Content-Type: multipart/ boundary=&----&
Delivered-To:
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_
(1.212--exp) on spohr.debian.org
X-Spam-Status: No, hits=-5.2 required=4.0 tests=BAYES_40,HAS_PACKAGE
autolearn=no version=2.60-bugs.debian.org_
X-Spam-Level:
This message is in MIME format which your mailer apparently does not support.
You either require a newer version of your software which supports MIME, or
a separate MIME decoding utility.
Alternatively, ask the sender of this
message to resend it in a different format.
Content-Type: text/ charset=us-ascii
Package: gxine
Version: 0.3.3-3
Severity: wishlist
The attached patch adds a few Useful Features:
- Key bindings now have descriptions.
Useful if you have some nice long bindings, e.g. for handling the volume
controls from the keyboard.
- Bindings can be added or deleted without requiring a text editor.
- Bindings can be re-ordered (drag them).
- The default bindings or your saved bindings can be restored should you
make a mess of things.
Also, display of the (ignored) lock modifiers is removed.
| Darren Salt
| linux (or ds) at | nr. Ashington,
| woody, sarge, | youmustbejoking
| Northumberland
| demon co uk
| Toon Army
Sure, drinking kills brain cells, but only the weak ones.
Content-Type: text/ charset=iso-8859-1;
name=&gxine_keybinding_desc.dpatch&
Content-Disposition: filename=&gxine_keybinding_desc.dpatch&
Content-Transfer-Encoding: quoted-printable
diff -urNad gxine-0.3.3/src/actions.c gxine-0.3.3/src/actions.c
--- gxine-0.3.3/src/actions.c
02:51:47. +0100
+++ gxine-0.3.3/src/actions.c
02:53:35. +0100
@@ -36,7 +36,7 @@
-void action_exec (char *cmd, se_print_cb_t cb, void *cb_data) {
+void action_exec (const char *cmd, se_print_cb_t cb, void *cb_data) {
@@ -65,7 +65,7 @@
-int action_eval_view (char *cmd, se_view_cb_t cb, void *cb_data) {
+int action_eval_view (const char *cmd, se_view_cb_t cb, void *cb_data) {=
diff -urNad gxine-0.3.3/src/actions.h gxine-0.3.3/src/actions.h
--- gxine-0.3.3/src/actions.h
02:51:47. +0100
+++ gxine-0.3.3/src/actions.h
02:53:35. +0100
@@ -27,8 +27,8 @@
void action_init ();
-void action_exec (char *cmd, se_print_cb_t cb, void *cb_data);
+void action_exec (const char *cmd, se_print_cb_t cb, void *cb_data);
-int action_eval_view (char *cmd, se_view_cb_t cb, void *cb_data);
+int action_eval_view (const char *cmd, se_view_cb_t cb, void *cb_data);
diff -urNad gxine-0.3.3/src/key_events.c gxine-0.3.3/src/key_events.c
--- gxine-0.3.3/src/key_events.c
02:51:47. +0100
+++ gxine-0.3.3/src/key_events.c
02:53:35. +0100
@@ -35,6 +35,7 @@
#include &key_events.h&
#include &actions.h&
+#include &menu.h&
#include &utils.h&
#include &xmlparser.h&
@@ -42,47 +43,106 @@
#define LOG
-static int
+/* used for filtering out numlock etc. */
+#define GXINE_MODIFIER_MASK (GDK_MODIFIER_MASK & ~(GDK_LOCK_MASK | GDK_M=
OD2_MASK | GDK_MOD5_MASK))
+static gboolean
list_visible =3D FALSE, edit_visible =3D FALSE,
is_new_binding =3D FALSE;
static GtkListStore
-static GtkWidget
*kb_edit_dlg, *tree_
+static GtkWidget
*kb_bindings_list_dlg, *tree_view, *kb_menu,
*kb_binding_edit_dlg, *kb_binding_desc,
*kb_binding_command, *kb_binding_key, *kb_binding_
+static GtkItemFactory *kb_menu_
+static GtkAccelGroup
*kb_binding_edit_
typedef struct {
const gchar *desc, *
const gchar *
} key_binding_t;
+static key_binding_
+static const key_binding_t null_binding =3D { 0, 0, GDK_VoidSymbol, 0 };=
+static const key_binding_t default_binding =3D { &New binding&, &&, GDK_=
VoidSymbol, 0 };
+static GtkTreeIter catch_key_
+static void delete_key_binding (GtkTreeIter *);
+static const key_binding_t default_bindings[] =3D {
{ &Play&, &play ();&, GDK_Return, 0 },
{ &Exit gxine&, &exit ();&, GDK_q, 0 },
{ &Pause&, &pause ();&, GDK_space, 0 },
{ &Windowed mode&, &set_fullscreen (0);&, GDK_Escape, 0 },
{ &Fullscreen mode&, &set_fullscreen ();&, GDK_f, 0 },
{ &Aspect ratio&, &set_aspect ();&, GDK_a, 0 },
{ &Toggle deinterlace&, &set_deinterlace ();&, GDK_i, 0 },
{ &Back one minute&, &play (0, get_time()-60000);&, GDK_Left, 0 },
{ &Forward one minute&, &play (0, get_time()+60000);&, GDK_Right, 0 },=
{ &Faster&, &set_speed (get_speed()+1);&, GDK_Up, 0 },
{ &Slower&, &set_speed (get_speed()-1);&, GDK_Down, 0 },
{ &Up&, &input_up ();&, GDK_KP_8, 0 },
{ &Down&, &input_down ();&, GDK_KP_2, 0 },
{ &Left&, &input_left ();&, GDK_KP_4, 0 },
{ &Right&, &input_right ();&, GDK_KP_6, 0 },
{ &Select/OK&, &input_select ();&, GDK_KP_Enter, 0 },
{ &Menu 1&, &input_menu1 ();&, GDK_F1, 0 },
{ &Menu 2&, &input_menu2 ();&, GDK_F2, 0 },
{ &Menu 3&, &input_menu3 ();&, GDK_F3, 0 },
{ &Previous&, &input_previous ();&, GDK_KP_Page_Up, 0 },
{ &Next&, &input_next ();&, GDK_KP_Page_Down, 0 },
{ &Play, skip first 10%&, &play (10, 0);&, GDK_1, 0 },
{ &Play, skip first 20%&, &play (20, 0);&, GDK_2, 0 },
{ &Play, skip first 30%&, &play (30, 0);&, GDK_3, 0 },
{ &Play, skip first 40%&, &play (40, 0);&, GDK_4, 0 },
{ &Play, skip first half&, &play (50, 0);&, GDK_5, 0 },
{ &Play last 40%&, &play (60, 0);&, GDK_6, 0 },
{ &Play last 30%&, &play (70, 0);&, GDK_7, 0 },
{ &Play last 20%&, &play (80, 0);&, GDK_8, 0 },
{ &Play last 10%&, &play (90, 0);&, GDK_9, 0 },
{ &Play from start&, &play (0, 0);&, GDK_0, 0 },
{ &Playlist next&, &playlist_play (playlist_get_item()+1);&, GDK_Page_=
Down, 0 },
{ &Playlist previous&, &playlist_play (playlist_get_item()-1);&, GDK_P=
age_Up, 0 },
{ &Zoom in&, &set_zoom (get_zoom()+5);&, GDK_Z, GDK_SHIFT_MASK },
{ &Zoom out&, &set_zoom (get_zoom()-5);&, GDK_z, 0 },
{ &Snapshot&, &snapshot ();&, GDK_t, 0 },
+static key_binding_t *lookup_binding (GtkTreeIter *iter)
key_binding_t *k;
memset (&v, 0, sizeof (GValue));
gtk_tree_model_get_value (GTK_TREE_MODEL (kb_store), iter, 2, &v);
k =3D g_value_peek_pointer (&v);
g_value_unset (&v);
gint key_cb (GtkWidget *win, GdkEventKey *event, gpointer w) {
/* small hack for those who want to exit fullscreen mode using ctrl+f =
if ( (event-&keyval=3D=3DGDK_f) && (event-&state & GDK_CONTROL_MASK) )=
action_exec (&set_fullscreen();&, NULL, NULL);
return TRUE;
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(kb_store), &iter)) {=
/* filter out numlock etc */
state =3D event-&state & ~GDK_LOCK_MASK;
state =3D state & ~GDK_MOD2_MASK;
state =3D state & ~GDK_MOD5_MASK;
guint keyval =3D gdk_keyval_to_lower (event-&keyval);
guint state =3D event-&state & GXINE_MODIFIER_MASK;
key_binding_t *key_binding =3D lookup_binding (&iter);
key_binding_t *key_
memset (&v, 0, sizeof (GValue));
gtk_tree_model_get_value (GTK_TREE_MODEL (kb_store),
&iter, 2, &v);
key_binding =3D g_value_peek_pointer (&v);
g_value_unset (&v);
if ( (key_binding-&keyval =3D=3D event-&keyval)
if ( (key_binding-&keyval =3D=3D keyval)
&& (key_binding-&state =3D=3D state) ) {
action_exec (key_binding-&cmd, NULL, NULL);
return TRUE;
@@ -99,29 +159,46 @@
return FALSE;
-static gboolean close_cb (GtkWidget* widget, gpointer data) {
is_visible =3D FALSE;
gtk_widget_unmap (kb_edit_dlg);
+static void close_list_window (void)
list_visible =3D FALSE;
gtk_widget_unmap (kb_bindings_list_dlg);
+static void close_edit_window (void)
edit_visible =3D FALSE;
if (is_new_binding)
delete_key_binding (&catch_key_iter);
gtk_widget_unmap (kb_binding_edit_dlg);
+static gboolean close_cb (GtkWidget* widget, gpointer data) {
close_edit_window ();
close_list_window ();
return TRUE;
-static key_binding_t *find_key_binding (gchar *cmd, GtkTreeIter *iter) {=
+static key_binding_t *find_key_binding (const gchar *desc, const gchar *=
GtkTreeIter *iter)
if (!desc && !cmd)
return NULL;
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(kb_store), iter)) {
key_binding_t *key_binding =3D lookup_binding (iter);
key_binding_t *key_
memset (&v, 0, sizeof (GValue));
gtk_tree_model_get_value (GTK_TREE_MODEL (kb_store),
iter, 2, &v);
key_binding =3D g_value_peek_pointer (&v);
g_value_unset (&v);
if (!strcasecmp (key_binding-&cmd, cmd))
/* allow either to be null, in which case we match on the other ra=
* than on both
if ((!desc || !strcasecmp (key_binding-&desc, desc)) &&
(!cmd || !strcasecmp (key_binding-&cmd, cmd)))
return key_
} while (gtk_tree_model_iter_next (GTK_TREE_MODEL (kb_store),
@@ -131,17 +208,16 @@
return NULL;
-gchar* kb2str (key_binding_t *kb) {
+static gchar* kb2str (key_binding_t *kb) {
static const gchar text_shift[]
=3D &&Shift&&;
static const gchar text_control[] =3D &&Control&&;
static const gchar text_mod1[]
=3D &&Alt&&;
static const gchar text_mod2[]
=3D &&Mod2&&;
static const gchar text_mod3[]
=3D &&Mod3&&;
static const gchar text_mod4[]
=3D &&Mod4&&;
static const gchar text_mod5[]
=3D &&Mod5&&;
const gchar
* calc length of resulting string
@@ -154,54 +230,32 @@
l +=3D sizeof (text_control) - 1;
if (kb-&state & GDK_MOD1_MASK)=20
l +=3D sizeof (text_mod1) - 1;
if (kb-&state & GDK_MOD2_MASK)=20
l +=3D sizeof (text_mod2) - 1;
if (kb-&state & GDK_MOD3_MASK)=20
l +=3D sizeof (text_mod3) - 1;
if (kb-&state & GDK_MOD4_MASK)=20
l +=3D sizeof (text_mod4) - 1;
if (kb-&state & GDK_MOD5_MASK)=20
l +=3D sizeof (text_mod5) - 1;
l +=3D strlen (gdk_keyval_name (kb-&keyval));
if (kb-&keyval =3D=3D GDK_VoidSymbol)
key =3D &undef&;
else if (!(key =3D gdk_keyval_name (kb-&keyval)))
key =3D &unknown&;
l +=3D strlen (key);
name =3D malloc (l);
*name =3D 0;
if (kb-&state & GDK_SHIFT_MASK) {
memcpy (name+p, text_shift, sizeof (text_shift)-1);
p +=3D sizeof (text_shift) - 1;
if (kb-&state & GDK_CONTROL_MASK) {
memcpy (name+p, text_control, sizeof (text_control)-1);
p +=3D sizeof (text_control) - 1;
if (kb-&state & GDK_MOD1_MASK) {
memcpy (name+p, text_mod1, sizeof (text_mod1)-1);
p +=3D sizeof (text_mod1) - 1;
if (kb-&state & GDK_MOD2_MASK) {
memcpy (name+p, text_mod2, sizeof (text_mod2)-1);
p +=3D sizeof (text_mod2) - 1;
if (kb-&state & GDK_MOD3_MASK) {
memcpy (name+p, text_mod3, sizeof (text_mod3)-1);
p +=3D sizeof (text_mod3) - 1;
if (kb-&state & GDK_MOD4_MASK) {
memcpy (name+p, text_mod4, sizeof (text_mod4)-1);
p +=3D sizeof (text_mod4) - 1;
if (kb-&state & GDK_MOD5_MASK) {
memcpy (name+p, text_mod5, sizeof (text_mod5)-1);
p +=3D sizeof (text_mod5) - 1;
memcpy (name+p, gdk_keyval_name (kb-&keyval),=20
strlen (gdk_keyval_name (kb-&keyval)));
p +=3D strlen (gdk_keyval_name (kb-&keyval));
if (kb-&state & GDK_SHIFT_MASK)
strcat (name, text_shift);
if (kb-&state & GDK_CONTROL_MASK)
strcat (name, text_control);
if (kb-&state & GDK_MOD1_MASK)
strcat (name, text_mod1);
if (kb-&state & GDK_MOD3_MASK)
strcat (name, text_mod3);
if (kb-&state & GDK_MOD4_MASK)
strcat (name, text_mod4);
*(name+p) =3D 0;
strcat (name, key);
@@ -212,72 +266,81 @@
-static void set_key_binding (gchar *cmd, guint keyval, guint state) {
+static void modify_key_binding (GtkTreeIter *iter, key_binding_t *key_bi=
const key_binding_t *new_binding)
free (key_binding-&keyname);
free (key_binding-&cmd);
free (key_binding-&desc);
if (new_binding-&keyval !=3D GDK_VoidSymbol)
key_binding-&keyval =3D gdk_keyval_to_lower (new_binding-&keyval);
key_binding-&state
=3D new_binding-&state & GXINE_MODIFIER_MASK;
key_binding-&keyname =3D kb2str (key_binding);
key_binding-&cmd
=3D strdup (new_binding-&cmd);
if (!new_binding-&desc)
int i =3D -1;
while (default_bindings[++i].desc)
if (!strcasecmp (default_bindings[i].cmd, new_binding-&cmd))
key_binding-&desc
=3D strdup (default_bindings[i].desc ? : new_bind=
ing-&cmd);
key_binding-&desc
=3D strdup (new_binding-&desc);
gtk_list_store_set (kb_store, iter, 0, key_binding-&desc, 1,
key_binding-&keyname, 2, key_binding, -1);
+static void set_key_binding (const key_binding_t *new_binding)
key_binding_t *key_
key_binding =3D find_key_binding (cmd, &iter);
key_binding =3D new_binding-&desc
? find_key_binding (new_binding-&desc, NULL, &iter)
: find_key_binding (NULL, new_binding-&cmd, &iter);
if (!key_binding) {
/* add new key binding */
key_binding =3D malloc (sizeof (key_binding_t));
memset (key_binding, 0, sizeof (key_binding_t));
key_binding-&keyval =3D GDK_VoidS
gtk_list_store_append (kb_store, &iter);
key_binding-&keyval =3D
key_binding-&state
=3D ((state & ~GDK_LOCK_MASK) & ~GDK_MOD2_MASK) & =
~GDK_MOD5_MASK;
key_binding-&cmd
gtk_list_store_set (kb_store, &iter, 0, cmd, 1, kb2str(key_binding),=20
2, key_binding, -1);
modify_key_binding (&iter, key_binding, new_binding);
-static void load_default_kb (void) {
set_key_binding (&play ();&, GDK_Return, 0);
set_key_binding (&exit ();&, GDK_q, 0);
set_key_binding (&pause ();&, GDK_space, 0);
set_key_binding (&set_fullscreen (0);&, GDK_Escape, 0);
set_key_binding (&set_fullscreen ();&, GDK_f, 0);
set_key_binding (&set_aspect ();&, GDK_a, 0);
set_key_binding (&set_deinterlace ();&, GDK_i, 0);
set_key_binding (&play (0, get_time()-60000);&, GDK_Left, 0);
set_key_binding (&play (0, get_time()+60000);&, GDK_Right, 0);
set_key_binding (&set_speed (get_speed()+1);&, GDK_Up, 0);
set_key_binding (&set_speed (get_speed()-1);&, GDK_Down, 0);
set_key_binding (&input_up ();&, GDK_KP_8, 0);
set_key_binding (&input_down ();&, GDK_KP_2, 0);
set_key_binding (&input_left ();&, GDK_KP_4, 0);
set_key_binding (&input_right ();&, GDK_KP_6, 0);
set_key_binding (&input_select ();&, GDK_KP_Enter, 0);
set_key_binding (&input_menu1 ();&, GDK_F1, 0);
set_key_binding (&input_menu2 ();&, GDK_F2, 0);
set_key_binding (&input_menu3 ();&, GDK_F3, 0);
set_key_binding (&input_previous ();&, GDK_KP_Page_Up, 0);
set_key_binding (&input_next ();&, GDK_KP_Page_Down, 0);
set_key_binding (&play (10, 0);&, GDK_1, 0);
set_key_binding (&play (20, 0);&, GDK_2, 0);
set_key_binding (&play (30, 0);&, GDK_3, 0);
set_key_binding (&play (40, 0);&, GDK_4, 0);
set_key_binding (&play (50, 0);&, GDK_5, 0);
set_key_binding (&play (60, 0);&, GDK_6, 0);
set_key_binding (&play (70, 0);&, GDK_7, 0);
set_key_binding (&play (80, 0);&, GDK_8, 0);
set_key_binding (&play (90, 0);&, GDK_9, 0);
set_key_binding (&play (0, 0);&, GDK_0, 0);
set_key_binding (&playlist_play (playlist_get_item()+1);&, GDK_Page_Do=
set_key_binding (&playlist_play (playlist_get_item()-1);&, GDK_Page_Up=
set_key_binding (&set_zoom (get_zoom()+5);&, GDK_Z, GDK_SHIFT_MASK);
set_key_binding (&set_zoom (get_zoom()-5);&, GDK_z, 0);
set_key_binding (&snapshot ();&, GDK_t, 0);
+static void delete_key_binding (GtkTreeIter *iter)
key_binding_t *key_binding =3D lookup_binding (iter);
free (key_binding-&keyname);
free (key_binding-&cmd);
free (key_binding-&desc);
gtk_list_store_remove (kb_store, iter);
free (key_binding);
+static void load_default_kb (void)
int i =3D -1;
while (default_bindings[++i].desc)
set_key_binding (&default_bindings[i]);
void save_key_bindings (void) {
@@ -289,22 +352,15 @@
fprintf (f, &&GXINEKB VERSION=3D\&1.0\&&\n&);
fprintf (f, &&GXINEKB VERSION=3D\&1.0.1\&&\n&);
if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(kb_store), &iter))=
key_binding_t *key_
memset (&v, 0, sizeof (GValue));
gtk_tree_model_get_value (GTK_TREE_MODEL (kb_store),
&iter, 2, &v);
key_binding =3D g_value_peek_pointer (&v);
g_value_unset (&v);
key_binding_t *key_binding =3D lookup_binding (&iter);
fprintf (f, &
&KEYBINDING&\n&);
fprintf (f, &
&DESCRIPTION&%s&/DESCRIPTION&\n&, key_binding-&desc);
fprintf (f, &
&COMMAND&%s&/COMMAND&\n&, key_binding-&cmd);
fprintf (f, &
&KEYVAL&%d&/KEYVAL&\n&, key_binding-&keyval);
fprintf (f, &
&STATE&%d&/STATE&\n&, key_binding-&state);
@@ -325,33 +381,28 @@
static void xml2kb (xml_node_t *node) {
keyval =3D 0;
key_binding_t binding =3D { 0 };
while (node) {
if (!strcasecmp (node-&name, &command&))
cmd =3D node-&
binding.cmd =3D node-&
else if (!strcasecmp (node-&name, &description&))
binding.desc =3D node-&
else if (!strcasecmp (node-&name, &keyval&))
keyval =3D atoi (node-&data);
binding.keyval =3D atoi (node-&data);
else if (!strcasecmp (node-&name, &state&))
state =3D atoi (node-&data);
binding.state =3D atoi (node-&data);
node =3D node-&
#ifdef LOG
printf (&key_events: cmd=3D'%s', keyval=3D%d, state=3D%d\n&,
cmd, keyval, state);
printf (&key_events: desc=3D'%s', cmd=3D'%s', keyval=3D%d, state=3D%d\=
desc ? desc : &&, cmd, keyval, state);
if (cmd && keyval)=20
set_key_binding (cmd, keyval, state);
if (binding.cmd && binding.keyval)=20
set_key_binding (&binding);
static void load_key_bindings (void) {
@@ -409,109 +460,294 @@
void kb_edit_show (void) {
if (is_visible) {
is_visible =3D FALSE;
gtk_widget_hide (kb_edit_dlg);
if (list_visible) {
close_edit_window ();
close_list_window ();
is_visible =3D TRUE;
gtk_widget_show_all (kb_edit_dlg);
gtk_widget_map (kb_edit_dlg);
list_visible =3D TRUE;
gtk_widget_show_all (kb_bindings_list_dlg);
gtk_widget_map (kb_bindings_list_dlg);
-#define CATCH_MODE_INIT 0
-#define CATCH_MODE_OFF
-#define CATCH_MODE_ON
-static int
catch_key_mode =3D CATCH_MODE_INIT;
-static GtkTreeIter catch_key_
+static void do_edit_binding (void)
editkey =3D *lookup_binding (&catch_key_iter);
char title[64];
-static void row_activated_cb (GtkTreeView *treeview,
gpointer user_data) {
gtk_entry_set_text (GTK_ENTRY (kb_binding_desc), editkey.desc);
gtk_entry_set_text (GTK_ENTRY (kb_binding_command), editkey.cmd);
gtk_entry_set_text (GTK_ENTRY (kb_binding_key), editkey.keyname);
GtkTreeSelection
gtk_widget_show_all (kb_binding_edit_dlg);
snprintf (title, sizeof (title), &Keybinding: %s&, editkey.desc);
gtk_window_set_title (GTK_WINDOW (kb_binding_edit_dlg), title);
switch (catch_key_mode) {
case CATCH_MODE_INIT:
catch_key_mode =3D CATCH_MODE_OFF;
gtk_widget_show_all (kb_binding_edit_dlg);
gtk_widget_map (kb_binding_edit_dlg);
gtk_widget_grab_focus (kb_binding_key);
case CATCH_MODE_ON:
+static void kb_new_binding (GtkWidget *widget, gpointer data)
set_key_binding (&default_binding);
find_key_binding (default_binding.desc, default_binding.cmd, &catch_ke=
do_edit_binding ();
+static void kb_delete_binding (GtkWidget *widget, gpointer data)
GtkTreeSelection *sel =3D
gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
if (gtk_tree_selection_get_selected (sel, NULL, &iter))
GtkTreePath *path =3D
gtk_tree_model_get_path (GTK_TREE_MODEL (tree_view), &iter);
key_binding_t *key_
memset (&v, 0, sizeof (GValue));
gtk_tree_model_get_value (GTK_TREE_MODEL (kb_store),
&catch_key_iter, 2, &v);
key_binding =3D g_value_peek_pointer (&v);
g_value_unset (&v);
gtk_list_store_set (kb_store, &catch_key_iter, 1, kb2str (key_bind=
ing), -1);
catch_key_mode =3D CATCH_MODE_OFF;
gtk_tree_view_set_cursor (GTK_TREE_VIEW (tree_view), path, NULL, F=
gtk_tree_path_free (path);
case CATCH_MODE_OFF:
if (edit_visible
&& lookup_binding (&iter) =3D=3D lookup_binding (&catch_key_iter))
close_edit_window ();
delete_key_binding (&iter);
sel =3D gtk_tree_view_get_selection (GTK_TREE_VIEW(tree_view));
if (gtk_tree_selection_get_selected (sel, NULL, &catch_key_iter)) {
gtk_list_store_set (kb_store, &catch_key_iter, 1, &Type a new acce=
lerator&,=20
catch_key_mode =3D CATCH_MODE_ON;
+static void kb_edit_binding (GtkWidget *widget, gpointer data)
GtkTreeSelection *sel =3D
gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
if (sel && gtk_tree_selection_get_selected (sel, NULL, &catch_key_iter=
do_edit_binding ();
+static void kb_sig_edit_binding (GtkTreeView *tree, GtkTreeIter *iter,
GtkTreePath *path, gpointer data)
kb_edit_binding (GTK_WIDGET (tree), data);
+static void kb_merge_defaults (GtkWidget *widget, gpointer data)
if (!edit_visible)
load_default_kb ();
+static void kb_reload_keymap (GtkWidget *widget, gpointer data)
if (!edit_visible)
gtk_list_store_clear (kb_store);
load_key_bindings ();
-gboolean key_event_cb (GtkWidget *widget,
GdkEventKey *event,
gpointer user_data) {
if ( (event-&keyval =3D=3D GDK_Control_L)
|| (event-&keyval =3D=3D GDK_Control_R)
|| (event-&keyval =3D=3D GDK_Meta_L)
|| (event-&keyval =3D=3D GDK_Meta_R)
|| (event-&keyval =3D=3D GDK_Alt_L)
|| (event-&keyval =3D=3D GDK_Alt_R)
|| (event-&keyval =3D=3D GDK_Super_L)
|| (event-&keyval =3D=3D GDK_Super_R)
|| (event-&keyval =3D=3D GDK_Hyper_L)
|| (event-&keyval =3D=3D GDK_Hyper_R)
|| (event-&keyval =3D=3D GDK_Shift_L)
|| (event-&keyval =3D=3D GDK_Shift_R) )
+static void kb_reset_keymap (GtkWidget *widget, gpointer data)
if (!edit_visible)
gtk_list_store_clear (kb_store);
load_default_kb ();
+static void set_binding_quote (gboolean state)
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (kb_binding_quote)=
=3D=3D state)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (kb_binding_quote), st=
+static gboolean bq_lock =3D FALSE;
+static gboolean start_edit_key_cb (GtkWidget *widget, GdkEventFocus *eve=
gpointer user_data)
if (!bq_lock)
set_binding_quote (FALSE);
gtk_entry_select_region (GTK_ENTRY (kb_binding_key), 0, 256);
return TRUE;
+static gboolean end_edit_key_cb (GtkWidget *widget, GdkEventFocus *event=
gpointer user_data)
set_binding_quote (FALSE);
return FALSE;
+static gboolean do_edit_key_cb (GtkWidget *widget, GdkEventKey *event,
gpointer user_data)
event-&keyval =3D=3D GDK_Control_L
|| event-&keyval =3D=3D GDK_Control_R
|| event-&keyval =3D=3D GDK_Meta_L
|| event-&keyval =3D=3D GDK_Meta_R
|| event-&keyval =3D=3D GDK_Alt_L
|| event-&keyval =3D=3D GDK_Alt_R
|| event-&keyval =3D=3D GDK_Super_L
|| event-&keyval =3D=3D GDK_Super_R
|| event-&keyval =3D=3D GDK_Hyper_L
|| event-&keyval =3D=3D GDK_Hyper_R
|| event-&keyval =3D=3D GDK_Shift_L
|| event-&keyval =3D=3D GDK_Shift_R
|| gtk_window_get_focus (GTK_WINDOW (kb_binding_edit_dlg)) !=3D kb=
_binding_key)
return FALSE;
if (catch_key_mode =3D=3D CATCH_MODE_ON) {
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (kb_binding_quote=
if (event-&keyval =3D=3D GDK_Tab && event-&state =3D=3D 0)
gtk_widget_grab_focus (kb_binding_quote);
return TRUE;
key_binding_t *key_
memset (&v, 0, sizeof (GValue));
gtk_tree_model_get_value (GTK_TREE_MODEL (kb_store),
&catch_key_iter, 2, &v);
key_binding =3D g_value_peek_pointer (&v);
g_value_unset (&v);
key_binding-&keyval =3D event-&
key_binding-&state
=3D event-&
if (gtk_window_activate_key (GTK_WINDOW (kb_binding_edit_dlg), event=
return TRUE;
gtk_list_store_set (kb_store, &catch_key_iter, 1, kb2str (key_bindin=
catch_key_mode =3D CATCH_MODE_OFF;
set_binding_quote (FALSE);
editkey.keyval =3D gdk_keyval_to_lower (event-&keyval);
editkey.state =3D event-&state & GXINE_MODIFIER_MASK;
name =3D kb2str (&editkey);
gtk_entry_set_text (GTK_ENTRY (kb_binding_key), name);
free (name);
gtk_entry_select_region (GTK_ENTRY (kb_binding_key), 0, 256);
return TRUE;
+static gboolean null_edit_key_cb (GtkWidget *widget, GdkEventKey *event,=
gpointer user_data)
return TRUE;
+static void quote_edit_key_cb (GtkButton *widget, gpointer user_data)
bq_lock =3D TRUE;
gtk_widget_grab_focus (kb_binding_key);
bq_lock =3D FALSE;
+static gboolean close_edit_cb (GtkWidget* widget, gpointer data)
close_edit_window ();
return TRUE;
+static gboolean revert_edit_cb (GtkWidget *widget, gpointer data)
do_edit_binding ();
return TRUE;
+static gboolean apply_edit_cb (GtkWidget* widget, gpointer data)
key_binding_t
const key_binding_t *found_
key_binding =3D lookup_binding (&catch_key_iter);
editkey.desc =3D gtk_entry_get_text (GTK_ENTRY (kb_binding_desc));
editkey.cmd =3D gtk_entry_get_text (GTK_ENTRY (kb_binding_command));
found_binding =3D find_key_binding (editkey.desc, NULL, &iter);
if (!found_binding)
found_binding =3D find_key_binding (NULL, editkey.cmd, &iter);
if (found_binding && found_binding !=3D key_binding)
GtkEntry *sel =3D GTK_ENTRY (strcasecmp (found_binding-&desc, editke=
? kb_binding_command : kb_binding_desc);
gtk_entry_select_region (sel, 0, 256);
return TRUE;
return FALSE;
modify_key_binding (&catch_key_iter, key_binding, &editkey);
close_edit_window ();
return TRUE;
+static GtkItemFactoryEntry kb_menu_data[] =3D {
{ &/_Edit&,
0, &&Branch&& },
{ &/Edit/_New binding&,
kb_new_binding,
{ &/Edit/_Edit binding&,
&Return&,kb_edit_binding,
{ &/Edit/_Delete binding&,
&Delete&,kb_delete_binding,
{ &/Edit/separator&,
0, &&Separator&& },
{ &/Edit/Defaults&,
0, &&Branch&& },
{ &/Edit/Defaults/Reload keymap&,
kb_reload_keymap,
{ &/Edit/Defaults/Merge default keymap&,
kb_merge_defaults,
{ &/Edit/Defaults/Replace with default keymap&,NULL, kb_reset_keymap,
+static void add_table_row_items (GtkWidget *table, gint row,
const gchar *labeltext, int widgets, ...)
/* Pads out last widget to fill remaining space.
* First widget is expandable, rest aren't.
int column =3D 1;
GtkWidget *label =3D gtk_label_new (labeltext);
GtkAttachOptions attach =3D GTK_EXPAND | GTK_SHRINK | GTK_FILL;
gtk_table_attach (GTK_TABLE (table), label, 0, 1, row, row + 1, 0, 0, =
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_RIGHT);
va_start (ap, widgets); =20
while (widgets--)
GtkWidget *widget =3D va_arg (ap, GtkWidget *);
gtk_table_attach (GTK_TABLE (table), widget, column,
widgets ? column + 1 : GTK_TABLE (table)-&ncols,
row, row + 1, attach, attach, 2, 2);
attach =3D GTK_FILL;
va_end (ap);
void key_events_init (void) {
*b, *scrolled_
GtkCellRenderer
GtkTreeViewColumn
* init list store
@@ -524,25 +760,20 @@
* create (for now invisible) kb_edit dialog
kb_edit_dlg =3D gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (kb_edit_dlg), &Keybindings editor&);=
gtk_window_set_default_size (GTK_WINDOW (kb_edit_dlg), 400, 250);
g_signal_connect( GTK_OBJECT (kb_edit_dlg), &delete_event&,
kb_bindings_list_dlg =3D gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (kb_bindings_list_dlg), &Keybindings =
gtk_window_set_default_size (GTK_WINDOW (kb_bindings_list_dlg), 400, 2=
g_signal_connect( GTK_OBJECT (kb_bindings_list_dlg), &delete_event&,
G_CALLBACK (close_cb), NULL );
b =3D gtk_dialog_add_button (GTK_DIALOG (kb_edit_dlg), GTK_STOCK_CLOSE=
b =3D gtk_dialog_add_button (GTK_DIALOG (kb_bindings_list_dlg), GTK_ST=
OCK_CLOSE, 1);
g_signal_connect (GTK_OBJECT(b), &clicked&,
G_CALLBACK (close_cb),
kb_edit_dlg);
g_signal_connect (GTK_OBJECT(kb_edit_dlg), &key_press_event&,
G_CALLBACK(key_event_cb), NULL);
kb_bindings_list_dlg);
/* add a nice tree view widget here */
tree_view =3D gtk_tree_view_new_with_model (GTK_TREE_MODEL(kb_store));=
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
g_signal_connect (G_OBJECT (tree_view), &cursor-changed&,
G_CALLBACK (row_activated_cb), NULL);
cell =3D gtk_cell_renderer_text_new ();
column =3D gtk_tree_view_column_new_with_attributes (&Action&,
@@ -552,21 +783,85 @@
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
GTK_TREE_VIEW_COLUMN (column));
column =3D gtk_tree_view_column_new_with_attributes (&Accelerator Key&=
column =3D gtk_tree_view_column_new_with_attributes (&Accelerator key&=
&text&, 1,
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
GTK_TREE_VIEW_COLUMN (column));
gtk_tree_view_set_reorderable (GTK_TREE_VIEW (tree_view), TRUE);
scrolled_window =3D gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),=
GTK_POLICY_AUTOMATIC,=20
GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
gtk_box_pack_start (GTK_BOX(GTK_DIALOG(kb_edit_dlg)-&vbox), scrolled_w=
g_signal_connect (GTK_OBJECT (tree_view), &row-activated&,
G_CALLBACK (kb_sig_edit_binding), kb_bindings_list_dlg);
kb_menu =3D create_menu_tree (&kb_menu_factory, kb_bindings_list_dlg, =
NULL, kb_menu_data,
num_menu_items (kb_menu_data));
gtk_box_pack_start (GTK_BOX(GTK_DIALOG(kb_bindings_list_dlg)-&vbox), k=
FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(GTK_DIALOG(kb_bindings_list_dlg)-&vbox), s=
crolled_window,
TRUE, TRUE, 2);
is_visible =3D FALSE;
list_visible =3D FALSE;
* create kb_binding_edit dialogue
kb_binding_edit_dlg =3D gtk_dialog_new ();
gtk_window_set_title (GTK_WINDOW (kb_binding_edit_dlg), &Keybinding&);=
gtk_window_set_default_size (GTK_WINDOW (kb_binding_edit_dlg), 320, 80=
g_signal_connect (GTK_OBJECT (kb_binding_edit_dlg), &delete_event&,
G_CALLBACK (close_edit_cb), NULL);
kb_binding_edit_accel =3D gtk_accel_group_new ();
gtk_window_add_accel_group (GTK_WINDOW (kb_binding_edit_dlg),
kb_binding_edit_accel);
b =3D gtk_dialog_add_button (GTK_DIALOG (kb_binding_edit_dlg), GTK_STO=
CK_UNDO, 1);
g_signal_connect (GTK_OBJECT (b), &clicked&,
G_CALLBACK (revert_edit_cb), kb_binding_edit_dlg);
b =3D gtk_dialog_add_button (GTK_DIALOG (kb_binding_edit_dlg), GTK_STO=
CK_APPLY, 1);
g_signal_connect (GTK_OBJECT (b), &clicked&,
G_CALLBACK (apply_edit_cb), kb_binding_edit_dlg);
gtk_widget_add_accelerator (b, &clicked&, kb_binding_edit_accel, GDK_R=
eturn, 0, 0);
b =3D gtk_dialog_add_button (GTK_DIALOG (kb_binding_edit_dlg), GTK_STO=
CK_CLOSE, 1);
g_signal_connect (GTK_OBJECT (b), &clicked&,
G_CALLBACK (close_edit_cb), kb_binding_edit_dlg);
gtk_widget_add_accelerator (b, &clicked&, kb_binding_edit_accel, GDK_E=
scape, 0, 0);
b =3D gtk_table_new (3, 3, FALSE);
kb_binding_desc =3D gtk_entry_new_with_max_length (32);
add_table_row_items (b, 0, &Description&, 1, kb_binding_desc);
kb_binding_command =3D gtk_entry_new_with_max_length (256);
add_table_row_items (b, 1, &Command&, 1, kb_binding_command);
kb_binding_key =3D gtk_entry_new ();
gtk_entry_set_editable (GTK_ENTRY (kb_binding_key), FALSE);
kb_binding_quote =3D gtk_toggle_button_new_with_mnemonic (&_Grab&);
gtk_entry_set_editable (GTK_ENTRY (kb_binding_key), FALSE);
add_table_row_items (b, 2, &Accelerator key&, 2, kb_binding_key,
kb_binding_quote);
g_signal_connect (GTK_OBJECT (kb_binding_key), &focus_in_event&,
G_CALLBACK (start_edit_key_cb), NULL);
g_signal_connect (GTK_OBJECT (kb_binding_edit_dlg), &key_press_event&,=
G_CALLBACK (do_edit_key_cb), NULL);
g_signal_connect (GTK_OBJECT (kb_binding_key), &focus_out_event&,
G_CALLBACK (end_edit_key_cb), NULL);
g_signal_connect (GTK_OBJECT (kb_binding_key), &key_press_event&,
G_CALLBACK (null_edit_key_cb), NULL);
g_signal_connect (GTK_OBJECT (kb_binding_quote), &clicked&,
G_CALLBACK (quote_edit_key_cb), NULL);
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (kb_binding_edit_dlg)-&vb=
diff -urNad gxine-0.3.3/src/menu.c gxine-0.3.3/src/menu.c
--- gxine-0.3.3/src/menu.c
02:51:47. +0100
+++ gxine-0.3.3/src/menu.c
02:53:35. +0100
@@ -35,8 +35,6 @@
GtkMenuShell *media_
-static GtkItemFactory *item_
* context menu
@@ -424,20 +422,40 @@
{ &/Help/_Re-run setup wizards...&, NULL,
wizards_cb, 0, NULL },
-GtkWidget *create_menus (GtkWidget *window) {
GtkAccelGroup
nmenu_items =3D sizeof (menu_items) / sizeof (menu_i=
GtkRadioMenuItem *none_
accel_group =3D gtk_accel_group_new ();
+GtkWidget *create_menu_tree (GtkItemFactory **factory, GtkWidget *window=
GtkAccelGroup **accel,
GtkItemFactoryEntry *menu_items,
gint nmenu_items)
if (window)
GtkAccelGroup *accel_group =3D
(accel && *accel) ? *accel : gtk_accel_group_new ();
if (accel)
*accel =3D accel_
*factory =3D gtk_item_factory_new (GTK_TYPE_MENU_BAR, &&main&&,
accel_group);
gtk_item_factory_create_items (*factory, nmenu_items, menu_items, NU=
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
*factory =3D gtk_item_factory_new (GTK_TYPE_MENU, &&main&&, NULL);
gtk_item_factory_create_items (*factory, nmenu_items, menu_items, NU=
item_factory =3D gtk_item_factory_new (GTK_TYPE_MENU_BAR, &&main&&,=20
accel_group);
return gtk_item_factory_get_widget (*factory, &&main&&);
gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, =
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
+GtkWidget *create_menus (GtkWidget *window)
GtkItemFactory *item_
GtkRadioMenuItem *none_
GtkWidget *menu_root =3D create_menu_tree (&item_factory, window, NULL=
menu_items,
num_menu_items (menu_items));
media_menu =3D GTK_MENU_SHELL (gtk_item_factory_get_widget (item_facto=
ry, &/Media&));
@@ -445,7 +463,5 @@
none_item =3D GTK_RADIO_MENU_ITEM (gtk_item_factory_get_item (item_fac=
tory, &/View/Visualizations/None&));
add_vis_entries (GTK_MENU_SHELL (gtk_item_factory_get_widget (item_fac=
tory, &/View/Visualizations&)), none_item) ;
return gtk_item_factory_get_widget (item_factory, &&main&&);
return menu_
diff -urNad gxine-0.3.3/src/menu.h gxine-0.3.3/src/menu.h
--- gxine-0.3.3/src/menu.h
02:51:47. +0100
+++ gxine-0.3.3/src/menu.h
02:53:35. +0100
@@ -25,6 +25,11 @@
#include &gtk/gtk.h&
+#define num_menu_items(tree) (sizeof ((tree)) / sizeof ((tree)[0]))
+GtkWidget *create_menu_tree (GtkItemFactory **, GtkWidget *window,
GtkAccelGroup **, GtkItemFactoryEntry *,
gint items);
GtkWidget *create_menus (GtkWidget *window) ;
---------------------------------------
Received: (at 257480-close) by bugs.debian. 24 Nov :06 +0000
Wed Nov 24 09:24:06 2004
Return-path: &&
Received: from newraff.debian.org [208.185.25.31] (mail)
by spohr.debian.org with esmtp (Exim 3.35 1 (Debian))
id 1CX0sA-0000Xz-00; Wed, 24 Nov :06 -0800
Received: from katie by newraff.debian.org with local (Exim 3.35 1 (Debian))
id 1CX0lM-00028n-00; Wed, 24 Nov :04 -0500
From: Siggi Langauf &&
X-Katie: $Revision: 1.51 $
Subject: Bug#257480: fixed in gxine 0.4-rc1
Message-Id: &&
Sender: Archive Administrator &&
Date: Wed, 24 Nov :04 -0500
Delivered-To:
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_
(1.212--exp) on spohr.debian.org
X-Spam-Status: No, hits=-6.0 required=4.0 tests=BAYES_00,HAS_BUG_NUMBER
autolearn=no version=2.60-bugs.debian.org_
X-Spam-Level:
X-CrossAssassin-Score: 11
Source: gxine
Source-Version: 0.4-rc1
We believe that the bug you reported is fixed in the latest version of
gxine, which is due to be installed in the Debian FTP archive:
gnome-xine_0.4-rc1_all.deb
to pool/main/g/gxine/gnome-xine_0.4-rc1_all.deb
gxine_0.4-rc1.dsc
to pool/main/g/gxine/gxine_0.4-rc1.dsc
gxine_0.4-rc1.tar.gz
to pool/main/g/gxine/gxine_0.4-rc1.tar.gz
gxine_0.4-rc1_powerpc.deb
to pool/main/g/gxine/gxine_0.4-rc1_powerpc.deb
A summary of the changes between this version and the previous one is
Thank you for reporting the bug, which will now be closed.
have further comments please address them to ,
and the maintainer will reopen the bug report if appropriate.
Debian distribution maintenance software
Siggi Langauf && (supplier of updated gxine package)
(This message was generated automatica if you
believe that there is a problem with it please contact the archive
administrators by mailing )
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Format: 1.7
Date: Wed, 24 Nov :05 +0100
Source: gxine
Binary: gnome-xine gxine
Architecture: source powerpc all
Version: 0.4-rc1
Distribution: unstable
Urgency: high
Maintainer: Siggi Langauf &&
Changed-By: Siggi Langauf &&
Description:
gnome-xine - dummy package to provide easy upgrade
- the xine video player, GTK+/Gnome user interface
Closes: 320 853 170 513 479
493 733 745 279747
gxine (0.4-rc1) urgency=high
* New upstream release.
- vdr support (requires vdr xine plugin).
- added i18n support. German translation is up-to-date.
- full-screen crash fix
(closes: #203779)
- screensaver-stopping restricted to fullscreen
(closes: #215320)
- libgnomevfs loading
(closes: #221509)
- track currently-played item when editin playlist (closes: #225853)
- rewritten man page (no longer mentions -h)
(closes: #226645)
- added a MIME types file
(closes: #228170)
- fixed debug builds
(closes: #228185)
- combined play/pause function
(closes: #251513)
- don't report missing config files
- improved/debugged keybindings editor
(closes: #257480)
- generic JS menu function
(closes: #257493)
- fixed prefs crash
- install example lircrc and mediamarks files
(closes: #275733)
- fixed http fetcher crash if $http_proxy is set
(closes: #279745)
- fixed http fetcher buffer overflow
(closes: #279747)
- buildable with external spidermonkey library (libsmjs).
* Build-deps made more specific than &xlibs-dev&.
(closes: #257474)
* NMU patch not needed (fresh ./configure etc.)
(closes: #276739)
9d1d70a44bd5fab9266ccc 582 graphics optional gxine_0.4-rc1.dsc
8309fb2dff4d8f7eeedd9ad4eadab62f 1269310 graphics optional gxine_0.4-rc1.tar.gz
e22eeae1bc46fd86d239ba 254128 graphics optional
gxine_0.4-rc1_powerpc.deb
f9607503ffdff7b94edbdbd7973aed34 5996 graphics optional
gnome-xine_0.4-rc1_all.deb
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.5 (GNU/Linux)
iD8DBQFBpIKsGlPdX3lx7w8RAkUrAKCYG2IQ36qNfhulZy6l4C02p+tFhACeMwFE
qQdgbIedauQYPnKnXxzosAo=
-----END PGP SIGNATURE-----
To UNSUBSCRIBE, email to
with a subject of &unsubscribe&. Trouble? Contact
&Prev&in&Thread]
Current&Thread
[Next&in&Thread&
Bug#257480: marked as done (gxine: improved keybindings editing),
Debian Bug Tracking System&&=
Previous&by&Date:&
, Debian Bug Tracking System
Next&by&Date:&
, Debian Bug Tracking System
Previous&by&Thread:&
, Debian Bug Tracking System
Next&by&Thread:&
, Debian Bug Tracking System}

我要回帖

更多关于 480÷3等于多少 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信