X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon-note.c;h=48919a1bd152e63dbdcb7426bffb77a4f3271e75;hb=3ce1b9e048661ffb4ea2d2adfc6cb992318e8e6d;hp=1d7df3f5f0b03958e6900feae74ea4c3a127da8c;hpb=c1df5dc9d25eade089d312d4466be53e6a74b1d3;p=hildon diff --git a/src/hildon-note.c b/src/hildon-note.c index 1d7df3f..48919a1 100644 --- a/src/hildon-note.c +++ b/src/hildon-note.c @@ -60,36 +60,29 @@ #include #endif -#include "hildon-note.h" -#include -#include -#include -#include -#include -#include +#include +#include #include +#include +#include +#include + +#undef HILDON_DISABLE_DEPRECATED + +#include "hildon-note.h" #include "hildon-defines.h" #include "hildon-sound.h" #include "hildon-banner.h" #include "hildon-enum-types.h" -#include -#include -#include -#include #include "hildon-note-private.h" + #define CONFIRMATION_SOUND_PATH \ "/usr/share/sounds/ui-confirmation_note.wav" #define INFORMATION_SOUND_PATH \ "/usr/share/sounds/ui-information_note.wav" -#define HILDON_NOTE_CONFIRMATION_ICON \ - "qgn_note_confirm" - -#define HILDON_NOTE_INFORMATION_ICON \ - "qgn_note_info" - #define _(String) dgettext("hildon-libs", String) static void @@ -104,16 +97,6 @@ hildon_note_rebuild (HildonNote *note); static void hildon_note_finalize (GObject *obj_self); -static gboolean -hildon_note_button_release (GtkWidget *widget, - GdkEventButton *event); - -static void -hildon_note_map (GtkWidget *widget); - -static void -hildon_note_unmap (GtkWidget *widget); - static void hildon_note_realize (GtkWidget *widget); @@ -146,32 +129,6 @@ enum static GtkDialogClass* parent_class; -static GdkWindow * -grab_transfer_window_get (GtkWidget *widget) -{ - GdkWindow *window; - GdkWindowAttr attributes; - gint attributes_mask; - - attributes.x = 0; - attributes.y = 0; - attributes.width = 10; - attributes.height = 10; - attributes.window_type = GDK_WINDOW_TEMP; - attributes.wclass = GDK_INPUT_ONLY; - attributes.override_redirect = TRUE; - attributes.event_mask = 0; - - attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_NOREDIR; - - window = gdk_window_new (gtk_widget_get_root_window (widget), - &attributes, attributes_mask); - gdk_window_set_user_data (window, widget); - - gdk_window_show (window); - - return window; -} static void hildon_note_set_property (GObject *object, @@ -204,13 +161,17 @@ hildon_note_set_property (GObject *object, break; case PROP_HILDON_NOTE_ICON: - gtk_image_set_from_icon_name (GTK_IMAGE (priv->icon), - g_value_get_string(value), HILDON_ICON_SIZE_BIG_NOTE); + if (priv->icon) { + g_free (priv->icon); + } + priv->icon = g_value_dup_string (value); break; case PROP_HILDON_NOTE_STOCK_ICON: - gtk_image_set_from_stock (GTK_IMAGE (priv->icon), - g_value_get_string (value), HILDON_ICON_SIZE_BIG_NOTE); + if (priv->stock_icon) { + g_free (priv->stock_icon); + } + priv->stock_icon = g_value_dup_string (value); break; case PROP_HILDON_NOTE_PROGRESSBAR: @@ -260,11 +221,11 @@ hildon_note_get_property (GObject *object, break; case PROP_HILDON_NOTE_ICON: - g_object_get_property (G_OBJECT (priv->icon), "icon-name", value); + g_value_set_string (value, priv->icon); break; case PROP_HILDON_NOTE_STOCK_ICON: - g_object_get_property (G_OBJECT (priv->icon), "stock", value); + g_value_set_string (value, priv->stock_icon); break; case PROP_HILDON_NOTE_PROGRESSBAR: @@ -322,9 +283,6 @@ hildon_note_class_init (HildonNoteClass *class) object_class->finalize = hildon_note_finalize; object_class->set_property = hildon_note_set_property; object_class->get_property = hildon_note_get_property; - widget_class->button_release_event = hildon_note_button_release; - widget_class->map = hildon_note_map; - widget_class->unmap = hildon_note_unmap; widget_class->realize = hildon_note_realize; g_object_class_install_property (object_class, @@ -353,6 +311,8 @@ hildon_note_class_init (HildonNoteClass *class) * HildonNote:icon: * * Icon for the note. + * + * Deprecated: Since 2.2 */ g_object_class_install_property (object_class, PROP_HILDON_NOTE_ICON, @@ -366,6 +326,8 @@ hildon_note_class_init (HildonNoteClass *class) * HildonNote:stock-icon: * * Stock icon name for the note. + * + * Deprecated: Since 2.2 */ g_object_class_install_property (object_class, PROP_HILDON_NOTE_STOCK_ICON, @@ -397,19 +359,20 @@ hildon_note_init (HildonNote *dialog) priv->label = gtk_label_new (NULL); gtk_label_set_line_wrap (GTK_LABEL (priv->label), TRUE); - - priv->icon = gtk_image_new (); - priv->close_if_pressed_outside = FALSE; - priv->transfer_window = NULL; + + priv->icon = NULL; + priv->stock_icon = NULL; /* Acquire real references to our internal children, since they are not nessecarily packed into container in each layout */ g_object_ref_sink (priv->label); - g_object_ref_sink (priv->icon); gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + + /* We use special hint to turn the note into information notification. */ + gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_NOTIFICATION); } @@ -425,8 +388,14 @@ hildon_note_finalize (GObject *obj_self) if (priv->label) g_object_unref (priv->label); - if (priv->icon) - g_object_unref (priv->icon); + if (priv->icon) { + g_free (priv->icon); + priv->icon = NULL; + } + if (priv->stock_icon) { + g_free (priv->stock_icon); + priv->stock_icon = NULL; + } if (priv->progressbar) g_object_unref (priv->progressbar); @@ -438,90 +407,6 @@ hildon_note_finalize (GObject *obj_self) } -static gboolean -hildon_note_button_release (GtkWidget *widget, - GdkEventButton *event) -{ - int x, y; - gboolean info_note, released_outside; - HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget); - - gdk_window_get_position (widget->window, &x, &y); - - /* Whether the button has been released outside the widget */ - released_outside = (event->x_root < x || event->x_root > x + widget->allocation.width || - event->y_root < y || event->y_root > y + widget->allocation.height); - - /* Information notes are also closed by tapping on them */ - info_note = (priv->note_n == HILDON_NOTE_TYPE_INFORMATION || - priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME); - - if (info_note || (released_outside && priv->close_if_pressed_outside)) { - gtk_dialog_response (GTK_DIALOG (widget), GTK_RESPONSE_CANCEL); - } - - if (GTK_WIDGET_CLASS (parent_class)->button_release_event) { - return GTK_WIDGET_CLASS (parent_class)->button_release_event (widget, event); - } else { - return FALSE; - } -} - -static void -hildon_note_map (GtkWidget *widget) -{ - HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget); - g_assert (priv); - - /* Map the window */ - GTK_WIDGET_CLASS (parent_class)->map (widget); - - if (priv->transfer_window == NULL && priv->close_if_pressed_outside) { - gboolean has_grab = FALSE; - - priv->transfer_window = grab_transfer_window_get (widget); - - if (gdk_pointer_grab (priv->transfer_window, TRUE, - GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | - GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | - GDK_POINTER_MOTION_MASK, NULL, NULL, - GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS) { - if (gdk_keyboard_grab (priv->transfer_window, TRUE, - GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS) { - has_grab = TRUE; - } else { - gdk_display_pointer_ungrab (gtk_widget_get_display (widget), - GDK_CURRENT_TIME); - } - } - - if (has_grab) { - gtk_grab_add (widget); - } else { - gdk_window_destroy (priv->transfer_window); - priv->transfer_window = NULL; - } - } -} - -static void -hildon_note_unmap (GtkWidget *widget) -{ - HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget); - g_assert (priv); - - if (priv->transfer_window != NULL) { - /* Remove the grab */ - gdk_display_pointer_ungrab (gtk_widget_get_display (widget), - GDK_CURRENT_TIME); - gtk_grab_remove (widget); - - /* Destroy the transfer window */ - gdk_window_destroy (priv->transfer_window); - priv->transfer_window = NULL; - } -} - static void hildon_note_realize (GtkWidget *widget) { @@ -543,9 +428,6 @@ hildon_note_realize (GtkWidget *widget) priv->sound_signal_handler = g_signal_connect_after(widget, "expose-event", G_CALLBACK (sound_handling), NULL); - /* We use special hint to turn the note into information notification. */ - gdk_window_set_type_hint (widget->window, GDK_WINDOW_TYPE_HINT_NOTIFICATION); - /* Set the _HILDON_NOTIFICATION_TYPE property so Matchbox places the window correctly */ display = gdk_drawable_get_display (widget->window); atom = gdk_x11_get_xatom_by_name_for_display (display, "_HILDON_NOTIFICATION_TYPE"); @@ -590,7 +472,6 @@ hildon_note_rebuild (HildonNote *note) /* Reuse exiting content widgets for new layout */ unpack_widget (priv->label); - unpack_widget (priv->icon); unpack_widget (priv->progressbar); /* Destroy old layout and buttons */ @@ -607,39 +488,29 @@ hildon_note_rebuild (HildonNote *note) priv->cancelButton = NULL; } - /* By default the note won't be closed when pressing outside */ - priv->close_if_pressed_outside = FALSE; - /* Add needed buttons and images for each note type */ switch (priv->note_n) { case HILDON_NOTE_TYPE_CONFIRMATION: priv->okButton = gtk_dialog_add_button (dialog, - _("ecdg_bd_confirmation_note_ok"), GTK_RESPONSE_OK); + _("wdgt_bd_yes"), GTK_RESPONSE_OK); priv->cancelButton = gtk_dialog_add_button (dialog, - _("ecdg_bd_confirmation_note_cancel"), GTK_RESPONSE_CANCEL); - - /* Fall through */ - case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON: - gtk_image_set_from_icon_name (GTK_IMAGE (priv->icon), - HILDON_NOTE_CONFIRMATION_ICON, - HILDON_ICON_SIZE_BIG_NOTE); - break; - - case HILDON_NOTE_TYPE_INFORMATION_THEME: - case HILDON_NOTE_TYPE_INFORMATION: - priv->close_if_pressed_outside = TRUE; - gtk_image_set_from_icon_name (GTK_IMAGE (priv->icon), - HILDON_NOTE_INFORMATION_ICON, - HILDON_ICON_SIZE_BIG_NOTE); + _("wdgt_bd_no"), GTK_RESPONSE_CANCEL); + gtk_widget_show (priv->cancelButton); + gtk_widget_set_no_show_all (priv->cancelButton, FALSE); break; case HILDON_NOTE_TYPE_PROGRESSBAR: priv->cancelButton = gtk_dialog_add_button (dialog, - _("ecdg_bd_cancel_note_cancel"), GTK_RESPONSE_CANCEL); + _("wdgt_bd_stop"), GTK_RESPONSE_CANCEL); + gtk_widget_show (priv->cancelButton); + gtk_widget_set_no_show_all (priv->cancelButton, FALSE); IsHorizontal = FALSE; break; + case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON: + case HILDON_NOTE_TYPE_INFORMATION_THEME: + case HILDON_NOTE_TYPE_INFORMATION: default: break; } @@ -649,12 +520,6 @@ hildon_note_rebuild (HildonNote *note) priv->box = gtk_hbox_new (FALSE, HILDON_MARGIN_DEFAULT); gtk_container_add (GTK_CONTAINER (dialog->vbox), priv->box); - if (priv->icon) { - GtkWidget *alignment = gtk_alignment_new (0, 0, 0, 0); - - gtk_box_pack_start (GTK_BOX (priv->box), alignment, FALSE, FALSE, 0); - gtk_container_add (GTK_CONTAINER (alignment), priv->icon); - } gtk_box_pack_start (GTK_BOX (priv->box), priv->label, TRUE, TRUE, 0); } else { @@ -702,6 +567,7 @@ hildon_note_new_confirmation_add_buttons (GtkWindow *parent, va_list args; char *message; int value; + GtkWidget *button; g_return_val_if_fail (description != NULL, NULL); @@ -709,7 +575,6 @@ hildon_note_new_confirmation_add_buttons (GtkWindow *parent, g_object_new (HILDON_TYPE_NOTE, "note-type", HILDON_NOTE_TYPE_CONFIRMATION_BUTTON, "description", description, - "icon", HILDON_NOTE_CONFIRMATION_ICON, NULL); if (parent != NULL) @@ -726,7 +591,13 @@ hildon_note_new_confirmation_add_buttons (GtkWindow *parent, } value = va_arg (args, int); - gtk_dialog_add_button (GTK_DIALOG (conf_note), message, value); + button = gtk_dialog_add_button (GTK_DIALOG (conf_note), message, value); + /* maemo-gtk is going to set the "no-show-all" property all + cancel/close-like buttons to TRUE, so that they are not shown. On + the other hand, this confirmation note with custom buttons should + not obey this rule, so we need to make sure they are shown. */ + gtk_widget_show (button); + gtk_widget_set_no_show_all (button, FALSE); } va_end (args); @@ -743,9 +614,9 @@ hildon_note_new_confirmation_add_buttons (GtkWindow *parent, * correctly. In GTK the X window ID can be checked using * GDK_WINDOW_XID(GTK_WIDGET(parent)->window). * @description: the message to confirm - * - * Create a new confirmation note. Confirmation note has text (description) - * that you specify, two buttons and a default confirmation stock icon. + * + * Create a new confirmation note. Confirmation note has a text (description) + * that you specify and two buttons. * * Returns: a #GtkWidget pointer of the note */ @@ -753,8 +624,19 @@ GtkWidget* hildon_note_new_confirmation (GtkWindow *parent, const gchar *description) { - return hildon_note_new_confirmation_with_icon_name - (parent, description, HILDON_NOTE_CONFIRMATION_ICON); + GtkWidget *dialog = NULL; + + g_return_val_if_fail (description != NULL, NULL); + + dialog = g_object_new (HILDON_TYPE_NOTE, + "note-type", + HILDON_NOTE_TYPE_CONFIRMATION, + "description", description, NULL); + + if (parent != NULL) + gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); + + return dialog; } /** @@ -767,8 +649,11 @@ hildon_note_new_confirmation (GtkWindow *parent, * @description: the message to confirm * @icon_name: icon to be displayed. If NULL, default icon is used. * - * Create a new confirmation note. Confirmation note has text(description) - * that you specify, two buttons and an icon. + * Create a new confirmation note. Confirmation note has a text (description) + * that you specify and two buttons. + * + * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set + * with this function will be ignored. Use hildon_note_new_confirmation() instead. * * Returns: a #GtkWidget pointer of the note */ @@ -777,20 +662,7 @@ hildon_note_new_confirmation_with_icon_name (GtkWindow *parent, const gchar *description, const gchar *icon_name) { - GtkWidget *dialog = NULL; - - g_return_val_if_fail (description != NULL, NULL); - - dialog = g_object_new (HILDON_TYPE_NOTE, - "note-type", - HILDON_NOTE_TYPE_CONFIRMATION, - "description", description, "icon", - icon_name, NULL); - - if (parent != NULL) - gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); - - return dialog; + return hildon_note_new_confirmation (parent, description); } /** @@ -802,8 +674,8 @@ hildon_note_new_confirmation_with_icon_name (GtkWindow *parent, * GDK_WINDOW_XID(GTK_WIDGET(parent)->window). * @description: the message to confirm * - * Create a new information note. Information note has a text(description) - * that you specify, an OK button and an icon. + * Create a new information note. Information note has a text (description) + * that you specify and an OK button. * * Returns: a #GtkWidget pointer of the note */ @@ -811,8 +683,19 @@ GtkWidget* hildon_note_new_information (GtkWindow *parent, const gchar *description) { - return hildon_note_new_information_with_icon_name - (parent, description, HILDON_NOTE_INFORMATION_ICON); + GtkWidget *dialog = NULL; + + g_return_val_if_fail (description != NULL, NULL); + + dialog = g_object_new (HILDON_TYPE_NOTE, + "note-type", + HILDON_NOTE_TYPE_INFORMATION_THEME, + "description", description, NULL); + + if (parent != NULL) + gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); + + return dialog; } /** @@ -828,6 +711,9 @@ hildon_note_new_information (GtkWindow *parent, * Create a new information note. Information note has text(description) * that you specify, an OK button and an icon. * + * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set + * with this function will be ignored. Use hildon_note_new_information() instead. + * * Returns: a #GtkWidget pointer of the note */ GtkWidget* @@ -835,21 +721,7 @@ hildon_note_new_information_with_icon_name (GtkWindow * parent, const gchar *description, const gchar *icon_name) { - GtkWidget *dialog = NULL; - - g_return_val_if_fail (description != NULL, NULL); - g_return_val_if_fail (icon_name != NULL, NULL); - - dialog = g_object_new (HILDON_TYPE_NOTE, - "note-type", - HILDON_NOTE_TYPE_INFORMATION_THEME, - "description", description, - "icon", icon_name, NULL); - - if (parent != NULL) - gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); - - return dialog; + return hildon_note_new_information (parent, description); } /* FIXME This documentation string LIES! */ @@ -918,7 +790,7 @@ hildon_note_set_button_text (HildonNote *note, if (priv->okButton) { gtk_button_set_label (GTK_BUTTON (priv->okButton), text); gtk_button_set_label (GTK_BUTTON (priv->cancelButton), - _("ecdg_bd_confirmation_note_cancel")); + _("wdgt_bd_no")); } else { gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text); }