[Buoh-dev] =?ISO-8859-1?Q?men=FAs?=



El lun, 12-09-2005 a las 19:17 +0200, Pablo Arroyo escribi?:
> Bueno, os mando el parche para que el menu Comic y el popup esten
> consistentes.

Comento abajo

> saludos
> 

> Index: src/buoh-properties-dialog.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh-properties-dialog.c,v
> retrieving revision 1.4
> diff -u -r1.4 buoh-properties-dialog.c
> --- src/buoh-properties-dialog.c        10 Sep 2005 10:33:24
> -0000      1.4
> +++ src/buoh-properties-dialog.c        12 Sep 2005 16:24:41 -0000
> @@ -115,7 +115,7 @@
>         gtk_misc_set_alignment (GTK_MISC (label_author), 0, 0.5);
>  
>         label_uri = gtk_label_new (NULL);       
> -       gtk_label_set_markup (GTK_LABEL (label_uri), "<b>Link:</b>");
> +       gtk_label_set_markup (GTK_LABEL (label_uri),
> "<b>Location:</b>");
>         gtk_misc_set_alignment (GTK_MISC (label_uri), 0, 0.5);
>  
>         label_language = gtk_label_new (NULL);  
> Index: src/buoh-window.c
> ===================================================================
> RCS file: /cvsroot/buoh/buoh/src/buoh-window.c,v
> retrieving revision 1.12
> diff -u -r1.12 buoh-window.c
> --- src/buoh-window.c   11 Sep 2005 11:20:02 -0000      1.12
> +++ src/buoh-window.c   12 Sep 2005 16:24:41 -0000
> @@ -57,11 +57,21 @@
>  static void buoh_window_class_init                  (BuohWindowClass
> *klass);
>  static void buoh_window_finalize                    (GObject
> *object);
>  
> +static void buoh_window_comic_add                   (gpointer gdata);
> +static void buoh_window_comic_delete                (gpointer gdata);
> +static void buoh_window_comic_copy                  (gpointer gdata);
> +static void buoh_window_comic_save                  (gpointer gdata);
> +static void buoh_window_comic_properties            (gpointer gdata);
> +

Estas funciones no deber?an tener este prototipo y me explico. Estamos
programando POO, y puesto que estamos en un lenguaje no OO no podemos
hacer cosas como objeto.metodo () Pero su equivalente es metodo
(objeto, .........); 
Lo que quiero decir es que estas funciones en POO son m?todos de la
clase BuohWindow, por lo que su prototipo deber?a ser metodo (BuohWindow
*window, loquesea); que ser?a el equivalente a window.metodo (loquesea);
Incluso aunque no vayas ausar para nada el puntero this o self (es decir
el primer par?metro) es conveniente ponerlo siempre de forma que quede
claro que se trata de m?todos de clase. 

En cualquier caso creo que estas funciones no son necesarias. Gracias a
que el prototipo e los callbacks del popup y del menu son parecidos se
puede utilizar el mismo callback. Gracias a que ambos heredan de
GtkWidget puedes usar un callback en la forma

void function_cb (GtkWidget *widget, gpointer gdata);

tanto para el menu como para el popup y usar exactamente el mismo
callback, de forma que todo el c?digo vaya en los callbacks directamente
sin necesidad de funciones auxiliares.

