]> git.saurik.com Git - wxWidgets.git/commitdiff
Implement wxNotificationMessage using libnotify in wxGTK.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 27 Jul 2012 15:36:54 +0000 (15:36 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 27 Jul 2012 15:36:54 +0000 (15:36 +0000)
Use libnotify -- if detected by configure -- to provide native notifications
in wxGTK. Our API maps to libnotify one in rather straightforward way, we
might consider extending it to cover more of libnotify functionality
(categories, user-defined icons and, especially, actions) later.

Also update the dialogs sample to show another kind of notification and the
documentation to clarify the behaviour of various methods.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72218 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

13 files changed:
Makefile.in
build/bakefiles/files.bkl
configure
configure.in
debian/control.in
docs/changes.txt
include/wx/gtk/notifmsg.h [new file with mode: 0644]
include/wx/notifmsg.h
interface/wx/notifmsg.h
samples/dialogs/dialogs.cpp
setup.h.in
setup.h_vms
src/gtk/notifmsg.cpp [new file with mode: 0644]

index 4e24080c536f846d73b0b4ff6f1454fa41246d74..a75beeda7f2b6de384629e73a2c0089ebc148ddd 100644 (file)
@@ -2918,6 +2918,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_GUI_HDR =  \
        wx/gtk/menuitem.h \
        wx/gtk/msgdlg.h \
        wx/gtk/notebook.h \
        wx/gtk/menuitem.h \
        wx/gtk/msgdlg.h \
        wx/gtk/notebook.h \
+       wx/gtk/notifmsg.h \
        wx/gtk/print.h \
        wx/gtk/radiobox.h \
        wx/gtk/radiobut.h \
        wx/gtk/print.h \
        wx/gtk/radiobox.h \
        wx/gtk/radiobut.h \
@@ -2973,6 +2974,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_GUI_HDR =  \
        wx/gtk/menuitem.h \
        wx/gtk/msgdlg.h \
        wx/gtk/notebook.h \
        wx/gtk/menuitem.h \
        wx/gtk/msgdlg.h \
        wx/gtk/notebook.h \
+       wx/gtk/notifmsg.h \
        wx/gtk/print.h \
        wx/gtk/radiobox.h \
        wx/gtk/radiobut.h \
        wx/gtk/print.h \
        wx/gtk/radiobox.h \
        wx/gtk/radiobut.h \
@@ -5525,6 +5527,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___GUI_SRC_OBJECTS =  \
        monodll_gtk_msgdlg.o \
        monodll_gtk_nativewin.o \
        monodll_gtk_notebook.o \
        monodll_gtk_msgdlg.o \
        monodll_gtk_nativewin.o \
        monodll_gtk_notebook.o \
+       monodll_gtk_notifmsg.o \
        monodll_gtk_print.o \
        monodll_gtk_radiobox.o \
        monodll_gtk_radiobut.o \
        monodll_gtk_print.o \
        monodll_gtk_radiobox.o \
        monodll_gtk_radiobut.o \
@@ -5581,6 +5584,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_3___GUI_SRC_OBJECTS =  \
        monodll_gtk_msgdlg.o \
        monodll_gtk_nativewin.o \
        monodll_gtk_notebook.o \
        monodll_gtk_msgdlg.o \
        monodll_gtk_nativewin.o \
        monodll_gtk_notebook.o \
+       monodll_gtk_notifmsg.o \
        monodll_gtk_print.o \
        monodll_gtk_radiobox.o \
        monodll_gtk_radiobut.o \
        monodll_gtk_print.o \
        monodll_gtk_radiobox.o \
        monodll_gtk_radiobut.o \
@@ -7723,6 +7727,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___GUI_SRC_OBJECTS_1 =  \
        monolib_gtk_msgdlg.o \
        monolib_gtk_nativewin.o \
        monolib_gtk_notebook.o \
        monolib_gtk_msgdlg.o \
        monolib_gtk_nativewin.o \
        monolib_gtk_notebook.o \
+       monolib_gtk_notifmsg.o \
        monolib_gtk_print.o \
        monolib_gtk_radiobox.o \
        monolib_gtk_radiobut.o \
        monolib_gtk_print.o \
        monolib_gtk_radiobox.o \
        monolib_gtk_radiobut.o \
@@ -7779,6 +7784,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_3___GUI_SRC_OBJECTS_1 =  \
        monolib_gtk_msgdlg.o \
        monolib_gtk_nativewin.o \
        monolib_gtk_notebook.o \
        monolib_gtk_msgdlg.o \
        monolib_gtk_nativewin.o \
        monolib_gtk_notebook.o \
+       monolib_gtk_notifmsg.o \
        monolib_gtk_print.o \
        monolib_gtk_radiobox.o \
        monolib_gtk_radiobut.o \
        monolib_gtk_print.o \
        monolib_gtk_radiobox.o \
        monolib_gtk_radiobut.o \
@@ -10097,6 +10103,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___GUI_SRC_OBJECTS_2 =  \
        coredll_gtk_msgdlg.o \
        coredll_gtk_nativewin.o \
        coredll_gtk_notebook.o \
        coredll_gtk_msgdlg.o \
        coredll_gtk_nativewin.o \
        coredll_gtk_notebook.o \
+       coredll_notifmsg.o \
        coredll_gtk_print.o \
        coredll_gtk_radiobox.o \
        coredll_gtk_radiobut.o \
        coredll_gtk_print.o \
        coredll_gtk_radiobox.o \
        coredll_gtk_radiobut.o \
@@ -10153,6 +10160,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_3___GUI_SRC_OBJECTS_2 =  \
        coredll_gtk_msgdlg.o \
        coredll_gtk_nativewin.o \
        coredll_gtk_notebook.o \
        coredll_gtk_msgdlg.o \
        coredll_gtk_nativewin.o \
        coredll_gtk_notebook.o \
+       coredll_notifmsg.o \
        coredll_gtk_print.o \
        coredll_gtk_radiobox.o \
        coredll_gtk_radiobut.o \
        coredll_gtk_print.o \
        coredll_gtk_radiobox.o \
        coredll_gtk_radiobut.o \
@@ -11740,6 +11748,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___GUI_SRC_OBJECTS_3 =  \
        corelib_gtk_msgdlg.o \
        corelib_gtk_nativewin.o \
        corelib_gtk_notebook.o \
        corelib_gtk_msgdlg.o \
        corelib_gtk_nativewin.o \
        corelib_gtk_notebook.o \
+       corelib_notifmsg.o \
        corelib_gtk_print.o \
        corelib_gtk_radiobox.o \
        corelib_gtk_radiobut.o \
        corelib_gtk_print.o \
        corelib_gtk_radiobox.o \
        corelib_gtk_radiobut.o \
@@ -11796,6 +11805,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_3___GUI_SRC_OBJECTS_3 =  \
        corelib_gtk_msgdlg.o \
        corelib_gtk_nativewin.o \
        corelib_gtk_notebook.o \
        corelib_gtk_msgdlg.o \
        corelib_gtk_nativewin.o \
        corelib_gtk_notebook.o \
+       corelib_notifmsg.o \
        corelib_gtk_print.o \
        corelib_gtk_radiobox.o \
        corelib_gtk_radiobut.o \
        corelib_gtk_print.o \
        corelib_gtk_radiobox.o \
        corelib_gtk_radiobut.o \
@@ -20111,6 +20121,12 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@monodll_gtk_notebook.o: $(srcdir)/src/gtk/notebook.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/notebook.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@monodll_gtk_notebook.o: $(srcdir)/src/gtk/notebook.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/notebook.cpp
 
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@monodll_gtk_notifmsg.o: $(srcdir)/src/gtk/notifmsg.cpp $(MONODLL_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/notifmsg.cpp
+
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@monodll_gtk_notifmsg.o: $(srcdir)/src/gtk/notifmsg.cpp $(MONODLL_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/notifmsg.cpp
+
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@monodll_gtk_print.o: $(srcdir)/src/gtk/print.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/print.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@monodll_gtk_print.o: $(srcdir)/src/gtk/print.cpp $(MONODLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/gtk/print.cpp
 
@@ -25805,6 +25821,12 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@monolib_gtk_notebook.o: $(srcdir)/src/gtk/notebook.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/notebook.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@monolib_gtk_notebook.o: $(srcdir)/src/gtk/notebook.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/notebook.cpp
 
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@monolib_gtk_notifmsg.o: $(srcdir)/src/gtk/notifmsg.cpp $(MONOLIB_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/notifmsg.cpp
+
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@monolib_gtk_notifmsg.o: $(srcdir)/src/gtk/notifmsg.cpp $(MONOLIB_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/notifmsg.cpp
+
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@monolib_gtk_print.o: $(srcdir)/src/gtk/print.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/print.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@monolib_gtk_print.o: $(srcdir)/src/gtk/print.cpp $(MONOLIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/gtk/print.cpp
 
@@ -31670,6 +31692,12 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@coredll_gtk_notebook.o: $(srcdir)/src/gtk/notebook.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/notebook.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@coredll_gtk_notebook.o: $(srcdir)/src/gtk/notebook.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/notebook.cpp
 
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@coredll_notifmsg.o: $(srcdir)/src/gtk/notifmsg.cpp $(COREDLL_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/notifmsg.cpp
+
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@coredll_notifmsg.o: $(srcdir)/src/gtk/notifmsg.cpp $(COREDLL_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/notifmsg.cpp
+
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@coredll_gtk_print.o: $(srcdir)/src/gtk/print.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/print.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@coredll_gtk_print.o: $(srcdir)/src/gtk/print.cpp $(COREDLL_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/gtk/print.cpp
 
@@ -35924,6 +35952,12 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@corelib_gtk_notebook.o: $(srcdir)/src/gtk/notebook.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/notebook.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@corelib_gtk_notebook.o: $(srcdir)/src/gtk/notebook.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/notebook.cpp
 
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@corelib_notifmsg.o: $(srcdir)/src/gtk/notifmsg.cpp $(CORELIB_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/notifmsg.cpp
+
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@corelib_notifmsg.o: $(srcdir)/src/gtk/notifmsg.cpp $(CORELIB_ODEP)
+@COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/notifmsg.cpp
+
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@corelib_gtk_print.o: $(srcdir)/src/gtk/print.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/print.cpp
 
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@corelib_gtk_print.o: $(srcdir)/src/gtk/print.cpp $(CORELIB_ODEP)
 @COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1_WXUNIV_0@        $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/print.cpp
 
index f3983d32c0be6b0da62f3b75159cd1799bf5298e..5643fc6a6f57551625f509a4d2a0e2e0d4f54414 100644 (file)
@@ -1162,6 +1162,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     src/gtk/msgdlg.cpp
     src/gtk/nativewin.cpp
     src/gtk/notebook.cpp
     src/gtk/msgdlg.cpp
     src/gtk/nativewin.cpp
     src/gtk/notebook.cpp
+    src/gtk/notifmsg.cpp
     src/gtk/print.cpp
     src/gtk/radiobox.cpp
     src/gtk/radiobut.cpp
     src/gtk/print.cpp
     src/gtk/radiobox.cpp
     src/gtk/radiobut.cpp
@@ -1222,6 +1223,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
     wx/gtk/menuitem.h
     wx/gtk/msgdlg.h
     wx/gtk/notebook.h
     wx/gtk/menuitem.h
     wx/gtk/msgdlg.h
     wx/gtk/notebook.h
+    wx/gtk/notifmsg.h
     wx/gtk/print.h
     wx/gtk/radiobox.h
     wx/gtk/radiobut.h
     wx/gtk/print.h
     wx/gtk/radiobox.h
     wx/gtk/radiobut.h
index 332ee93691966b224eef961860a15e00d2e71342..785a45cfa7f9cc90a9181c760efe301e6d430bca 100755 (executable)
--- a/configure
+++ b/configure
@@ -980,6 +980,8 @@ HILDON2_LIBS
 HILDON2_CFLAGS
 HILDON_LIBS
 HILDON_CFLAGS
 HILDON2_CFLAGS
 HILDON_LIBS
 HILDON_CFLAGS
+LIBNOTIFY_LIBS
+LIBNOTIFY_CFLAGS
 GNOMEVFS_LIBS
 GNOMEVFS_CFLAGS
 LIBGNOMEPRINTUI_LIBS
 GNOMEVFS_LIBS
 GNOMEVFS_CFLAGS
 LIBGNOMEPRINTUI_LIBS
@@ -1126,6 +1128,7 @@ with_libmspack
 with_gtkprint
 with_gnomeprint
 with_gnomevfs
 with_gtkprint
 with_gnomeprint
 with_gnomevfs
+with_libnotify
 with_hildon
 with_opengl
 with_dmalloc
 with_hildon
 with_opengl
 with_dmalloc
@@ -1429,6 +1432,8 @@ LIBGNOMEPRINTUI_CFLAGS
 LIBGNOMEPRINTUI_LIBS
 GNOMEVFS_CFLAGS
 GNOMEVFS_LIBS
 LIBGNOMEPRINTUI_LIBS
 GNOMEVFS_CFLAGS
 GNOMEVFS_LIBS
+LIBNOTIFY_CFLAGS
+LIBNOTIFY_LIBS
 HILDON_CFLAGS
 HILDON_LIBS
 HILDON2_CFLAGS
 HILDON_CFLAGS
 HILDON_LIBS
 HILDON2_CFLAGS
@@ -2349,6 +2354,7 @@ Optional Packages:
   --without-gtkprint      don't use GTK printing support
   --without-gnomeprint    don't use GNOME printing libraries
   --with-gnomevfs         use GNOME VFS for associating MIME types
   --without-gtkprint      don't use GTK printing support
   --without-gnomeprint    don't use GNOME printing libraries
   --with-gnomevfs         use GNOME VFS for associating MIME types
+  --with-libnotify        use libnotify for notifications
   --with-hildon           use Hildon framework for Nokia 770/800/810
   --with-opengl           use OpenGL (or Mesa)
   --with-dmalloc          use dmalloc library (http://dmalloc.com/)
   --with-hildon           use Hildon framework for Nokia 770/800/810
   --with-opengl           use OpenGL (or Mesa)
   --with-dmalloc          use dmalloc library (http://dmalloc.com/)
@@ -2425,6 +2431,10 @@ Some influential environment variables:
               C compiler flags for GNOMEVFS, overriding pkg-config
   GNOMEVFS_LIBS
               linker flags for GNOMEVFS, overriding pkg-config
               C compiler flags for GNOMEVFS, overriding pkg-config
   GNOMEVFS_LIBS
               linker flags for GNOMEVFS, overriding pkg-config
+  LIBNOTIFY_CFLAGS
+              C compiler flags for LIBNOTIFY, overriding pkg-config
+  LIBNOTIFY_LIBS
+              linker flags for LIBNOTIFY, overriding pkg-config
   HILDON_CFLAGS
               C compiler flags for HILDON, overriding pkg-config
   HILDON_LIBS linker flags for HILDON, overriding pkg-config
   HILDON_CFLAGS
               C compiler flags for HILDON, overriding pkg-config
   HILDON_LIBS linker flags for HILDON, overriding pkg-config
@@ -5181,6 +5191,50 @@ fi
 $as_echo "$result" >&6; }
 
 
 $as_echo "$result" >&6; }
 
 
+          withstring=
+          defaultval=$wxUSE_ALL_FEATURES
+          if test -z "$defaultval"; then
+              if test x"$withstring" = xwithout; then
+                  defaultval=yes
+              else
+                  defaultval=no
+              fi
+          fi
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --${withstring:-with}-libnotify" >&5
+$as_echo_n "checking for --${withstring:-with}-libnotify... " >&6; }
+
+# Check whether --with-libnotify was given.
+if test "${with_libnotify+set}" = set; then :
+  withval=$with_libnotify;
+                        if test "$withval" = yes; then
+                          wx_cv_use_libnotify='wxUSE_LIBNOTIFY=yes'
+                        else
+                          wx_cv_use_libnotify='wxUSE_LIBNOTIFY=no'
+                        fi
+
+else
+
+                        wx_cv_use_libnotify='wxUSE_LIBNOTIFY=${'DEFAULT_wxUSE_LIBNOTIFY":-$defaultval}"
+
+fi
+
+
+          eval "$wx_cv_use_libnotify"
+
+          if test x"$withstring" = xwithout; then
+            if test $wxUSE_LIBNOTIFY = yes; then
+              result=no
+            else
+              result=yes
+            fi
+          else
+            result=$wxUSE_LIBNOTIFY
+          fi
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: result: $result" >&5
+$as_echo "$result" >&6; }
+
+
           withstring=
           defaultval=$wxUSE_ALL_FEATURES
           if test -z "$defaultval"; then
           withstring=
           defaultval=$wxUSE_ALL_FEATURES
           if test -z "$defaultval"; then
@@ -33972,6 +34026,94 @@ $as_echo "yes" >&6; }
                         $as_echo "#define wxUSE_LIBGNOMEVFS 1" >>confdefs.h
 
 
                         $as_echo "#define wxUSE_LIBGNOMEVFS 1" >>confdefs.h
 
 
+fi
+        fi
+    fi
+
+    if test "$wxUSE_NOTIFICATION_MESSAGE" = "yes" ; then
+        if test "$wxUSE_LIBNOTIFY" = "yes" ; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNOTIFY" >&5
+$as_echo_n "checking for LIBNOTIFY... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LIBNOTIFY_CFLAGS"; then
+        pkg_cv_LIBNOTIFY_CFLAGS="$LIBNOTIFY_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify >= 0.7\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnotify >= 0.7") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBNOTIFY_CFLAGS=`$PKG_CONFIG --cflags "libnotify >= 0.7" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$LIBNOTIFY_LIBS"; then
+        pkg_cv_LIBNOTIFY_LIBS="$LIBNOTIFY_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnotify >= 0.7\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libnotify >= 0.7") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBNOTIFY_LIBS=`$PKG_CONFIG --libs "libnotify >= 0.7" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               LIBNOTIFY_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libnotify >= 0.7"`
+        else
+               LIBNOTIFY_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libnotify >= 0.7"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LIBNOTIFY_PKG_ERRORS" >&5
+
+
+                    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libnotify not found, wxNotificationMessage will use generic implementation." >&5
+$as_echo "$as_me: WARNING: libnotify not found, wxNotificationMessage will use generic implementation." >&2;}
+
+
+elif test $pkg_failed = untried; then
+
+                    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libnotify not found, wxNotificationMessage will use generic implementation." >&5
+$as_echo "$as_me: WARNING: libnotify not found, wxNotificationMessage will use generic implementation." >&2;}
+
+
+else
+       LIBNOTIFY_CFLAGS=$pkg_cv_LIBNOTIFY_CFLAGS
+       LIBNOTIFY_LIBS=$pkg_cv_LIBNOTIFY_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+                    GUI_TK_LIBRARY="$GUI_TK_LIBRARY $LIBNOTIFY_LIBS"
+                    CFLAGS="$LIBNOTIFY_CFLAGS $CFLAGS"
+                    CXXFLAGS="$LIBNOTIFY_CFLAGS $CXXFLAGS"
+                    $as_echo "#define wxUSE_LIBNOTIFY 1" >>confdefs.h
+
+
 fi
         fi
     fi
 fi
         fi
     fi
@@ -37353,6 +37495,9 @@ case "$TOOLKIT" in
             if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then
                 TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs"
             fi
             if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then
                 TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs"
             fi
+            if test "$wxUSE_LIBNOTIFY" = "yes" ; then
+                TOOLKIT_EXTRA="$TOOLKIT_EXTRA libnotify"
+            fi
             if test "$wxUSE_LIBHILDON" = "yes"; then
                 TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon"
             fi
             if test "$wxUSE_LIBHILDON" = "yes"; then
                 TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon"
             fi
index 77e9c4e87b95f003d2eb07e0b5c3494186723a55..b54ebe233201a635c7c14934899af96577ed7e93 100644 (file)
@@ -591,6 +591,7 @@ WX_ARG_WITH(libmspack,     [  --with-libmspack        use libmspack (CHM help fi
 WX_ARG_WITHOUT(gtkprint,   [  --without-gtkprint      don't use GTK printing support], wxUSE_GTKPRINT)
 WX_ARG_WITHOUT(gnomeprint, [  --without-gnomeprint    don't use GNOME printing libraries], wxUSE_LIBGNOMEPRINT)
 WX_ARG_WITH(gnomevfs,      [  --with-gnomevfs         use GNOME VFS for associating MIME types], wxUSE_LIBGNOMEVFS)
 WX_ARG_WITHOUT(gtkprint,   [  --without-gtkprint      don't use GTK printing support], wxUSE_GTKPRINT)
 WX_ARG_WITHOUT(gnomeprint, [  --without-gnomeprint    don't use GNOME printing libraries], wxUSE_LIBGNOMEPRINT)
 WX_ARG_WITH(gnomevfs,      [  --with-gnomevfs         use GNOME VFS for associating MIME types], wxUSE_LIBGNOMEVFS)
+WX_ARG_WITH(libnotify,     [  --with-libnotify        use libnotify for notifications], wxUSE_LIBNOTIFY)
 WX_ARG_WITH(hildon,        [  --with-hildon           use Hildon framework for Nokia 770/800/810], wxUSE_LIBHILDON)
 WX_ARG_WITH(opengl,        [  --with-opengl           use OpenGL (or Mesa)], wxUSE_OPENGL)
 
 WX_ARG_WITH(hildon,        [  --with-hildon           use Hildon framework for Nokia 770/800/810], wxUSE_LIBHILDON)
 WX_ARG_WITH(opengl,        [  --with-opengl           use OpenGL (or Mesa)], wxUSE_OPENGL)
 
@@ -5665,6 +5666,22 @@ if test "$WXGTK2" = 1; then
         fi
     fi
 
         fi
     fi
 
+    if test "$wxUSE_NOTIFICATION_MESSAGE" = "yes" ; then
+        if test "$wxUSE_LIBNOTIFY" = "yes" ; then
+            PKG_CHECK_MODULES(LIBNOTIFY, [libnotify >= 0.7],
+                [
+                    GUI_TK_LIBRARY="$GUI_TK_LIBRARY $LIBNOTIFY_LIBS"
+                    CFLAGS="$LIBNOTIFY_CFLAGS $CFLAGS"
+                    CXXFLAGS="$LIBNOTIFY_CFLAGS $CXXFLAGS"
+                    AC_DEFINE(wxUSE_LIBNOTIFY)
+                ],
+                [
+                    AC_MSG_WARN([libnotify not found, wxNotificationMessage will use generic implementation.])
+                ]
+            )
+        fi
+    fi
+
     if test "$wxUSE_LIBHILDON" = "yes" ; then
         PKG_CHECK_MODULES(HILDON,
                           [hildon-lgpl >= 0.9],
     if test "$wxUSE_LIBHILDON" = "yes" ; then
         PKG_CHECK_MODULES(HILDON,
                           [hildon-lgpl >= 0.9],
@@ -7981,6 +7998,9 @@ case "$TOOLKIT" in
             if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then
                 TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs"
             fi
             if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then
                 TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs"
             fi
+            if test "$wxUSE_LIBNOTIFY" = "yes" ; then
+                TOOLKIT_EXTRA="$TOOLKIT_EXTRA libnotify"
+            fi
             if test "$wxUSE_LIBHILDON" = "yes"; then
                 TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon"
             fi
             if test "$wxUSE_LIBHILDON" = "yes"; then
                 TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon"
             fi
index 2a5d19dfe225a201b232b89bc0c6f7ba592ff397..66d49e95decfd25757f82754306824b606726c10 100644 (file)
@@ -1,7 +1,7 @@
 Source: wxwidgets=V
 Section: libs
 Priority: optional
 Source: wxwidgets=V
 Section: libs
 Priority: optional
-Build-Depends: debhelper (>=4.0), bc, flex, bison, gettext, libgtk2.0-dev, =PY, =PY-dev, zlib1g-dev, libjpeg62-dev, libpng12-dev, libtiff4-dev, libsm-dev, libgl1-mesa-dev | libgl-dev, libglu1-mesa-dev | libglu-dev, libesd0-dev, libgnomeprintui2.2-dev, libgconf2-dev, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev
+Build-Depends: debhelper (>=4.0), bc, flex, bison, gettext, libgtk2.0-dev, =PY, =PY-dev, zlib1g-dev, libjpeg62-dev, libpng12-dev, libtiff4-dev, libsm-dev, libgl1-mesa-dev | libgl-dev, libglu1-mesa-dev | libglu-dev, libesd0-dev, libgnomeprintui2.2-dev, libgconf2-dev, libgstreamer0.10-dev, libgstreamer-plugins-base0.10-dev, libnotify-dev
 Maintainer: wxWidgets dev-team <wx-dev@lists.wxwidgets.org>
 Standards-Version: 3.6.2.1
 
 Maintainer: wxWidgets dev-team <wx-dev@lists.wxwidgets.org>
 Standards-Version: 3.6.2.1
 
index 5e1d4b56bc4cf1a251ef180329e8e79906cd7124..bbb0e9ec638df9396c7d790e6970d4c360f0c60e 100644 (file)
@@ -539,6 +539,7 @@ All (GUI):
 wxGTK:
 
 - Allow building wxGTK3 with Broadway backend (Kolya Kosenko).
 wxGTK:
 
 - Allow building wxGTK3 with Broadway backend (Kolya Kosenko).
+- Provide native implementation of wxNotificationMessage using libnotify.
 - Improve drag-and-drop of URLs.
 
 wxMSW:
 - Improve drag-and-drop of URLs.
 
 wxMSW:
diff --git a/include/wx/gtk/notifmsg.h b/include/wx/gtk/notifmsg.h
new file mode 100644 (file)
index 0000000..195991e
--- /dev/null
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        wx/gtk/notifmsg.h
+// Purpose:     wxNotificationMessage for wxGTK.
+// Author:      Vadim Zeitlin
+// Created:     2012-07-25
+// RCS-ID:      $Id$
+// Copyright:   (c) 2012 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_GTK_NOTIFMSG_H_
+#define _WX_GTK_NOTIFMSG_H_
+
+typedef struct _NotifyNotification NotifyNotification;
+
+// ----------------------------------------------------------------------------
+// wxNotificationMessage
+// ----------------------------------------------------------------------------
+
+class WXDLLIMPEXP_ADV wxNotificationMessage : public wxNotificationMessageBase
+{
+public:
+    wxNotificationMessage() { Init(); }
+    wxNotificationMessage(const wxString& title,
+                          const wxString& message = wxString(),
+                          wxWindow *parent = NULL,
+                          int flags = wxICON_INFORMATION)
+        : wxNotificationMessageBase(title, message, parent, flags)
+    {
+        Init();
+    }
+
+    virtual ~wxNotificationMessage();
+
+
+    virtual bool Show(int timeout = Timeout_Auto);
+    virtual bool Close();
+
+private:
+    void Init() { m_notification = NULL; }
+
+    NotifyNotification* m_notification;
+
+    wxDECLARE_NO_COPY_CLASS(wxNotificationMessage);
+};
+
+#endif // _WX_GTK_NOTIFMSG_H_
index 39a964ec238be9c039d99bce2d41e835db0d85c9..2c76226c632041bbc55e610651e5e257071e42b5 100644 (file)
@@ -127,13 +127,14 @@ private:
     wxDECLARE_NO_COPY_CLASS(wxNotificationMessageBase);
 };
 
     wxDECLARE_NO_COPY_CLASS(wxNotificationMessageBase);
 };
 
-#if defined(__WXGTK__) && (wxUSE_LIBHILDON || wxUSE_LIBHILDON2)
-    #include "wx/gtk/hildon/notifmsg.h"
 /*
 /*
-    TODO: provide support for
-        - libnotify (Gnome)
-        - Growl (http://growl.info/, OS X)
+    TODO: Implement under OS X using notification centre (10.8+) or
+          Growl (http://growl.info/) for the previous versions.
  */
  */
+#if defined(__WXGTK__) && wxUSE_LIBNOTIFY
+    #include "wx/gtk/notifmsg.h"
+#elif defined(__WXGTK__) && (wxUSE_LIBHILDON || wxUSE_LIBHILDON2)
+    #include "wx/gtk/hildon/notifmsg.h"
 #elif defined(__WXMSW__) && wxUSE_TASKBARICON && wxUSE_TASKBARICON_BALLOONS
     #include "wx/msw/notifmsg.h"
 #else
 #elif defined(__WXMSW__) && wxUSE_TASKBARICON && wxUSE_TASKBARICON_BALLOONS
     #include "wx/msw/notifmsg.h"
 #else
index 68a8d1ab73b27f054eb11228eac403d4543aa75d..b2561a3bd017bc1aa298710629f094279cff0372 100644 (file)
 
     This class allows to show the user a message non intrusively.
 
 
     This class allows to show the user a message non intrusively.
 
-    Currently it is implemented natively only for the Maemo platform and uses
+    Currently it is implemented natively for Windows and GTK and uses
     (non-modal) dialogs for the display of the notifications under the other
     (non-modal) dialogs for the display of the notifications under the other
-    platforms but it will be extended to use the platform-specific notifications
-    in the other ports in the future.
+    platforms.
 
     Notice that this class is not a window and so doesn't derive from wxWindow.
 
 
     Notice that this class is not a window and so doesn't derive from wxWindow.
 
@@ -46,6 +45,14 @@ public:
     wxNotificationMessage(const wxString& title, const wxString& message = wxEmptyString,
                           wxWindow* parent = NULL, int flags = wxICON_INFORMATION);
 
     wxNotificationMessage(const wxString& title, const wxString& message = wxEmptyString,
                           wxWindow* parent = NULL, int flags = wxICON_INFORMATION);
 
+    /**
+        Destructor does not hide the notification.
+
+        The notification can continue to be shown even after the C++ object was
+        destroyed, call Close() explicitly if it needs to be hidden.
+     */
+    virtual ~wxNotificationMessage();
+
     /**
         Hides the notification.
 
     /**
         Hides the notification.
 
@@ -95,6 +102,11 @@ public:
         because the current platform may only support default timeout value
         and also because the user may be able to close the notification.
 
         because the current platform may only support default timeout value
         and also because the user may be able to close the notification.
 
+        @note When using native notifications in wxGTK, the timeout is ignored
+            for the notifications with @c wxICON_WARNING or @c wxICON_ERROR
+            flags, they always remain shown unless they're explicitly hidden by
+            the user, i.e. behave as if Timeout_Auto were given.
+
         @return @false if an error occurred.
     */
     virtual bool Show(int timeout = Timeout_Auto);
         @return @false if an error occurred.
     */
     virtual bool Show(int timeout = Timeout_Auto);
index d4c7b8f6f6beb00daccaf48083ef4b2d8a415b3a..bc8d2601bb177eeb6086c534cd5c596968b97081 100644 (file)
@@ -1747,6 +1747,9 @@ void MyFrame::OnRequestUserAttention(wxCommandEvent& WXUNUSED(event))
 
 void MyFrame::OnNotifMsgAuto(wxCommandEvent& WXUNUSED(event))
 {
 
 void MyFrame::OnNotifMsgAuto(wxCommandEvent& WXUNUSED(event))
 {
+    // Notice that the notification remains shown even after the
+    // wxNotificationMessage object itself is destroyed so we can show simple
+    // notifications using temporary objects.
     if ( !wxNotificationMessage
           (
             "Automatic Notification",
     if ( !wxNotificationMessage
           (
             "Automatic Notification",
@@ -1756,6 +1759,11 @@ void MyFrame::OnNotifMsgAuto(wxCommandEvent& WXUNUSED(event))
     {
         wxLogStatus("Failed to show notification message");
     }
     {
         wxLogStatus("Failed to show notification message");
     }
+
+    // But it doesn't have to be a temporary, of course.
+    wxNotificationMessage n("Dummy Warning", "Example of a warning notification.");
+    n.SetFlags(wxICON_ERROR);
+    n.Show(5); // Just for testing, use 5 second delay.
 }
 
 void MyFrame::OnNotifMsgShow(wxCommandEvent& WXUNUSED(event))
 }
 
 void MyFrame::OnNotifMsgShow(wxCommandEvent& WXUNUSED(event))
index ca576118586bbe74d588c4683ccf2505ce5569d5..8d690563561a6896451c16c6d873302293e0f118 100644 (file)
  * Use the Hildon 2.0 framework
  */
 #define wxUSE_LIBHILDON2 0
  * Use the Hildon 2.0 framework
  */
 #define wxUSE_LIBHILDON2 0
+/*
+ * Use libnotify library.
+ */
+#define wxUSE_LIBNOTIFY 0
 /*
  * Use libXpm
  */
 /*
  * Use libXpm
  */
index 9c328ce4a2b9fd1fb490995d0a7c2ad484139f86..20560d56a14e45ed81bd286d66da6c04b02b9460 100644 (file)
@@ -869,6 +869,10 @@ typedef pid_t GPid;
  * Use the Hildon 2.0 framework
  */
 #define wxUSE_LIBHILDON2 0
  * Use the Hildon 2.0 framework
  */
 #define wxUSE_LIBHILDON2 0
+/*
+ * Use libnotify library.
+ */
+#define wxUSE_LIBNOTIFY 0
 
 #define wxUSE_DC_TRANSFORM_MATRIX 1
 
 
 #define wxUSE_DC_TRANSFORM_MATRIX 1
 
diff --git a/src/gtk/notifmsg.cpp b/src/gtk/notifmsg.cpp
new file mode 100644 (file)
index 0000000..8b4b75c
--- /dev/null
@@ -0,0 +1,194 @@
+///////////////////////////////////////////////////////////////////////////////
+// Name:        src/gtk/notifmsg.cpp
+// Purpose:     wxNotificationMessage for wxGTK using libnotify.
+// Author:      Vadim Zeitlin
+// Created:     2012-07-25
+// RCS-ID:      $Id$
+// Copyright:   (c) 2012 Vadim Zeitlin <vadim@wxwidgets.org>
+// Licence:     wxWindows licence
+///////////////////////////////////////////////////////////////////////////////
+
+// ============================================================================
+// declarations
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// headers
+// ----------------------------------------------------------------------------
+
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#if wxUSE_NOTIFICATION_MESSAGE
+
+#ifndef WX_PRECOMP
+#endif // WX_PRECOMP
+
+#include "wx/notifmsg.h"
+
+#include <libnotify/notify.h>
+
+#include "wx/module.h"
+
+// General note about error handling: as notifications are meant to be
+// non-intrusive, we use wxLogDebug() and not wxLogError() if anything goes
+// wrong here to avoid spamming the user with message boxes. As all methods
+// return boolean indicating success or failure, the caller could show the
+// notification in some other way or notify about the error itself if needed.
+#include "wx/gtk/private/error.h"
+
+// ----------------------------------------------------------------------------
+// A module for cleaning up libnotify on exit.
+// ----------------------------------------------------------------------------
+
+class wxLibnotifyModule : public wxModule
+{
+public:
+    virtual bool OnInit()
+    {
+        // We're initialized on demand.
+        return true;
+    }
+
+    virtual void OnExit()
+    {
+        if ( notify_is_initted() )
+            notify_uninit();
+    }
+
+    // Do initialize the library.
+    static bool Initialize()
+    {
+        if ( !notify_is_initted() )
+        {
+            if ( !notify_init(wxTheApp->GetAppName().utf8_str()) )
+                return false;
+        }
+
+        return true;
+    }
+
+private:
+    wxDECLARE_DYNAMIC_CLASS(wxLibnotifyModule);
+};
+
+wxIMPLEMENT_DYNAMIC_CLASS(wxLibnotifyModule, wxModule);
+
+// ============================================================================
+// wxNotificationMessage implementation
+// ============================================================================
+
+bool wxNotificationMessage::Show(int timeout)
+{
+    if ( !wxLibnotifyModule::Initialize() )
+        return false;
+
+    // Determine the GTK+ icon to use from flags and also set the urgency
+    // appropriately.
+    const char* icon;
+    NotifyUrgency urgency;
+    switch ( GetFlags() )
+    {
+        case wxICON_INFORMATION:
+            icon = "dialog-information";
+            urgency = NOTIFY_URGENCY_LOW;
+            break;
+
+        case wxICON_WARNING:
+            icon = "dialog-warning";
+            urgency = NOTIFY_URGENCY_NORMAL;
+            break;
+
+        case wxICON_ERROR:
+            icon = "dialog-error";
+            urgency = NOTIFY_URGENCY_CRITICAL;
+            break;
+
+        default:
+            wxFAIL_MSG( "Unknown notification message flags." );
+            return false;
+    }
+
+    // Create the notification or update an existing one if we had already been
+    // shown before.
+    if ( !m_notification )
+    {
+        m_notification = notify_notification_new
+                         (
+                            GetTitle().utf8_str(),
+                            GetMessage().utf8_str(),
+                            icon
+                         );
+        if ( !m_notification )
+        {
+            wxLogDebug("Failed to creation notification.");
+
+            return false;
+        }
+    }
+    else
+    {
+        if ( !notify_notification_update
+              (
+                m_notification,
+                GetTitle().utf8_str(),
+                GetMessage().utf8_str(),
+                icon
+              ) )
+        {
+            wxLogDebug(wxS("notify_notification_update() unexpectedly failed."));
+        }
+    }
+
+
+    // Set the notification parameters not specified during creation.
+    notify_notification_set_timeout
+    (
+        m_notification,
+        timeout == Timeout_Auto ? NOTIFY_EXPIRES_DEFAULT
+                                : timeout == Timeout_Never ? NOTIFY_EXPIRES_NEVER
+                                                           : 1000*timeout
+    );
+
+    notify_notification_set_urgency(m_notification, urgency);
+
+
+    // Finally do show the notification.
+    wxGtkError error;
+    if ( !notify_notification_show(m_notification, error.Out()) )
+    {
+        wxLogDebug("Failed to shown notification: %s", error.GetMessage());
+
+        return false;
+    }
+
+    return true;
+}
+
+bool wxNotificationMessage::Close()
+{
+    wxCHECK_MSG( m_notification, false,
+                 wxS("Can't close not shown notification.") );
+
+    wxGtkError error;
+    if ( !notify_notification_close(m_notification, error.Out()) )
+    {
+        wxLogDebug("Failed to hide notification: %s", error.GetMessage());
+
+        return false;
+    }
+
+    return true;
+}
+
+wxNotificationMessage::~wxNotificationMessage()
+{
+    if ( m_notification )
+        g_object_unref(m_notification);
+}
+
+#endif // wxUSE_NOTIFICATION_MESSAGE