Implement wxNotificationMessage using libnotify in wxGTK.

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
This commit is contained in:
Vadim Zeitlin
2012-07-27 15:36:54 +00:00
parent 5a92b56137
commit afbf46a317
13 changed files with 481 additions and 9 deletions

View File

@@ -2918,6 +2918,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2_GUI_HDR = \
wx/gtk/menuitem.h \ wx/gtk/menuitem.h \
wx/gtk/msgdlg.h \ wx/gtk/msgdlg.h \
wx/gtk/notebook.h \ wx/gtk/notebook.h \
wx/gtk/notifmsg.h \
wx/gtk/print.h \ wx/gtk/print.h \
wx/gtk/radiobox.h \ wx/gtk/radiobox.h \
wx/gtk/radiobut.h \ wx/gtk/radiobut.h \
@@ -2973,6 +2974,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_3_GUI_HDR = \
wx/gtk/menuitem.h \ wx/gtk/menuitem.h \
wx/gtk/msgdlg.h \ wx/gtk/msgdlg.h \
wx/gtk/notebook.h \ wx/gtk/notebook.h \
wx/gtk/notifmsg.h \
wx/gtk/print.h \ wx/gtk/print.h \
wx/gtk/radiobox.h \ wx/gtk/radiobox.h \
wx/gtk/radiobut.h \ wx/gtk/radiobut.h \
@@ -5525,6 +5527,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_2___GUI_SRC_OBJECTS = \
monodll_gtk_msgdlg.o \ monodll_gtk_msgdlg.o \
monodll_gtk_nativewin.o \ monodll_gtk_nativewin.o \
monodll_gtk_notebook.o \ monodll_gtk_notebook.o \
monodll_gtk_notifmsg.o \
monodll_gtk_print.o \ monodll_gtk_print.o \
monodll_gtk_radiobox.o \ monodll_gtk_radiobox.o \
monodll_gtk_radiobut.o \ monodll_gtk_radiobut.o \
@@ -5581,6 +5584,7 @@ COND_TOOLKIT_GTK_TOOLKIT_VERSION_3___GUI_SRC_OBJECTS = \
monodll_gtk_msgdlg.o \ monodll_gtk_msgdlg.o \
monodll_gtk_nativewin.o \ monodll_gtk_nativewin.o \
monodll_gtk_notebook.o \ monodll_gtk_notebook.o \
monodll_gtk_notifmsg.o \
monodll_gtk_print.o \ monodll_gtk_print.o \
monodll_gtk_radiobox.o \ monodll_gtk_radiobox.o \
monodll_gtk_radiobut.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_msgdlg.o \
monolib_gtk_nativewin.o \ monolib_gtk_nativewin.o \
monolib_gtk_notebook.o \ monolib_gtk_notebook.o \
monolib_gtk_notifmsg.o \
monolib_gtk_print.o \ monolib_gtk_print.o \
monolib_gtk_radiobox.o \ monolib_gtk_radiobox.o \
monolib_gtk_radiobut.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_msgdlg.o \
monolib_gtk_nativewin.o \ monolib_gtk_nativewin.o \
monolib_gtk_notebook.o \ monolib_gtk_notebook.o \
monolib_gtk_notifmsg.o \
monolib_gtk_print.o \ monolib_gtk_print.o \
monolib_gtk_radiobox.o \ monolib_gtk_radiobox.o \
monolib_gtk_radiobut.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_msgdlg.o \
coredll_gtk_nativewin.o \ coredll_gtk_nativewin.o \
coredll_gtk_notebook.o \ coredll_gtk_notebook.o \
coredll_notifmsg.o \
coredll_gtk_print.o \ coredll_gtk_print.o \
coredll_gtk_radiobox.o \ coredll_gtk_radiobox.o \
coredll_gtk_radiobut.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_msgdlg.o \
coredll_gtk_nativewin.o \ coredll_gtk_nativewin.o \
coredll_gtk_notebook.o \ coredll_gtk_notebook.o \
coredll_notifmsg.o \
coredll_gtk_print.o \ coredll_gtk_print.o \
coredll_gtk_radiobox.o \ coredll_gtk_radiobox.o \
coredll_gtk_radiobut.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_msgdlg.o \
corelib_gtk_nativewin.o \ corelib_gtk_nativewin.o \
corelib_gtk_notebook.o \ corelib_gtk_notebook.o \
corelib_notifmsg.o \
corelib_gtk_print.o \ corelib_gtk_print.o \
corelib_gtk_radiobox.o \ corelib_gtk_radiobox.o \
corelib_gtk_radiobut.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_msgdlg.o \
corelib_gtk_nativewin.o \ corelib_gtk_nativewin.o \
corelib_gtk_notebook.o \ corelib_gtk_notebook.o \
corelib_notifmsg.o \
corelib_gtk_print.o \ corelib_gtk_print.o \
corelib_gtk_radiobox.o \ corelib_gtk_radiobox.o \
corelib_gtk_radiobut.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@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@ $(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@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@ $(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@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@ $(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@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@ $(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@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@ $(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@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@ $(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@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@ $(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@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@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/gtk/print.cpp

View File

@@ -1162,6 +1162,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/gtk/msgdlg.cpp src/gtk/msgdlg.cpp
src/gtk/nativewin.cpp src/gtk/nativewin.cpp
src/gtk/notebook.cpp src/gtk/notebook.cpp
src/gtk/notifmsg.cpp
src/gtk/print.cpp src/gtk/print.cpp
src/gtk/radiobox.cpp src/gtk/radiobox.cpp
src/gtk/radiobut.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/menuitem.h
wx/gtk/msgdlg.h wx/gtk/msgdlg.h
wx/gtk/notebook.h wx/gtk/notebook.h
wx/gtk/notifmsg.h
wx/gtk/print.h wx/gtk/print.h
wx/gtk/radiobox.h wx/gtk/radiobox.h
wx/gtk/radiobut.h wx/gtk/radiobut.h

145
configure vendored
View File

@@ -980,6 +980,8 @@ HILDON2_LIBS
HILDON2_CFLAGS HILDON2_CFLAGS
HILDON_LIBS HILDON_LIBS
HILDON_CFLAGS HILDON_CFLAGS
LIBNOTIFY_LIBS
LIBNOTIFY_CFLAGS
GNOMEVFS_LIBS GNOMEVFS_LIBS
GNOMEVFS_CFLAGS GNOMEVFS_CFLAGS
LIBGNOMEPRINTUI_LIBS LIBGNOMEPRINTUI_LIBS
@@ -1126,6 +1128,7 @@ with_libmspack
with_gtkprint with_gtkprint
with_gnomeprint with_gnomeprint
with_gnomevfs with_gnomevfs
with_libnotify
with_hildon with_hildon
with_opengl with_opengl
with_dmalloc with_dmalloc
@@ -1429,6 +1432,8 @@ LIBGNOMEPRINTUI_CFLAGS
LIBGNOMEPRINTUI_LIBS LIBGNOMEPRINTUI_LIBS
GNOMEVFS_CFLAGS GNOMEVFS_CFLAGS
GNOMEVFS_LIBS GNOMEVFS_LIBS
LIBNOTIFY_CFLAGS
LIBNOTIFY_LIBS
HILDON_CFLAGS HILDON_CFLAGS
HILDON_LIBS HILDON_LIBS
HILDON2_CFLAGS HILDON2_CFLAGS
@@ -2349,6 +2354,7 @@ Optional Packages:
--without-gtkprint don't use GTK printing support --without-gtkprint don't use GTK printing support
--without-gnomeprint don't use GNOME printing libraries --without-gnomeprint don't use GNOME printing libraries
--with-gnomevfs use GNOME VFS for associating MIME types --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-hildon use Hildon framework for Nokia 770/800/810
--with-opengl use OpenGL (or Mesa) --with-opengl use OpenGL (or Mesa)
--with-dmalloc use dmalloc library (http://dmalloc.com/) --with-dmalloc use dmalloc library (http://dmalloc.com/)
@@ -2425,6 +2431,10 @@ Some influential environment variables:
C compiler flags for GNOMEVFS, overriding pkg-config C compiler flags for GNOMEVFS, overriding pkg-config
GNOMEVFS_LIBS GNOMEVFS_LIBS
linker flags for GNOMEVFS, overriding pkg-config 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 HILDON_CFLAGS
C compiler flags for HILDON, overriding pkg-config C compiler flags for HILDON, overriding pkg-config
HILDON_LIBS linker 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= withstring=
defaultval=$wxUSE_ALL_FEATURES defaultval=$wxUSE_ALL_FEATURES
if test -z "$defaultval"; then 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 if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then
TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs" TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs"
fi fi
if test "$wxUSE_LIBNOTIFY" = "yes" ; then
TOOLKIT_EXTRA="$TOOLKIT_EXTRA libnotify"
fi
if test "$wxUSE_LIBHILDON" = "yes"; then if test "$wxUSE_LIBHILDON" = "yes"; then
TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon" TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon"
fi fi

View 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(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_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(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(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(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 if test "$wxUSE_LIBHILDON" = "yes" ; then
PKG_CHECK_MODULES(HILDON, PKG_CHECK_MODULES(HILDON,
[hildon-lgpl >= 0.9], [hildon-lgpl >= 0.9],
@@ -7981,6 +7998,9 @@ case "$TOOLKIT" in
if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then
TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs" TOOLKIT_EXTRA="$TOOLKIT_EXTRA gnomevfs"
fi fi
if test "$wxUSE_LIBNOTIFY" = "yes" ; then
TOOLKIT_EXTRA="$TOOLKIT_EXTRA libnotify"
fi
if test "$wxUSE_LIBHILDON" = "yes"; then if test "$wxUSE_LIBHILDON" = "yes"; then
TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon" TOOLKIT_EXTRA="$TOOLKIT_EXTRA hildon"
fi fi

2
debian/control.in vendored
View File

@@ -1,7 +1,7 @@
Source: wxwidgets=V Source: wxwidgets=V
Section: libs Section: libs
Priority: optional 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> Maintainer: wxWidgets dev-team <wx-dev@lists.wxwidgets.org>
Standards-Version: 3.6.2.1 Standards-Version: 3.6.2.1

View File

@@ -539,6 +539,7 @@ All (GUI):
wxGTK: wxGTK:
- Allow building wxGTK3 with Broadway backend (Kolya Kosenko). - Allow building wxGTK3 with Broadway backend (Kolya Kosenko).
- Provide native implementation of wxNotificationMessage using libnotify.
- Improve drag-and-drop of URLs. - Improve drag-and-drop of URLs.
wxMSW: wxMSW:

47
include/wx/gtk/notifmsg.h Normal file
View File

@@ -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_

View 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 TODO: Implement under OS X using notification centre (10.8+) or
- libnotify (Gnome) Growl (http://growl.info/) for the previous versions.
- Growl (http://growl.info/, OS X)
*/ */
#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 #elif defined(__WXMSW__) && wxUSE_TASKBARICON && wxUSE_TASKBARICON_BALLOONS
#include "wx/msw/notifmsg.h" #include "wx/msw/notifmsg.h"
#else #else

View File

@@ -11,10 +11,9 @@
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 platforms.
in the other ports in the future.
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, wxNotificationMessage(const wxString& title, const wxString& message = wxEmptyString,
wxWindow* parent = NULL, int flags = wxICON_INFORMATION); 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 because the current platform may only support default timeout value
and also because the user may be able to close the notification. 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. @return @false if an error occurred.
*/ */
virtual bool Show(int timeout = Timeout_Auto); virtual bool Show(int timeout = Timeout_Auto);

View 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 if ( !wxNotificationMessage
( (
"Automatic Notification", "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))

View File

@@ -822,6 +822,10 @@
* Use the Hildon 2.0 framework * Use the Hildon 2.0 framework
*/ */
#define wxUSE_LIBHILDON2 0 #define wxUSE_LIBHILDON2 0
/*
* Use libnotify library.
*/
#define wxUSE_LIBNOTIFY 0
/* /*
* Use libXpm * Use libXpm
*/ */

View File

@@ -869,6 +869,10 @@ typedef pid_t GPid;
* Use the Hildon 2.0 framework * Use the Hildon 2.0 framework
*/ */
#define wxUSE_LIBHILDON2 0 #define wxUSE_LIBHILDON2 0
/*
* Use libnotify library.
*/
#define wxUSE_LIBNOTIFY 0
#define wxUSE_DC_TRANSFORM_MATRIX 1 #define wxUSE_DC_TRANSFORM_MATRIX 1

194
src/gtk/notifmsg.cpp Normal file
View File

@@ -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