>  /* Callbacks */
>  static void buoh_window_menu_quit_cb                    (GtkMenuItem
> *menuitem,
>                                                          gpointer
> gdata);
>  static void buoh_window_menu_add_cb                     (GtkMenuItem
> *menuitem,
>                                                          gpointer
> gdata);
> +static void buoh_window_menu_delete_cb                  (GtkMenuItem
> *menuitem,
> +                                                        gpointer
> gdata);
> +static void buoh_window_menu_copy_cb                    (GtkMenuItem
> *menuitem,
> +                                                        gpointer
> gdata);
>  static void buoh_window_menu_save_cb                    (GtkMenuItem
> *menuitem,
>                                                          gpointer
> gdata);
>  static void buoh_window_menu_properties_cb              (GtkMenuItem
> *menuitem,
> @@ -96,7 +106,11 @@
>                                                          gpointer
> gdata);
>  static void     buoh_window_popup_delete_cb             (GtkWidget
> *widget,
>                                                          gpointer
> gdata);
> -static void     buoh_window_popup_copy_uri_cb           (GtkWidget
> *widget,
> +static void     buoh_window_popup_add_cb                (GtkWidget
> *widget,
> +                                                        gpointer
> gdata);
> +static void     buoh_window_popup_save_cb               (GtkWidget
> *widget,
> +                                                        gpointer
> gdata);
> +static void     buoh_window_popup_copy_cb               (GtkWidget
> *widget,
>                                                          gpointer
> gdata);
>  
>  /* Sensitivity */
> @@ -120,21 +134,27 @@
>  
>  /* popup menu values */
>  static GtkActionEntry popup_menu_items [] = {
> -       { "Properties",  GTK_STOCK_PROPERTIES, N_("_Properties"),
> -         NULL, NULL, G_CALLBACK (buoh_window_popup_properties_cb) },
> -       { "CopyURI",     GTK_STOCK_COPY,       N_("_Copy comic URI"),
> -         NULL, NULL, G_CALLBACK (buoh_window_popup_copy_uri_cb) },
> +       { "Add",      GTK_STOCK_ADD,     N_("_Add"),
> +         NULL, NULL, G_CALLBACK (buoh_window_popup_add_cb) },
>         { "Delete",      GTK_STOCK_DELETE,     N_("_Delete"),
> -         NULL, NULL, G_CALLBACK (buoh_window_popup_delete_cb) }
> +         NULL, NULL, G_CALLBACK (buoh_window_popup_delete_cb) },
> +       { "Copy",     GTK_STOCK_COPY,       N_("_Copy comic
> location"),
> +         NULL, NULL, G_CALLBACK (buoh_window_popup_copy_cb) },
> +       { "Save",     GTK_STOCK_SAVE,       N_("_Save a copy"),
> +         NULL, NULL, G_CALLBACK (buoh_window_popup_save_cb) }, 
> +       { "Properties",  GTK_STOCK_PROPERTIES, N_("_Properties"),
> +         NULL, NULL, G_CALLBACK (buoh_window_popup_properties_cb) }
>  };
>  
>  static const gchar *popup_ui_description =
>  "<ui>"
>  "  <popup name='MainMenu'>"
> -"    <menuitem action='Properties'/>"
> -"    <menuitem action='CopyURI'/>"
> -"    <separator/>"
> +"    <menuitem action='Add'/>"
>  "    <menuitem action='Delete'/>"
> +"    <separator/>"
> +"    <menuitem action='Copy'/>"
> +"    <menuitem action='Save'/>"
> +"    <menuitem action='Properties'/>"
>  "  </popup>"
>  "</ui>";
>  
> @@ -241,6 +261,14 @@
>         g_signal_connect (G_OBJECT (widget), "activate",
>                           G_CALLBACK (buoh_window_menu_add_cb),
>                           (gpointer) buoh_window);
> +       widget = glade_xml_get_widget (buoh_window->priv->gui,
> "menu_delete");
> +       g_signal_connect (G_OBJECT (widget), "activate",
> +                         G_CALLBACK (buoh_window_menu_delete_cb),
> +                         (gpointer) buoh_window);
> +       widget = glade_xml_get_widget (buoh_window->priv->gui,
> "menu_copy");
> +       g_signal_connect (G_OBJECT (widget), "activate",
> +                         G_CALLBACK (buoh_window_menu_copy_cb),
> +                         (gpointer) buoh_window);      
>         widget = glade_xml_get_widget (buoh_window->priv->gui,
> "menu_save");
>         g_signal_connect (G_OBJECT (widget), "activate",
>                           G_CALLBACK (buoh_window_menu_save_cb),
> @@ -358,15 +386,7 @@
>  }
>  
>  static void
> -buoh_window_menu_quit_cb (GtkMenuItem *menuitem, gpointer gdata)
> -{
> -       BuohWindow *window = BUOH_WINDOW (gdata);
> -
> -       gtk_widget_destroy (GTK_WIDGET (window));
> -}
> -
> -static void
> -buoh_window_menu_add_cb (GtkMenuItem *menuitem, gpointer gdata)
> +buoh_window_comic_add (gpointer gdata)
>  {
>         BuohWindow *window = BUOH_WINDOW (gdata);
>  
> @@ -378,11 +398,72 @@
>                                               GTK_WINDOW (window));
>         }
>  
> -       gtk_widget_show (window->priv->add_dialog);
> +       gtk_widget_show (window->priv->add_dialog);     
>  }
>  
>  static void
> -buoh_window_menu_save_cb (GtkMenuItem *menuitem, gpointer gdata)
> +buoh_window_comic_delete (gpointer gdata)
> +{
> +       BuohWindow   *window = BUOH_WINDOW (gdata);
> +       GtkTreeModel *model = buoh_get_comics_model (BUOH);
> +       GtkTreeIter   iter;
> +       BuohComic    *comic, *current_comic;
> +       gchar        *comic_id, *id;
> +       gboolean      valid;
> +
> +       current_comic = buoh_view_get_comic (window->priv->view);
> +
> +       if (current_comic) {
> +               comic_id = buoh_comic_get_id (current_comic);
> +
> +               valid = gtk_tree_model_get_iter_first (model, &iter);
> +
> +               while (valid) {
> +                       gtk_tree_model_get (model, &iter,
> +                                           COMIC_LIST_COMIC, &comic,
> +                                           -1);
> +                       id = buoh_comic_get_id (comic);
> +
> +                       if (g_ascii_strcasecmp (comic_id, id) == 0) {
> +                               buoh_comic_list_clear_selection
> (window->priv->comic_list);
> +                               gtk_list_store_set (GTK_LIST_STORE
> (model), &iter,
> +
> COMIC_LIST_VISIBLE, FALSE,
> +                                                   -1);
> +                               valid = FALSE;
> +                       } else {
> +                               valid = gtk_tree_model_iter_next
> (model, &iter);
> +                       }
> +
> +                       g_free (id);
> +               }
> +
> +               g_free (comic_id);
> +       }       
> +}
> +
> +static void
> +buoh_window_comic_copy (gpointer gdata)
> +{
> +       BuohWindow *window = BUOH_WINDOW (gdata);
> +       BuohComic  *comic = buoh_view_get_comic (window->priv->view);
> +       gchar      *uri;
> +
> +       if (comic) {
> +               uri = buoh_comic_get_uri (comic);
> +               buoh_debug ("Copy %s to clipboard", uri);
> +
> +               gtk_clipboard_set_text (gtk_clipboard_get (GDK_NONE),
> uri,
> +                                       g_utf8_strlen (uri, -1));
> +
> +               gtk_clipboard_set_text (gtk_clipboard_get
> (GDK_SELECTION_PRIMARY), uri,
> +                                       g_utf8_strlen (uri, -1));
> +
> +               g_free (uri);
> +       }       
> +}
> +
> +static void
> +buoh_window_comic_save (gpointer gdata)
>  {
>         GtkWidget     *chooser;
>         GtkFileFilter *filter;
> @@ -464,11 +545,11 @@
>         g_free (name);
>         g_free (page);
>         g_free (suggested);
> -       gtk_widget_destroy (chooser);
> +       gtk_widget_destroy (chooser);   
>  }
>  
>  static void
> -buoh_window_menu_properties_cb (GtkMenuItem *menuitem, gpointer
> gdata)
> +buoh_window_comic_properties (gpointer gdata)
>  {
>         BuohWindow *window = BUOH_WINDOW (gdata);
>         BuohComic  *comic = buoh_view_get_comic (window->priv->view);
> @@ -485,7 +566,45 @@
>                 }
>  
>                 gtk_widget_show (window->priv->properties);
> -       }
> +       }       
> +}
> +
> +static void
> +buoh_window_menu_quit_cb (GtkMenuItem *menuitem, gpointer gdata)
> +{
> +       BuohWindow *window = BUOH_WINDOW (gdata);
> +
> +       gtk_widget_destroy (GTK_WIDGET (window));
> +}
> +
> +static void
> +buoh_window_menu_add_cb (GtkMenuItem *menuitem, gpointer gdata)
> +{
> +       buoh_window_comic_add (gdata);
> +}
> +
> +static void
> +buoh_window_menu_delete_cb (GtkMenuItem *menuitem, gpointer gdata)
> +{
> +       buoh_window_comic_delete (gdata);
> +}
> +
> +static void
> +buoh_window_menu_copy_cb (GtkMenuItem *menuitem, gpointer gdata)
> +{
> +       buoh_window_comic_copy (gdata);
> +}
> +
> +static void
> +buoh_window_menu_save_cb (GtkMenuItem *menuitem, gpointer gdata)
> +{
> +       buoh_window_comic_save (gdata);
> +}
> +
> +static void
> +buoh_window_menu_properties_cb (GtkMenuItem *menuitem, gpointer
> gdata)
> +{
> +       buoh_window_comic_properties (gdata);
>  }
>  
>  static void
> @@ -641,6 +760,8 @@
>         buoh_window_zoom_in_set_sensitive (window, sensitive);
>         buoh_window_zoom_out_set_sensitive (window, sensitive);
>         buoh_window_normal_size_set_sensitive (window, sensitive);
> +       buoh_window_set_sensitive (window, "menu_delete", sensitive);
> +       buoh_window_set_sensitive (window, "menu_copy", sensitive);
>         buoh_window_set_sensitive (window, "menu_properties",
> sensitive);
>  }
>  
> @@ -727,81 +848,29 @@
>  static void
>  buoh_window_popup_properties_cb (GtkWidget *widget, gpointer gdata)
>  {
> -       BuohWindow *window = BUOH_WINDOW (gdata);
> -       BuohComic  *comic = buoh_view_get_comic (window->priv->view);
> -
> -       if (comic) {
> -               if (!window->priv->properties) {
> -                       window->priv->properties =
> buoh_properties_dialog_new ();
> -                       buoh_properties_dialog_set_comic
> (BUOH_PROPERTIES_DIALOG (window->priv->properties),
> -                                                         comic);
> -                       g_object_add_weak_pointer (G_OBJECT
> (window->priv->properties),
> -                                                  (gpointer *)
> &(window->priv->properties));
> -                       gtk_window_set_transient_for (GTK_WINDOW
> (window->priv->properties),
> -                                                     GTK_WINDOW
> (window));
> -               }
> -
> -               gtk_widget_show (window->priv->properties);
> -       }
> +       buoh_window_comic_properties (gdata);
>  }
>  
>  static void
>  buoh_window_popup_delete_cb (GtkWidget *widget, gpointer gdata)
>  {
> -       BuohWindow   *window = BUOH_WINDOW (gdata);
> -       GtkTreeModel *model = buoh_get_comics_model (BUOH);
> -       GtkTreeIter   iter;
> -       BuohComic    *comic, *current_comic;
> -       gchar        *comic_id, *id;
> -       gboolean      valid;
> -
> -       current_comic = buoh_view_get_comic (window->priv->view);
> -
> -       if (current_comic) {
> -               comic_id = buoh_comic_get_id (current_comic);
> -
> -               valid = gtk_tree_model_get_iter_first (model, &iter);
> -
> -               while (valid) {
> -                       gtk_tree_model_get (model, &iter,
> -                                           COMIC_LIST_COMIC, &comic,
> -                                           -1);
> -                       id = buoh_comic_get_id (comic);
> -
> -                       if (g_ascii_strcasecmp (comic_id, id) == 0) {
> -                               buoh_comic_list_clear_selection
> (window->priv->comic_list);
> -                               gtk_list_store_set (GTK_LIST_STORE
> (model), &iter,
> -
> COMIC_LIST_VISIBLE, FALSE,
> -                                                   -1);
> -                               valid = FALSE;
> -                       } else {
> -                               valid = gtk_tree_model_iter_next
> (model, &iter);
> -                       }
> -
> -                       g_free (id);
> -               }
> -
> -               g_free (comic_id);
> -       }
> +       buoh_window_comic_delete (gdata);
>  }
>  
>  static void
> -buoh_window_popup_copy_uri_cb (GtkWidget *widget, gpointer gdata)
> +buoh_window_popup_copy_cb (GtkWidget *widget, gpointer gdata)
>  {
> -       BuohWindow *window = BUOH_WINDOW (gdata);
> -       BuohComic  *comic = buoh_view_get_comic (window->priv->view);
> -       gchar      *uri;
> -
> -       if (comic) {
> -               uri = buoh_comic_get_uri (comic);
> -               buoh_debug ("Copy %s to clipboard", uri);
> -
> -               gtk_clipboard_set_text (gtk_clipboard_get (GDK_NONE),
> uri,
> -                                       g_utf8_strlen (uri, -1));
> +       buoh_window_comic_copy (gdata);
> +}
>  
> -               gtk_clipboard_set_text (gtk_clipboard_get
> (GDK_SELECTION_PRIMARY), uri,
> -                                       g_utf8_strlen (uri, -1));
> +static void
> +buoh_window_popup_add_cb (GtkWidget *widget, gpointer gdata)
> +{
> +       buoh_window_comic_add (gdata);
> +}
>  
> -               g_free (uri);
> -       }
> +static void
> +buoh_window_popup_save_cb (GtkWidget *widget, gpointer gdata)
> +{
> +       buoh_window_comic_save (gdata);
>  }

Creo que no lo has comprobado, pero tendr?as que deshabilitar en el
popup la opci?n de guardar una copia si la carga del comic fall? y
durante la carga del comic. 

El sensitive no es exactamente igual en el menu que en el popup. El menu
hace referencia al comic que se est? viendo en ese momento, por eso la
opci?n de propiedades debe estar deshabilitada. Sin embargo el popup
hace referencia a un elemento de la lista, por lo que se pueden mostrar
sus propiedades incluso aunque estemos en la vista de error, ya que esa
info si que est? disponible. El caso de guardar un copia debe estar
deshabilitado en ambos casos si estamos en la vista de error y el de
borrar solo en el menu, pero no en el popup.

Salu2
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 Carlos Garcia Campos a.k.a. KaL
   elkalmail yahoo es
   carlosgc gnome org
   http://carlosgc.linups.org
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=             
PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x523E6462
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada
	digitalmente
Url : http://forge.novell.com/pipermail/buoh-dev/attachments/20050912/8dc84c8e/attachment.pgp


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]