2 * This file is a part of hildon
4 * Copyright (C) 2005, 2006 Nokia Corporation, all rights reserved.
6 * Contact: Rodrigo Novo <rodrigo.novo@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27 * @short_description: A widget to ask confirmation from the user.
29 * #HildonNote is a convenient way to prompt users for a small amount of
30 * input. A simple note contains an information text and, in case of
31 * confirmation notes, it shows buttons to confirm or cancel. It also can
32 * include a progress bar.
34 * This widget provides convenient functions to create either
35 * information notes, confirmation notes or cancel notes, which are
36 * useful to show the progress of a requested task allowing the user
39 * To create information notes you can use
40 * hildon_note_new_information(). hildon_note_new_confirmation()
41 * creates a note with a text and two buttons to confirm or
42 * cancel. Note that it is possible to create a confirmation note with
43 * customized buttons by using
44 * hildon_note_new_confirmation_add_buttons().
46 * To create a note with a text, a progress bar and cancel button,
47 * hildon_note_new_cancel_with_progress_bar() can be used.
50 * <title>HildonNote example</title>
54 * show_confirmation_note (GtkWindow *parent)
58 * note = hildon_note_new_confirmation (parent, "Confirmation message...");
60 * retcode = gtk_dialog_run (GTK_DIALOG (note));
61 * gtk_widget_destroy (note);
63 * if (retcode == GTK_RESPONSE_OK) {
64 * g_debug ("User pressed 'OK' button'");
67 * g_debug ("User pressed 'Cancel' button");
83 #include <X11/Xatom.h>
86 #undef HILDON_DISABLE_DEPRECATED
88 #include "hildon-note.h"
89 #include "hildon-defines.h"
90 #include "hildon-sound.h"
91 #include "hildon-banner.h"
92 #include "hildon-enum-types.h"
93 #include "hildon-note-private.h"
95 #define HILDON_INFORMATION_NOTE_MIN_HEIGHT 140
97 #define HILDON_INFORMATION_NOTE_MARGIN 100
99 #define CONFIRMATION_SOUND_PATH \
100 "/usr/share/sounds/ui-confirmation_note.wav"
102 #define INFORMATION_SOUND_PATH \
103 "/usr/share/sounds/ui-information_note.wav"
105 #define _(String) dgettext("hildon-libs", String)
108 hildon_note_class_init (HildonNoteClass *class);
111 hildon_note_init (HildonNote *dialog);
114 hildon_note_rebuild (HildonNote *note);
117 hildon_note_rename (HildonNote *note);
120 hildon_note_finalize (GObject *obj_self);
123 hildon_note_realize (GtkWidget *widget);
126 hildon_note_unrealize (GtkWidget *widget);
129 label_size_request (GtkWidget *label,
134 hildon_note_set_property (GObject *object,
140 hildon_note_get_property (GObject *object,
146 on_show_cb (GtkWidget *widget,
149 sound_handling (gpointer data);
152 unpack_widget (GtkWidget *widget);
157 PROP_HILDON_NOTE_TYPE,
158 PROP_HILDON_NOTE_DESCRIPTION,
159 PROP_HILDON_NOTE_ICON,
160 PROP_HILDON_NOTE_PROGRESSBAR,
161 PROP_HILDON_NOTE_STOCK_ICON
164 static GtkDialogClass* parent_class;
167 event_box_press_event (GtkEventBox *event_box,
168 GdkEventButton *event,
171 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
173 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
174 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
175 gtk_dialog_response (note, GTK_RESPONSE_DELETE_EVENT);
183 hildon_note_set_property (GObject *object,
188 HildonNote *note = HILDON_NOTE (object);
189 HildonNotePrivate *priv;
192 priv = HILDON_NOTE_GET_PRIVATE (note);
197 case PROP_HILDON_NOTE_TYPE:
198 priv->note_n = g_value_get_enum (value);
199 hildon_note_rename (note);
200 hildon_note_rebuild (note);
203 case PROP_HILDON_NOTE_DESCRIPTION:
204 if (priv->original_description)
205 g_free (priv->original_description);
206 priv->original_description = g_value_dup_string (value);
208 gtk_label_set_text (GTK_LABEL (priv->label), priv->original_description);
209 /* FIXME Is the "original_description" used anywhere? */
213 case PROP_HILDON_NOTE_ICON:
217 priv->icon = g_value_dup_string (value);
220 case PROP_HILDON_NOTE_STOCK_ICON:
221 if (priv->stock_icon) {
222 g_free (priv->stock_icon);
224 priv->stock_icon = g_value_dup_string (value);
227 case PROP_HILDON_NOTE_PROGRESSBAR:
228 widget = g_value_get_object (value);
229 if (widget != priv->progressbar)
231 if (priv->progressbar)
232 g_object_unref (priv->progressbar);
234 priv->progressbar = widget;
238 g_object_ref (widget);
239 gtk_object_sink (GTK_OBJECT (widget));
242 hildon_note_rebuild (note);
247 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
253 hildon_note_get_property (GObject *object,
258 HildonNote *note = HILDON_NOTE (object);
259 HildonNotePrivate *priv;
261 priv = HILDON_NOTE_GET_PRIVATE (note);
265 case PROP_HILDON_NOTE_TYPE:
266 g_value_set_enum (value, priv->note_n);
269 case PROP_HILDON_NOTE_DESCRIPTION:
270 g_value_set_string (value, priv->original_description);
273 case PROP_HILDON_NOTE_ICON:
274 g_value_set_string (value, priv->icon);
277 case PROP_HILDON_NOTE_STOCK_ICON:
278 g_value_set_string (value, priv->stock_icon);
281 case PROP_HILDON_NOTE_PROGRESSBAR:
282 g_value_set_object (value, priv->progressbar);
286 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
292 * hildon_note_get_type:
294 * Returns GType for HildonNote.
296 * Returns: HildonNote type
299 hildon_note_get_type (void)
301 static GType dialog_type = 0;
304 static const GTypeInfo dialog_info = {
305 sizeof(HildonNoteClass),
306 NULL, /* base_init */
307 NULL, /* base_finalize */
308 (GClassInitFunc) hildon_note_class_init,
309 NULL, /* class_finalize */
310 NULL, /* class_data */
313 (GInstanceInitFunc) hildon_note_init
315 dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
323 hildon_note_class_init (HildonNoteClass *class)
325 GObjectClass *object_class = G_OBJECT_CLASS (class);
326 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
328 /* set the global parent_class */
329 parent_class = g_type_class_peek_parent (class);
331 g_type_class_add_private (class, sizeof (HildonNotePrivate));
333 object_class->finalize = hildon_note_finalize;
334 object_class->set_property = hildon_note_set_property;
335 object_class->get_property = hildon_note_get_property;
336 widget_class->realize = hildon_note_realize;
337 widget_class->unrealize = hildon_note_unrealize;
339 g_object_class_install_property (object_class,
340 PROP_HILDON_NOTE_TYPE,
341 g_param_spec_enum ("note-type",
343 "The type of the note dialog",
344 hildon_note_type_get_type (),
345 HILDON_NOTE_TYPE_CONFIRMATION,
346 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
349 * HildonNote:description:
351 * Description for the note.
353 g_object_class_install_property (object_class,
354 PROP_HILDON_NOTE_DESCRIPTION,
355 g_param_spec_string ("description",
357 "The text that appears in the note dialog",
366 * Deprecated: Since 2.2
368 g_object_class_install_property (object_class,
369 PROP_HILDON_NOTE_ICON,
370 g_param_spec_string ("icon",
372 "The name of the icon that appears in the note dialog",
377 * HildonNote:stock-icon:
379 * Stock icon name for the note.
381 * Deprecated: Since 2.2
383 g_object_class_install_property (object_class,
384 PROP_HILDON_NOTE_STOCK_ICON,
385 g_param_spec_string ("stock-icon",
387 "The stock name of the icon that appears in the note dialog",
392 * HildonNote:progressbar:
394 * Progressbar for the note (if any).
396 g_object_class_install_property (object_class,
397 PROP_HILDON_NOTE_PROGRESSBAR,
398 g_param_spec_object ("progressbar",
399 "Progressbar widget",
400 "The progressbar that appears in the note dialog",
401 GTK_TYPE_PROGRESS_BAR,
406 hildon_note_init (HildonNote *dialog)
408 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (dialog);
411 priv->label = gtk_label_new (NULL);
412 gtk_label_set_line_wrap (GTK_LABEL (priv->label), TRUE);
413 gtk_label_set_justify (GTK_LABEL (priv->label), GTK_JUSTIFY_LEFT);
415 priv->event_box = gtk_event_box_new ();
417 priv->stock_icon = NULL;
419 gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->event_box), FALSE);
420 gtk_event_box_set_above_child (GTK_EVENT_BOX (priv->event_box), TRUE);
421 g_signal_connect (priv->event_box, "button-press-event",
422 G_CALLBACK (event_box_press_event), dialog);
424 /* Because ESD is synchronous, we wish to play sound after the
425 note is already on screen to avoid blocking its appearance */
426 g_signal_connect (GTK_WIDGET (dialog), "show",
427 G_CALLBACK (on_show_cb), NULL);
429 /* Acquire real references to our internal children, since
430 they are not nessecarily packed into container in each
432 g_object_ref_sink (priv->event_box);
433 g_object_ref_sink (priv->label);
435 gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
436 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
438 /* We use special hint to turn the note into information notification. */
439 gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_NOTIFICATION);
444 hildon_note_finalize (GObject *obj_self)
446 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (obj_self);
449 /* FIXME Some of this stuff should be moved to dispose */
451 /* Free internal data */
453 g_object_unref (priv->event_box);
456 g_object_unref (priv->label);
462 if (priv->stock_icon) {
463 g_free (priv->stock_icon);
464 priv->stock_icon = NULL;
467 if (priv->progressbar)
468 g_object_unref (priv->progressbar);
470 if (priv->original_description)
471 g_free (priv->original_description);
473 G_OBJECT_CLASS (parent_class)->finalize (obj_self);
477 label_size_request (GtkWidget *label,
481 gint note_height = MAX (HILDON_INFORMATION_NOTE_MIN_HEIGHT, req->height);
482 g_object_set (note, "height-request", note_height, NULL);
486 resize_button (GtkWidget *button, gpointer *data)
488 gint width = GPOINTER_TO_INT (data);
489 g_object_set (button, "width-request", width, NULL);
493 hildon_note_orientation_update (HildonNote *note, GdkScreen *screen)
495 GtkDialog *dialog = GTK_DIALOG (note);
496 HildonNotePrivate* priv = HILDON_NOTE_GET_PRIVATE (note);
498 gint button_width, padding;
499 gboolean portrait = gdk_screen_get_width (screen) < gdk_screen_get_height (screen);
501 g_object_ref (dialog->action_area);
502 unpack_widget (dialog->action_area);
505 parent = dialog->vbox;
506 button_width = gdk_screen_get_width (screen) - HILDON_MARGIN_DOUBLE * 2;
507 padding = HILDON_MARGIN_DOUBLE;
509 parent = gtk_widget_get_parent (dialog->vbox);
510 button_width = priv->button_width;
514 gtk_box_pack_end (GTK_BOX (parent), dialog->action_area,
516 gtk_box_reorder_child (GTK_BOX (parent), dialog->action_area, 0);
517 gtk_container_foreach (GTK_CONTAINER (dialog->action_area),
518 (GtkCallback) resize_button,
519 GINT_TO_POINTER (button_width));
520 g_object_unref (dialog->action_area);
521 gtk_container_child_set (GTK_CONTAINER (priv->box), priv->label,
522 "padding", padding, NULL);
526 screen_size_changed (GdkScreen *screen,
529 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
530 gint screen_width = gdk_screen_get_width (screen);
531 gint text_width = screen_width - HILDON_INFORMATION_NOTE_MARGIN * 2;
533 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
534 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
535 g_object_set (note, "width-request", screen_width, NULL);
536 g_object_set (priv->label, "width-request", text_width, NULL);
539 } else if (priv->note_n == HILDON_NOTE_TYPE_CONFIRMATION) {
540 hildon_note_orientation_update (HILDON_NOTE (note), screen);
545 hildon_note_realize (GtkWidget *widget)
548 gboolean is_info_note = FALSE;
550 const gchar *notification_type;
551 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
554 /* Make widget->window accessible */
555 GTK_WIDGET_CLASS (parent_class)->realize (widget);
557 /* Border only, no titlebar */
558 gdk_window_set_decorations (widget->window, GDK_DECOR_BORDER);
560 /* Set the _HILDON_NOTIFICATION_TYPE property so Matchbox places the window correctly */
561 display = gdk_drawable_get_display (widget->window);
562 atom = gdk_x11_get_xatom_by_name_for_display (display, "_HILDON_NOTIFICATION_TYPE");
564 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
565 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
566 notification_type = "_HILDON_NOTIFICATION_TYPE_INFO";
569 notification_type = "_HILDON_NOTIFICATION_TYPE_CONFIRMATION";
572 XChangeProperty (GDK_WINDOW_XDISPLAY (widget->window), GDK_WINDOW_XID (widget->window),
573 atom, XA_STRING, 8, PropModeReplace, (guchar *) notification_type,
574 strlen (notification_type));
577 g_signal_connect (priv->label, "size-request", G_CALLBACK (label_size_request), widget);
580 GdkScreen *screen = gtk_widget_get_screen (widget);
581 g_signal_connect (screen, "size-changed", G_CALLBACK (screen_size_changed), widget);
582 screen_size_changed (screen, widget);
586 hildon_note_unrealize (GtkWidget *widget)
588 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
589 GdkScreen *screen = gtk_widget_get_screen (widget);
591 g_signal_handlers_disconnect_by_func (screen, G_CALLBACK (screen_size_changed), widget);
592 g_signal_handlers_disconnect_by_func (priv->label, G_CALLBACK (label_size_request), widget);
594 GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
598 /* Helper function for removing a widget from it's container.
599 we own a separate reference to each object we try to unpack,
600 so extra referencing is not needed. */
602 unpack_widget (GtkWidget *widget)
604 g_assert (widget == NULL || GTK_IS_WIDGET (widget));
606 if (widget && widget->parent)
607 gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
611 Name the widget and text label based on the note type. This is used
612 by the theme to give proper backgrounds depending on the note type.
615 hildon_note_rename (HildonNote *note)
618 GEnumClass *enum_class;
621 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
623 enum_class = g_type_class_ref (HILDON_TYPE_NOTE_TYPE);
624 value = g_enum_get_value (enum_class, priv->note_n);
626 name = g_strconcat ("HildonNote-", value->value_nick, NULL);
627 gtk_widget_set_name (GTK_WIDGET (note), name);
630 name = g_strconcat ("HildonNoteLabel-", value->value_nick, NULL);
631 gtk_widget_set_name (priv->label, name);
634 g_type_class_unref (enum_class);
638 hildon_note_rebuild (HildonNote *note)
641 HildonNotePrivate *priv;
642 gboolean is_info_note = FALSE;
644 g_assert (HILDON_IS_NOTE (note));
646 priv = HILDON_NOTE_GET_PRIVATE (note);
649 dialog = GTK_DIALOG (note);
651 /* Reuse exiting content widgets for new layout */
652 unpack_widget (priv->label);
653 unpack_widget (priv->progressbar);
654 unpack_widget (priv->event_box);
656 /* Destroy old layout and buttons */
658 gtk_widget_destroy (priv->box);
661 if (priv->okButton) {
662 gtk_widget_destroy (priv->okButton);
663 priv->okButton = NULL;
665 if (priv->cancelButton) {
666 gtk_widget_destroy (priv->cancelButton);
667 priv->cancelButton = NULL;
670 /* Add needed buttons and images for each note type */
671 switch (priv->note_n)
673 case HILDON_NOTE_TYPE_CONFIRMATION:
674 priv->okButton = gtk_dialog_add_button (dialog,
675 _("wdgt_bd_yes"), GTK_RESPONSE_OK);
676 priv->cancelButton = gtk_dialog_add_button (dialog,
677 _("wdgt_bd_no"), GTK_RESPONSE_CANCEL);
678 gtk_widget_show (priv->cancelButton);
679 g_object_get (priv->okButton, "width-request",
680 &priv->button_width, NULL);
681 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
684 case HILDON_NOTE_TYPE_PROGRESSBAR:
685 priv->cancelButton = gtk_dialog_add_button (dialog,
686 _("wdgt_bd_stop"), GTK_RESPONSE_CANCEL);
687 gtk_widget_show (priv->cancelButton);
688 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
691 case HILDON_NOTE_TYPE_INFORMATION_THEME:
692 case HILDON_NOTE_TYPE_INFORMATION:
696 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
701 /* Don't display the action area if this is just an information
702 * note. This prevents text from being slightly aligned to the
706 gtk_widget_hide (dialog->action_area);
708 gtk_widget_show (dialog->action_area);
710 gtk_widget_set_no_show_all (dialog->action_area, is_info_note);
712 /* Pack label vertically. Spacing is only necessary for the progressbar note. */
713 priv->box = gtk_vbox_new (FALSE, priv->progressbar ? HILDON_MARGIN_DOUBLE : 0);
714 gtk_container_add (GTK_CONTAINER (priv->event_box), priv->box);
715 gtk_box_pack_start (GTK_BOX (priv->box), priv->label, TRUE, TRUE, 0);
717 if (priv->progressbar)
718 gtk_box_pack_start (GTK_BOX (priv->box), priv->progressbar, FALSE, FALSE, 0);
720 gtk_container_add (GTK_CONTAINER (dialog->vbox), priv->event_box);
722 gtk_widget_show_all (priv->event_box);
726 * hildon_note_new_confirmation_add_buttons:
727 * @parent: the parent window. The X window ID of the parent window
728 * has to be the same as the X window ID of the application. This is
729 * important so that the window manager could handle the windows
731 * In GTK the X window ID can be checked using
732 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
733 * @description: the message to confirm
734 * @Varargs: arguments pairs for new buttons(label and return value).
735 * Terminate the list with %NULL value.
737 * Create a new confirmation note with custom buttons. Confirmation
738 * note has a text and any number of buttons. It's important to note
739 * that even though the name of the function might suggest, the
740 * default ok/cancel buttons are not appended but you have to provide
741 * all of the buttons.
743 * FIXME: This doc seems to be wrong, the two buttons aren't added so
744 * it would only contain the "additional" buttons? However, changing
745 * this would break those applications that rely on current behaviour.
747 * Returns: A #GtkWidget pointer of the note
750 hildon_note_new_confirmation_add_buttons (GtkWindow *parent,
751 const gchar *description,
759 g_return_val_if_fail (description != NULL, NULL);
761 GtkWidget *conf_note =
762 g_object_new (HILDON_TYPE_NOTE,
763 "note-type", HILDON_NOTE_TYPE_CONFIRMATION_BUTTON,
764 "description", description,
768 gtk_window_set_transient_for (GTK_WINDOW (conf_note), parent);
770 /* Add the buttons from varargs */
771 va_start(args, description);
774 message = va_arg (args, char *);
779 value = va_arg (args, int);
781 button = gtk_dialog_add_button (GTK_DIALOG (conf_note), message, value);
782 /* maemo-gtk is going to set the "no-show-all" property all
783 cancel/close-like buttons to TRUE, so that they are not shown. On
784 the other hand, this confirmation note with custom buttons should
785 not obey this rule, so we need to make sure they are shown. */
786 gtk_widget_show (button);
787 gtk_widget_set_no_show_all (button, FALSE);
797 * hildon_note_new_confirmation:
798 * @parent: the parent window. The X window ID of the parent window
799 * has to be the same as the X window ID of the application. This is
800 * important so that the window manager could handle the windows
801 * correctly. In GTK the X window ID can be checked using
802 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
803 * @description: the message to confirm
805 * Create a new confirmation note. Confirmation note has a text (description)
806 * that you specify and two buttons.
808 * Returns: a #GtkWidget pointer of the note
811 hildon_note_new_confirmation (GtkWindow *parent,
812 const gchar *description)
814 GtkWidget *dialog = NULL;
816 g_return_val_if_fail (description != NULL, NULL);
818 dialog = g_object_new (HILDON_TYPE_NOTE,
820 HILDON_NOTE_TYPE_CONFIRMATION,
821 "description", description, NULL);
824 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
830 * hildon_note_new_confirmation_with_icon_name:
831 * @parent: the parent window. The X window ID of the parent window
832 * has to be the same as the X window ID of the application. This is
833 * important so that the window manager could handle the windows
834 * correctly. In GTK the X window ID can be checked using
835 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
836 * @description: the message to confirm
837 * @icon_name: icon to be displayed. If NULL, default icon is used.
839 * Create a new confirmation note. Confirmation note has a text (description)
840 * that you specify and two buttons.
842 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
843 * with this function will be ignored. Use hildon_note_new_confirmation() instead.
845 * Returns: a #GtkWidget pointer of the note
848 hildon_note_new_confirmation_with_icon_name (GtkWindow *parent,
849 const gchar *description,
850 const gchar *icon_name)
854 dialog = hildon_note_new_confirmation (parent, description);
855 g_object_set (dialog, "icon", icon_name, NULL);
861 * hildon_note_new_information:
862 * @parent: the parent window. The X window ID of the parent window
863 * has to be the same as the X window ID of the application. This is
864 * important so that the window manager could handle the windows
865 * correctly. In GTK the X window ID can be checked using
866 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
867 * @description: the message to confirm
869 * Create a new information note. Information note has a text (description)
870 * that you specify and an OK button.
872 * Returns: a #GtkWidget pointer of the note
875 hildon_note_new_information (GtkWindow *parent,
876 const gchar *description)
878 GtkWidget *dialog = NULL;
880 g_return_val_if_fail (description != NULL, NULL);
882 dialog = g_object_new (HILDON_TYPE_NOTE,
884 HILDON_NOTE_TYPE_INFORMATION_THEME,
885 "description", description, NULL);
888 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
894 * hildon_note_new_information_with_icon_name:
895 * @parent: the parent window. The X window ID of the parent window
896 * has to be the same as the X window ID of the application. This is
897 * important so that the window manager could handle the windows
898 * correctly. In GTK the X window ID can be checked using
899 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
900 * @description: the message to confirm
901 * @icon_name: icon to be displayed. If NULL, default icon is used.
903 * Create a new information note. Information note has text(description)
904 * that you specify, an OK button and an icon.
906 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
907 * with this function will be ignored. Use hildon_note_new_information() instead.
909 * Returns: a #GtkWidget pointer of the note
912 hildon_note_new_information_with_icon_name (GtkWindow * parent,
913 const gchar *description,
914 const gchar *icon_name)
918 dialog = hildon_note_new_information (parent, description);
919 g_object_set (dialog, "icon", icon_name, NULL);
924 /* FIXME This documentation string LIES! */
927 * hildon_note_new_cancel_with_progress_bar:
928 * @parent: the parent window. The X window ID of the parent window
929 * has to be the same as the X window ID of the application. This is
930 * important so that the window manager could handle the windows
931 * correctly. In GTK the X window ID can be checked using
932 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
933 * @description: the action to cancel
934 * @progressbar: a pointer to #GtkProgressBar to be filled with the
935 * progressbar assigned to this note. Use this to set the fraction of
936 * progressbar done. This parameter can be %NULL as well, in which
937 * case plain text cancel note appears.
939 * Create a new cancel note with a progress bar. Cancel note has
940 * text(description) that you specify, a Cancel button and a progress bar.
942 * Returns: a #GtkDialog. Use this to get rid of this note when you
946 hildon_note_new_cancel_with_progress_bar (GtkWindow *parent,
947 const gchar *description,
948 GtkProgressBar *progressbar)
950 GtkWidget *dialog = NULL;
952 g_return_val_if_fail (description != NULL, NULL);
954 dialog = g_object_new (HILDON_TYPE_NOTE,
956 HILDON_NOTE_TYPE_PROGRESSBAR,
957 "description", description,
962 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
969 * hildon_note_set_button_text:
970 * @note: a #HildonNote
971 * @text: sets the button text and if there is two buttons in dialog,
972 * the button texts will be <text>, "Cancel".
974 * Sets the button text to be used by the hildon_note widget.
977 hildon_note_set_button_text (HildonNote *note,
980 HildonNotePrivate *priv;
982 g_return_if_fail (HILDON_IS_NOTE (note));
984 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
987 if (priv->okButton) {
988 gtk_button_set_label (GTK_BUTTON (priv->okButton), text);
989 gtk_button_set_label (GTK_BUTTON (priv->cancelButton),
992 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text);
997 * hildon_note_set_button_texts:
998 * @note: a #HildonNote
999 * @text_ok: the new text of the default OK button
1000 * @text_cancel: the new text of the default cancel button
1002 * Sets the button texts to be used by this hildon_note widget.
1005 hildon_note_set_button_texts (HildonNote *note,
1006 const gchar *text_ok,
1007 const gchar *text_cancel)
1009 HildonNotePrivate *priv;
1011 g_return_if_fail (HILDON_IS_NOTE (note));
1013 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
1016 if (priv->okButton) {
1017 gtk_button_set_label (GTK_BUTTON (priv->okButton), text_ok);
1018 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1020 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1025 on_show_cb (GtkWidget *widget,
1028 g_idle_add (sound_handling, widget);
1031 /* We play a system sound when the note comes visible */
1033 sound_handling (gpointer data)
1035 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (data);
1038 switch (priv->note_n)
1040 case HILDON_NOTE_TYPE_INFORMATION:
1041 case HILDON_NOTE_TYPE_INFORMATION_THEME:
1042 hildon_play_system_sound (INFORMATION_SOUND_PATH);
1045 case HILDON_NOTE_TYPE_CONFIRMATION:
1046 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
1047 hildon_play_system_sound (CONFIRMATION_SOUND_PATH);