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 sound_handling (GtkWidget *widget,
147 GdkEventExpose *event,
150 unpack_widget (GtkWidget *widget);
155 PROP_HILDON_NOTE_TYPE,
156 PROP_HILDON_NOTE_DESCRIPTION,
157 PROP_HILDON_NOTE_ICON,
158 PROP_HILDON_NOTE_PROGRESSBAR,
159 PROP_HILDON_NOTE_STOCK_ICON
162 static GtkDialogClass* parent_class;
165 event_box_press_event (GtkEventBox *event_box,
166 GdkEventButton *event,
169 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
171 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
172 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
173 gtk_dialog_response (note, GTK_RESPONSE_DELETE_EVENT);
181 hildon_note_set_property (GObject *object,
186 HildonNote *note = HILDON_NOTE (object);
187 HildonNotePrivate *priv;
190 priv = HILDON_NOTE_GET_PRIVATE (note);
195 case PROP_HILDON_NOTE_TYPE:
196 priv->note_n = g_value_get_enum (value);
197 hildon_note_rename (note);
198 hildon_note_rebuild (note);
201 case PROP_HILDON_NOTE_DESCRIPTION:
202 if (priv->original_description)
203 g_free (priv->original_description);
204 priv->original_description = g_value_dup_string (value);
206 gtk_label_set_text (GTK_LABEL (priv->label), priv->original_description);
207 /* FIXME Is the "original_description" used anywhere? */
211 case PROP_HILDON_NOTE_ICON:
215 priv->icon = g_value_dup_string (value);
218 case PROP_HILDON_NOTE_STOCK_ICON:
219 if (priv->stock_icon) {
220 g_free (priv->stock_icon);
222 priv->stock_icon = g_value_dup_string (value);
225 case PROP_HILDON_NOTE_PROGRESSBAR:
226 widget = g_value_get_object (value);
227 if (widget != priv->progressbar)
229 if (priv->progressbar)
230 g_object_unref (priv->progressbar);
232 priv->progressbar = widget;
236 g_object_ref (widget);
237 gtk_object_sink (GTK_OBJECT (widget));
240 hildon_note_rebuild (note);
245 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
251 hildon_note_get_property (GObject *object,
256 HildonNote *note = HILDON_NOTE (object);
257 HildonNotePrivate *priv;
259 priv = HILDON_NOTE_GET_PRIVATE (note);
263 case PROP_HILDON_NOTE_TYPE:
264 g_value_set_enum (value, priv->note_n);
267 case PROP_HILDON_NOTE_DESCRIPTION:
268 g_value_set_string (value, priv->original_description);
271 case PROP_HILDON_NOTE_ICON:
272 g_value_set_string (value, priv->icon);
275 case PROP_HILDON_NOTE_STOCK_ICON:
276 g_value_set_string (value, priv->stock_icon);
279 case PROP_HILDON_NOTE_PROGRESSBAR:
280 g_value_set_object (value, priv->progressbar);
284 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
290 * hildon_note_get_type:
292 * Returns GType for HildonNote.
294 * Returns: HildonNote type
297 hildon_note_get_type (void)
299 static GType dialog_type = 0;
302 static const GTypeInfo dialog_info = {
303 sizeof(HildonNoteClass),
304 NULL, /* base_init */
305 NULL, /* base_finalize */
306 (GClassInitFunc) hildon_note_class_init,
307 NULL, /* class_finalize */
308 NULL, /* class_data */
311 (GInstanceInitFunc) hildon_note_init
313 dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
321 hildon_note_class_init (HildonNoteClass *class)
323 GObjectClass *object_class = G_OBJECT_CLASS (class);
324 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
326 /* set the global parent_class */
327 parent_class = g_type_class_peek_parent (class);
329 g_type_class_add_private (class, sizeof (HildonNotePrivate));
331 object_class->finalize = hildon_note_finalize;
332 object_class->set_property = hildon_note_set_property;
333 object_class->get_property = hildon_note_get_property;
334 widget_class->realize = hildon_note_realize;
335 widget_class->unrealize = hildon_note_unrealize;
337 g_object_class_install_property (object_class,
338 PROP_HILDON_NOTE_TYPE,
339 g_param_spec_enum ("note-type",
341 "The type of the note dialog",
342 hildon_note_type_get_type (),
343 HILDON_NOTE_TYPE_CONFIRMATION,
344 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
347 * HildonNote:description:
349 * Description for the note.
351 g_object_class_install_property (object_class,
352 PROP_HILDON_NOTE_DESCRIPTION,
353 g_param_spec_string ("description",
355 "The text that appears in the note dialog",
364 * Deprecated: Since 2.2
366 g_object_class_install_property (object_class,
367 PROP_HILDON_NOTE_ICON,
368 g_param_spec_string ("icon",
370 "The name of the icon that appears in the note dialog",
375 * HildonNote:stock-icon:
377 * Stock icon name for the note.
379 * Deprecated: Since 2.2
381 g_object_class_install_property (object_class,
382 PROP_HILDON_NOTE_STOCK_ICON,
383 g_param_spec_string ("stock-icon",
385 "The stock name of the icon that appears in the note dialog",
390 * HildonNote:progressbar:
392 * Progressbar for the note (if any).
394 g_object_class_install_property (object_class,
395 PROP_HILDON_NOTE_PROGRESSBAR,
396 g_param_spec_object ("progressbar",
397 "Progressbar widget",
398 "The progressbar that appears in the note dialog",
399 GTK_TYPE_PROGRESS_BAR,
404 hildon_note_init (HildonNote *dialog)
406 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (dialog);
409 priv->label = gtk_label_new (NULL);
410 gtk_label_set_line_wrap (GTK_LABEL (priv->label), TRUE);
411 gtk_label_set_justify (GTK_LABEL (priv->label), GTK_JUSTIFY_LEFT);
413 priv->event_box = gtk_event_box_new ();
415 priv->stock_icon = NULL;
417 gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->event_box), FALSE);
418 gtk_event_box_set_above_child (GTK_EVENT_BOX (priv->event_box), TRUE);
419 g_signal_connect (priv->event_box, "button-press-event",
420 G_CALLBACK (event_box_press_event), dialog);
422 /* Acquire real references to our internal children, since
423 they are not nessecarily packed into container in each
425 g_object_ref_sink (priv->event_box);
426 g_object_ref_sink (priv->label);
428 gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
429 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
431 /* We use special hint to turn the note into information notification. */
432 gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_NOTIFICATION);
437 hildon_note_finalize (GObject *obj_self)
439 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (obj_self);
442 /* FIXME Some of this stuff should be moved to dispose */
444 /* Free internal data */
446 g_object_unref (priv->event_box);
449 g_object_unref (priv->label);
455 if (priv->stock_icon) {
456 g_free (priv->stock_icon);
457 priv->stock_icon = NULL;
460 if (priv->progressbar)
461 g_object_unref (priv->progressbar);
463 if (priv->original_description)
464 g_free (priv->original_description);
466 G_OBJECT_CLASS (parent_class)->finalize (obj_self);
470 label_size_request (GtkWidget *label,
474 gint note_height = MAX (HILDON_INFORMATION_NOTE_MIN_HEIGHT, req->height);
475 g_object_set (note, "height-request", note_height, NULL);
479 resize_button (GtkWidget *button, gpointer *data)
481 gint width = GPOINTER_TO_INT (data);
482 g_object_set (button, "width-request", width, NULL);
486 hildon_note_orientation_update (HildonNote *note, GdkScreen *screen)
488 GtkDialog *dialog = GTK_DIALOG (note);
489 HildonNotePrivate* priv = HILDON_NOTE_GET_PRIVATE (note);
491 gint button_width, padding;
492 gboolean portrait = gdk_screen_get_width (screen) < gdk_screen_get_height (screen);
494 g_object_ref (dialog->action_area);
495 unpack_widget (dialog->action_area);
498 parent = dialog->vbox;
499 button_width = gdk_screen_get_width (screen) - HILDON_MARGIN_DOUBLE * 2;
500 padding = HILDON_MARGIN_DOUBLE;
502 parent = gtk_widget_get_parent (dialog->vbox);
503 button_width = priv->button_width;
507 gtk_box_pack_end (GTK_BOX (parent), dialog->action_area,
509 gtk_box_reorder_child (GTK_BOX (parent), dialog->action_area, 0);
510 gtk_container_foreach (GTK_CONTAINER (dialog->action_area),
511 (GtkCallback) resize_button,
512 GINT_TO_POINTER (button_width));
513 g_object_unref (dialog->action_area);
514 gtk_container_child_set (GTK_CONTAINER (priv->box), priv->label,
515 "padding", padding, NULL);
519 screen_size_changed (GdkScreen *screen,
522 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
523 gint screen_width = gdk_screen_get_width (screen);
524 gint text_width = screen_width - HILDON_INFORMATION_NOTE_MARGIN * 2;
526 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
527 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
528 g_object_set (note, "width-request", screen_width, NULL);
529 g_object_set (priv->label, "width-request", text_width, NULL);
532 } else if (priv->note_n == HILDON_NOTE_TYPE_CONFIRMATION) {
533 hildon_note_orientation_update (HILDON_NOTE (note), screen);
538 hildon_note_realize (GtkWidget *widget)
541 gboolean is_info_note = FALSE;
543 const gchar *notification_type;
544 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
547 /* Make widget->window accessible */
548 GTK_WIDGET_CLASS (parent_class)->realize (widget);
550 /* Border only, no titlebar */
551 gdk_window_set_decorations (widget->window, GDK_DECOR_BORDER);
553 /* Because ESD is synchronous, we wish to play sound after the
554 note is already on screen to avoid blocking its appearance */
555 if (priv->sound_signal_handler == 0)
556 priv->sound_signal_handler = g_signal_connect_after(widget,
557 "expose-event", G_CALLBACK (sound_handling), NULL);
559 /* Set the _HILDON_NOTIFICATION_TYPE property so Matchbox places the window correctly */
560 display = gdk_drawable_get_display (widget->window);
561 atom = gdk_x11_get_xatom_by_name_for_display (display, "_HILDON_NOTIFICATION_TYPE");
563 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
564 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
565 notification_type = "_HILDON_NOTIFICATION_TYPE_INFO";
568 notification_type = "_HILDON_NOTIFICATION_TYPE_CONFIRMATION";
571 XChangeProperty (GDK_WINDOW_XDISPLAY (widget->window), GDK_WINDOW_XID (widget->window),
572 atom, XA_STRING, 8, PropModeReplace, (guchar *) notification_type,
573 strlen (notification_type));
576 g_signal_connect (priv->label, "size-request", G_CALLBACK (label_size_request), widget);
579 GdkScreen *screen = gtk_widget_get_screen (widget);
580 g_signal_connect (screen, "size-changed", G_CALLBACK (screen_size_changed), widget);
581 screen_size_changed (screen, widget);
585 hildon_note_unrealize (GtkWidget *widget)
587 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
588 GdkScreen *screen = gtk_widget_get_screen (widget);
590 g_signal_handlers_disconnect_by_func (screen, G_CALLBACK (screen_size_changed), widget);
591 g_signal_handlers_disconnect_by_func (priv->label, G_CALLBACK (label_size_request), widget);
593 GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
597 /* Helper function for removing a widget from it's container.
598 we own a separate reference to each object we try to unpack,
599 so extra referencing is not needed. */
601 unpack_widget (GtkWidget *widget)
603 g_assert (widget == NULL || GTK_IS_WIDGET (widget));
605 if (widget && widget->parent)
606 gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
610 Name the widget and text label based on the note type. This is used
611 by the theme to give proper backgrounds depending on the note type.
614 hildon_note_rename (HildonNote *note)
617 GEnumClass *enum_class;
620 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
622 enum_class = g_type_class_ref (HILDON_TYPE_NOTE_TYPE);
623 value = g_enum_get_value (enum_class, priv->note_n);
625 name = g_strconcat ("HildonNote-", value->value_nick, NULL);
626 gtk_widget_set_name (GTK_WIDGET (note), name);
629 name = g_strconcat ("HildonNoteLabel-", value->value_nick, NULL);
630 gtk_widget_set_name (priv->label, name);
633 g_type_class_unref (enum_class);
637 hildon_note_rebuild (HildonNote *note)
640 HildonNotePrivate *priv;
641 gboolean is_info_note = FALSE;
643 g_assert (HILDON_IS_NOTE (note));
645 priv = HILDON_NOTE_GET_PRIVATE (note);
648 dialog = GTK_DIALOG (note);
650 /* Reuse exiting content widgets for new layout */
651 unpack_widget (priv->label);
652 unpack_widget (priv->progressbar);
653 unpack_widget (priv->event_box);
655 /* Destroy old layout and buttons */
657 gtk_widget_destroy (priv->box);
660 if (priv->okButton) {
661 gtk_widget_destroy (priv->okButton);
662 priv->okButton = NULL;
664 if (priv->cancelButton) {
665 gtk_widget_destroy (priv->cancelButton);
666 priv->cancelButton = NULL;
669 /* Add needed buttons and images for each note type */
670 switch (priv->note_n)
672 case HILDON_NOTE_TYPE_CONFIRMATION:
673 priv->okButton = gtk_dialog_add_button (dialog,
674 _("wdgt_bd_yes"), GTK_RESPONSE_OK);
675 priv->cancelButton = gtk_dialog_add_button (dialog,
676 _("wdgt_bd_no"), GTK_RESPONSE_CANCEL);
677 gtk_widget_show (priv->cancelButton);
678 g_object_get (priv->okButton, "width-request",
679 &priv->button_width, NULL);
680 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
683 case HILDON_NOTE_TYPE_PROGRESSBAR:
684 priv->cancelButton = gtk_dialog_add_button (dialog,
685 _("wdgt_bd_stop"), GTK_RESPONSE_CANCEL);
686 gtk_widget_show (priv->cancelButton);
687 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
690 case HILDON_NOTE_TYPE_INFORMATION_THEME:
691 case HILDON_NOTE_TYPE_INFORMATION:
695 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
700 /* Don't display the action area if this is just an information
701 * note. This prevents text from being slightly aligned to the
705 gtk_widget_hide (dialog->action_area);
707 gtk_widget_show (dialog->action_area);
709 gtk_widget_set_no_show_all (dialog->action_area, is_info_note);
711 /* Pack label vertically. Spacing is only necessary for the progressbar note. */
712 priv->box = gtk_vbox_new (FALSE, priv->progressbar ? HILDON_MARGIN_DOUBLE : 0);
713 gtk_container_add (GTK_CONTAINER (priv->event_box), priv->box);
714 gtk_box_pack_start (GTK_BOX (priv->box), priv->label, TRUE, TRUE, 0);
716 if (priv->progressbar)
717 gtk_box_pack_start (GTK_BOX (priv->box), priv->progressbar, FALSE, FALSE, 0);
719 gtk_container_add (GTK_CONTAINER (dialog->vbox), priv->event_box);
721 gtk_widget_show_all (priv->event_box);
725 * hildon_note_new_confirmation_add_buttons:
726 * @parent: the parent window. The X window ID of the parent window
727 * has to be the same as the X window ID of the application. This is
728 * important so that the window manager could handle the windows
730 * In GTK the X window ID can be checked using
731 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
732 * @description: the message to confirm
733 * @Varargs: arguments pairs for new buttons(label and return value).
734 * Terminate the list with %NULL value.
736 * Create a new confirmation note with custom buttons. Confirmation
737 * note has a text and any number of buttons. It's important to note
738 * that even though the name of the function might suggest, the
739 * default ok/cancel buttons are not appended but you have to provide
740 * all of the buttons.
742 * FIXME: This doc seems to be wrong, the two buttons aren't added so
743 * it would only contain the "additional" buttons? However, changing
744 * this would break those applications that rely on current behaviour.
746 * Returns: A #GtkWidget pointer of the note
749 hildon_note_new_confirmation_add_buttons (GtkWindow *parent,
750 const gchar *description,
758 g_return_val_if_fail (description != NULL, NULL);
760 GtkWidget *conf_note =
761 g_object_new (HILDON_TYPE_NOTE,
762 "note-type", HILDON_NOTE_TYPE_CONFIRMATION_BUTTON,
763 "description", description,
767 gtk_window_set_transient_for (GTK_WINDOW (conf_note), parent);
769 /* Add the buttons from varargs */
770 va_start(args, description);
773 message = va_arg (args, char *);
778 value = va_arg (args, int);
780 button = gtk_dialog_add_button (GTK_DIALOG (conf_note), message, value);
781 /* maemo-gtk is going to set the "no-show-all" property all
782 cancel/close-like buttons to TRUE, so that they are not shown. On
783 the other hand, this confirmation note with custom buttons should
784 not obey this rule, so we need to make sure they are shown. */
785 gtk_widget_show (button);
786 gtk_widget_set_no_show_all (button, FALSE);
796 * hildon_note_new_confirmation:
797 * @parent: the parent window. The X window ID of the parent window
798 * has to be the same as the X window ID of the application. This is
799 * important so that the window manager could handle the windows
800 * correctly. In GTK the X window ID can be checked using
801 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
802 * @description: the message to confirm
804 * Create a new confirmation note. Confirmation note has a text (description)
805 * that you specify and two buttons.
807 * Returns: a #GtkWidget pointer of the note
810 hildon_note_new_confirmation (GtkWindow *parent,
811 const gchar *description)
813 GtkWidget *dialog = NULL;
815 g_return_val_if_fail (description != NULL, NULL);
817 dialog = g_object_new (HILDON_TYPE_NOTE,
819 HILDON_NOTE_TYPE_CONFIRMATION,
820 "description", description, NULL);
823 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
829 * hildon_note_new_confirmation_with_icon_name:
830 * @parent: the parent window. The X window ID of the parent window
831 * has to be the same as the X window ID of the application. This is
832 * important so that the window manager could handle the windows
833 * correctly. In GTK the X window ID can be checked using
834 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
835 * @description: the message to confirm
836 * @icon_name: icon to be displayed. If NULL, default icon is used.
838 * Create a new confirmation note. Confirmation note has a text (description)
839 * that you specify and two buttons.
841 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
842 * with this function will be ignored. Use hildon_note_new_confirmation() instead.
844 * Returns: a #GtkWidget pointer of the note
847 hildon_note_new_confirmation_with_icon_name (GtkWindow *parent,
848 const gchar *description,
849 const gchar *icon_name)
853 dialog = hildon_note_new_confirmation (parent, description);
854 g_object_set (dialog, "icon", icon_name);
860 * hildon_note_new_information:
861 * @parent: the parent window. The X window ID of the parent window
862 * has to be the same as the X window ID of the application. This is
863 * important so that the window manager could handle the windows
864 * correctly. In GTK the X window ID can be checked using
865 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
866 * @description: the message to confirm
868 * Create a new information note. Information note has a text (description)
869 * that you specify and an OK button.
871 * Returns: a #GtkWidget pointer of the note
874 hildon_note_new_information (GtkWindow *parent,
875 const gchar *description)
877 GtkWidget *dialog = NULL;
879 g_return_val_if_fail (description != NULL, NULL);
881 dialog = g_object_new (HILDON_TYPE_NOTE,
883 HILDON_NOTE_TYPE_INFORMATION_THEME,
884 "description", description, NULL);
887 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
893 * hildon_note_new_information_with_icon_name:
894 * @parent: the parent window. The X window ID of the parent window
895 * has to be the same as the X window ID of the application. This is
896 * important so that the window manager could handle the windows
897 * correctly. In GTK the X window ID can be checked using
898 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
899 * @description: the message to confirm
900 * @icon_name: icon to be displayed. If NULL, default icon is used.
902 * Create a new information note. Information note has text(description)
903 * that you specify, an OK button and an icon.
905 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
906 * with this function will be ignored. Use hildon_note_new_information() instead.
908 * Returns: a #GtkWidget pointer of the note
911 hildon_note_new_information_with_icon_name (GtkWindow * parent,
912 const gchar *description,
913 const gchar *icon_name)
917 dialog = hildon_note_new_information (parent, description);
918 g_object_set (dialog, "icon", icon_name);
923 /* FIXME This documentation string LIES! */
926 * hildon_note_new_cancel_with_progress_bar:
927 * @parent: the parent window. The X window ID of the parent window
928 * has to be the same as the X window ID of the application. This is
929 * important so that the window manager could handle the windows
930 * correctly. In GTK the X window ID can be checked using
931 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
932 * @description: the action to cancel
933 * @progressbar: a pointer to #GtkProgressBar to be filled with the
934 * progressbar assigned to this note. Use this to set the fraction of
935 * progressbar done. This parameter can be %NULL as well, in which
936 * case plain text cancel note appears.
938 * Create a new cancel note with a progress bar. Cancel note has
939 * text(description) that you specify, a Cancel button and a progress bar.
941 * Returns: a #GtkDialog. Use this to get rid of this note when you
945 hildon_note_new_cancel_with_progress_bar (GtkWindow *parent,
946 const gchar *description,
947 GtkProgressBar *progressbar)
949 GtkWidget *dialog = NULL;
951 g_return_val_if_fail (description != NULL, NULL);
953 dialog = g_object_new (HILDON_TYPE_NOTE,
955 HILDON_NOTE_TYPE_PROGRESSBAR,
956 "description", description,
961 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
968 * hildon_note_set_button_text:
969 * @note: a #HildonNote
970 * @text: sets the button text and if there is two buttons in dialog,
971 * the button texts will be <text>, "Cancel".
973 * Sets the button text to be used by the hildon_note widget.
976 hildon_note_set_button_text (HildonNote *note,
979 HildonNotePrivate *priv;
981 g_return_if_fail (HILDON_IS_NOTE (note));
983 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
986 if (priv->okButton) {
987 gtk_button_set_label (GTK_BUTTON (priv->okButton), text);
988 gtk_button_set_label (GTK_BUTTON (priv->cancelButton),
991 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text);
996 * hildon_note_set_button_texts:
997 * @note: a #HildonNote
998 * @text_ok: the new text of the default OK button
999 * @text_cancel: the new text of the default cancel button
1001 * Sets the button texts to be used by this hildon_note widget.
1004 hildon_note_set_button_texts (HildonNote *note,
1005 const gchar *text_ok,
1006 const gchar *text_cancel)
1008 HildonNotePrivate *priv;
1010 g_return_if_fail (HILDON_IS_NOTE (note));
1012 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
1015 if (priv->okButton) {
1016 gtk_button_set_label (GTK_BUTTON (priv->okButton), text_ok);
1017 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1019 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1023 /* We play a system sound when the note comes visible */
1025 sound_handling (GtkWidget *widget,
1026 GdkEventExpose *event,
1029 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
1032 g_signal_handler_disconnect (widget, priv->sound_signal_handler);
1034 priv->sound_signal_handler = 0;
1036 switch (priv->note_n)
1038 case HILDON_NOTE_TYPE_INFORMATION:
1039 case HILDON_NOTE_TYPE_INFORMATION_THEME:
1040 hildon_play_system_sound (INFORMATION_SOUND_PATH);
1043 case HILDON_NOTE_TYPE_CONFIRMATION:
1044 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
1045 hildon_play_system_sound (CONFIRMATION_SOUND_PATH);