Compare commits
186 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9af4e2c2c1 | |||
| 387cbde678 | |||
| 9e783527b3 | |||
| 472348534f | |||
| 35fbd14600 | |||
| a66732b586 | |||
| cf694bc246 | |||
| e3585dacce | |||
| 2696fbc98f | |||
| 1dc1b2c93f | |||
| 1d7f1372d0 | |||
| ec0e05525f | |||
| 9c8d313f38 | |||
| bf4292b24c | |||
| ceea5ef8fe | |||
| 56bc856b71 | |||
| 31be1165be | |||
| 36446419a3 | |||
| dafcd60b6c | |||
| 0c27054e73 | |||
| 8c5d2437f7 | |||
| 57fbd241ff | |||
| 610a91de25 | |||
| 138d13b2a4 | |||
| 4d8116d641 | |||
| 432d618f51 | |||
| ca8c78aecf | |||
| 5fc9179fce | |||
| 7e9215c616 | |||
| 51d3f7330c | |||
| dfbb9d64b5 | |||
| f0032274a8 | |||
| f7b6505060 | |||
| e4d9682836 | |||
| c994d518a8 | |||
| a8ebb5a029 | |||
| bd67c09866 | |||
| cac66b0176 | |||
| 18d5d86346 | |||
| 8ed5317593 | |||
| f2167ac6fe | |||
| 09d622339a | |||
| d922c751d5 | |||
| 529b689a35 | |||
| 50ad2bb2e7 | |||
| 70b686742c | |||
| 0c0f6961cb | |||
| 55fcbecc93 | |||
| 8dedc77abd | |||
| 45fe0becc7 | |||
| 5530d73ca0 | |||
| e80f1861d0 | |||
| c7fab5a23d | |||
| 8aea6870a7 | |||
| f677652d7d | |||
| a27ca7142b | |||
| 8ee4f373fe | |||
| 1a53f723c4 | |||
| 6c1036e9e9 | |||
| bfa5cea589 | |||
| 2d3fabf22f | |||
| 9d432c2f96 | |||
| cd20b58e1b | |||
| 057bccc78e | |||
| 62f50bfa0e | |||
| 028d675264 | |||
| adccef1bd0 | |||
| eacffc9508 | |||
| d89fd19f87 | |||
| 78dc4e83a2 | |||
| 5cb0f9b3a5 | |||
| 85bb7d41e1 | |||
| 66dd5d22e6 | |||
| a367726d57 | |||
| 0a474992c2 | |||
| 05f883f5b6 | |||
| 08cc81743b | |||
| c6e0fe3855 | |||
| 46f5b022e5 | |||
| 301e78d7db | |||
| de549ecdd3 | |||
| d8880ebb77 | |||
| 383ddaa39e | |||
| ebb80c587e | |||
| c50b3669ee | |||
| 2a0c24e934 | |||
| 44bb96f2c8 | |||
| 8a846eb737 | |||
| 1209ae2cc8 | |||
| ce69e17c53 | |||
| c577abf769 | |||
| 4794f2b309 | |||
| 6fe89cc83a | |||
| edf587b5d0 | |||
| cef800524a | |||
| 44fb34e048 | |||
| fa5b3494ce | |||
| 980b21ed3a | |||
| 565c6e3ba5 | |||
| de4153065e | |||
| a7cef089a8 | |||
| c2a0b5322c | |||
| 1b4ae4ff25 | |||
| 0d4e66328c | |||
| 91ba6c2dc6 | |||
| a57801b074 | |||
| c1b5a2d0ef | |||
| 785183c7fb | |||
| c2929809ff | |||
| 840d2ef409 | |||
| a9274b2f0c | |||
| 32931e7d08 | |||
| 410b70f907 | |||
| 0aa1bd5e97 | |||
| d7542b9af8 | |||
| 859145de52 | |||
| 5d2db8f012 | |||
| 1fa83a74f5 | |||
| cb9aff42c7 | |||
| 1124ea7c72 | |||
| ec80b47977 | |||
| 1fd687f7c2 | |||
| f1fa35441e | |||
| d7b7242847 | |||
| a2e485757c | |||
| 2c79e71d98 | |||
| c2d9124553 | |||
| 806bb88530 | |||
| ea696a2362 | |||
| 87234fd57b | |||
| 31ec94faa5 | |||
| 2dcfebc67f | |||
| d81b18a210 | |||
| 185087e553 | |||
| 26f74e40f6 | |||
| ff76bf8ba7 | |||
| 099100a9d3 | |||
| 94d05dfaf8 | |||
| f10a6beefc | |||
| fa7fc23f44 | |||
| f34a1f4807 | |||
| 8b4829abab | |||
| f21dfb358d | |||
| 5a1a08f160 | |||
| 0cc2d916f1 | |||
| dbe2343a7d | |||
| bd118b7212 | |||
| 175116ac7d | |||
| 12cf52e468 | |||
| c5162fa6e8 | |||
| 8aa2e2453e | |||
| 2488bbf9fc | |||
| 4dd906e7a7 | |||
| 4e3c34eab6 | |||
| 2083f3e262 | |||
| c400e38f98 | |||
| b2e2fe6ea3 | |||
| 115418d968 | |||
| 64fb36c3d8 | |||
| 2255a7225d | |||
| f4dc453e09 | |||
| a8749b2614 | |||
| 1c92d4b28d | |||
| 15c38b93e2 | |||
| 1fc3556064 | |||
| 31b514d831 | |||
| 752742d044 | |||
| e49d754fdc | |||
| 22f7b3ee23 | |||
| a704364549 | |||
| 21c7e08b21 | |||
| 2d509b1d84 | |||
| 5ef9c5a5bf | |||
| 77d170539a | |||
| 9255c12c87 | |||
| f2b3c6e6a3 | |||
| f6238492bc | |||
| fab341df09 | |||
| e11dcc5426 | |||
| bee067608a | |||
| 9eea275ed7 | |||
| 39e60a0564 | |||
| ac5905d0db | |||
| c962023b0d | |||
| a9d9b8581b | |||
| 78bd6b2844 |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -20,8 +20,8 @@ GTK+ requires the following packages:
|
||||
Simple install procedure
|
||||
========================
|
||||
|
||||
% gzip -cd gtk+-2.0.2.tar.gz | tar xvf - # unpack the sources
|
||||
% cd gtk+-2.0.2 # change to the toplevel directory
|
||||
% gzip -cd gtk+-2.0.5.tar.gz | tar xvf - # unpack the sources
|
||||
% cd gtk+-2.0.5 # change to the toplevel directory
|
||||
% ./configure # run the `configure' script
|
||||
% make # build GTK
|
||||
[ Become root if necessary ]
|
||||
|
||||
+1
-3
@@ -13,17 +13,15 @@ EXTRA_DIST = \
|
||||
NEWS.pre-1-0 \
|
||||
ChangeLog.pre-1-0 \
|
||||
ChangeLog.pre-1-2 \
|
||||
ChangeLog.pre-2-0 \
|
||||
README.cvs-commits \
|
||||
README.win32 \
|
||||
README.nanox \
|
||||
config.h.win32 \
|
||||
gtk-zip.sh \
|
||||
sanitize-la.sh \
|
||||
po/README.tools \
|
||||
po/README.translators \
|
||||
po/desk.pl \
|
||||
po/makefile.mingw \
|
||||
po/update.pl \
|
||||
po/po2tbl.sed.in \
|
||||
examples/aspectframe/Makefile \
|
||||
examples/aspectframe/aspectframe.c \
|
||||
|
||||
@@ -1,3 +1,64 @@
|
||||
Overview of Changes in GTK+ 2.0.5
|
||||
=================================
|
||||
|
||||
* Fix a wrong assertion that broke gtk_file_selection_set_filename();
|
||||
also another fix from testing this function with non-UTF-8 filenames.
|
||||
* Fix incorrect property notification in GtkTextView. [James M. Cape]
|
||||
|
||||
Overview of Changes in GTK+ 2.0.4
|
||||
=================================
|
||||
|
||||
* Fix a number of types which were registered with the
|
||||
type system with the wrong names [James Henstridge, Jonathan Blandford]
|
||||
* Support missing data types in GtkList/TreeStore [Daniel Elstner]
|
||||
* Misc GtkTreeView bug fixes [Dave Camp, Jonathan, Daniel Elstner,
|
||||
Josh Parsons]
|
||||
* Drag and drop fixes, including a stuck grab. [Dave, Thomas Leonard,
|
||||
Owen Taylor]
|
||||
* Calculate screen size on win32 from the "logical DPI"
|
||||
[Joaquin Cuenca Abela, Tor Lillqvist]
|
||||
* Misc Win32 bug fixes. [Florent Duguet, Torn]
|
||||
* Fix theme changes for GtkMenu [Soeren Sandmann]
|
||||
* Fix gdk_pixbuf_from_drawable() for big endian. [Federico Mena Quintero]
|
||||
* Fix encoding handling for gtk_file_selection_set_filename()
|
||||
[Sebastian Ritau, Owen]
|
||||
* Fix crash with DND, Qt and Metacity [Cha Young-Ho, Havoc, Owen]
|
||||
* Fixes for DirectColor visuals [Shivaram Upadhyayula]
|
||||
* Memory leak and UMR fixes [Michael Meeks, Matthias Clasen, Valgrind]
|
||||
* Misc bug fixes
|
||||
* Updated translations (ca,cs,da,es,et,fr,ms,nl,pl,pt,pt_BR,ru,sv)
|
||||
|
||||
Other contributors: Nicholas Allen, Jacob Berkman, Remus Draica,
|
||||
Nano Golveia, Tim Janik, Sergey Kuzminov, George Lebl, Garrett Lesage,
|
||||
Robin Lu, Timo Meinen, Michel Selten, Boris Shingarov, Jeff Waugh
|
||||
|
||||
Overview of Changes in GTK+ 2.0.3
|
||||
=================================
|
||||
|
||||
* GtkTreeView fixes (Jonathan Blandford, Kristian Rietveld, Daniel Elstner)
|
||||
* Improve GdkRGB support for low color depths (Tor Lillqvist).
|
||||
* Tweak F10 behavior to focus GtkMenuBar. (Owen Taylor)
|
||||
* Include internal children when focusing. (Jonathan)
|
||||
* Win32 fixes (Tor Lillqvist, David Sterba)
|
||||
* Allow use of a pixmap as the drawable in gdk_pixmap_new(). (Kristian)
|
||||
* GdkPixbuf fixes (Matthias Clasen, Michael Natterer, Federico Mena Quintero)
|
||||
* GtkMenu fixes. (Soeren Sandmann)
|
||||
* Find gdk-pixbuf-csource when cross-compiling. (Michael Natterer)
|
||||
* Misc input-method related fixes (Yao Zhang, Federico)
|
||||
* Fix stuck grab during DND. (Dave Camp, Owen)
|
||||
* Remove in-bevel from scrolled-offscreen menus. (Ettore Perazzoli)
|
||||
* Various plug/socket fixes (Owen, Padraig O'Briain, Dave Camp,
|
||||
Michael Meeks)
|
||||
* Handle Xlib internal connections (HideToshi Tajima)
|
||||
* Many miscellaneous bug fixes.
|
||||
|
||||
Other contributors: Jacob Berkman, Abigail Brady, Rich Burridge,
|
||||
Anders Carlsson, Murray Cumming, Nalin Dahyabhai, James Henstridge,
|
||||
David Highley, Ben Liblitt, Tim Janik, Bill Jannsen, Lauris Kaplinski,
|
||||
Sergey Kuzminov, Alex Larsson, Sven Neumann, Havoc Pennington, Gareth Pearce,
|
||||
Simon Floery, Thomas Leonard, Detlef Reichl, Martin Schulze, Christophe Saout,
|
||||
Timo Sirainen, Graham Swallow.
|
||||
|
||||
Overview of Changes in GTK+ 2.0.2
|
||||
=================================
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
General Information
|
||||
===================
|
||||
|
||||
This is GTK+ version 2.0.2. GTK+ is a multi-platform toolkit for
|
||||
This is GTK+ version 2.0.5. GTK+ is a multi-platform toolkit for
|
||||
creating graphical user interfaces. Offering a complete set of widgets,
|
||||
GTK+ is suitable for projects ranging from small one-off projects to
|
||||
complete application suites.
|
||||
|
||||
@@ -45,9 +45,6 @@
|
||||
#undef USE_GMODULE
|
||||
#undef USE_MMX
|
||||
|
||||
/* Define to use X11R6 additions to XIM */
|
||||
#undef USE_X11R6_XIM
|
||||
|
||||
/* Define to use XKB extension */
|
||||
#undef HAVE_XKB
|
||||
|
||||
|
||||
+51
-46
@@ -1,3 +1,6 @@
|
||||
# require autoconf 2.52
|
||||
AC_PREREQ(2.52)
|
||||
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(gdk/gdktypes.h)
|
||||
|
||||
@@ -29,9 +32,9 @@ GLIB_AC_DIVERT_BEFORE_HELP([
|
||||
#
|
||||
GTK_MAJOR_VERSION=2
|
||||
GTK_MINOR_VERSION=0
|
||||
GTK_MICRO_VERSION=2
|
||||
GTK_INTERFACE_AGE=2
|
||||
GTK_BINARY_AGE=2
|
||||
GTK_MICRO_VERSION=5
|
||||
GTK_INTERFACE_AGE=5
|
||||
GTK_BINARY_AGE=5
|
||||
GTK_VERSION=$GTK_MAJOR_VERSION.$GTK_MINOR_VERSION.$GTK_MICRO_VERSION
|
||||
dnl This is the X.Y used in -lgtk-FOO-X.Y
|
||||
GTK_API_VERSION=2.0
|
||||
@@ -169,8 +172,6 @@ AC_ARG_ENABLE(ansi, [ --enable-ansi turn on strict ansi [default=no]]
|
||||
, enable_ansi=no)
|
||||
AC_ARG_ENABLE(xim, [ --enable-xim support XIM [default=yes]],
|
||||
, enable_xim="yes")
|
||||
AC_ARG_ENABLE(xim_inst, [ --disable-xim-inst does not use xim instantiate callback],
|
||||
, enable_xim_inst="maybe")
|
||||
AC_ARG_ENABLE(xkb, [ --enable-xkb support XKB [default=maybe]],
|
||||
, enable_xkb="maybe")
|
||||
AC_ARG_ENABLE(rebuilds, [ --disable-rebuilds disable all source autogeneration rules],,enable_rebuilds=yes)
|
||||
@@ -310,7 +311,7 @@ AM_CONDITIONAL(DISABLE_EXPLICIT_DEPS, test $enable_explicit_deps = no)
|
||||
# define a MAINT-like variable REBUILD which is set if Perl
|
||||
# and awk are found, so autogenerated sources can be rebuilt
|
||||
|
||||
AC_CHECK_PROGS(PERL, perl5 perl)
|
||||
AC_PATH_PROGS(PERL, perl5 perl)
|
||||
|
||||
# We would like indent, but don't require it.
|
||||
AC_CHECK_PROG(INDENT, indent, indent)
|
||||
@@ -323,7 +324,7 @@ if test "x$enable_rebuilds" = "xyes" && \
|
||||
fi
|
||||
AC_SUBST(REBUILD)
|
||||
|
||||
AC_CHECK_FUNCS(lstat mkstemp)
|
||||
AC_CHECK_FUNCS(lstat mkstemp flockfile)
|
||||
|
||||
# sigsetjmp is a macro on some platforms, so AC_CHECK_FUNCS is not reliable
|
||||
AC_MSG_CHECKING(for sigsetjmp)
|
||||
@@ -352,7 +353,7 @@ AC_SUBST(STRIP_BEGIN)
|
||||
AC_SUBST(STRIP_END)
|
||||
|
||||
# i18n stuff
|
||||
ALL_LINGUAS="az ca cs cy da de el en_GB en@IPA es et eu fa fi fr ga gl he hr hu ia it ja ko lt ms nl nn no pl pt pt_BR ro ru sk sl sp sr sv tr uk vi wa zh_TW zh_CN"
|
||||
ALL_LINGUAS="ar az ca cs cy da de el en_GB en@IPA es et eu fa fi fr ga gl he hr hu ia it ja ko lt ms nl nn no pl pt pt_BR ro ru sk sl sp sr sv tr uk vi wa zh_TW zh_CN"
|
||||
AM_GLIB_GNU_GETTEXT
|
||||
LIBS="$LIBS $INTLLIBS"
|
||||
|
||||
@@ -500,6 +501,8 @@ AM_CONDITIONAL(HAVE_WINTAB, test x$have_wintab = xyes)
|
||||
saved_cflags="$CFLAGS"
|
||||
saved_ldflags="$LDFLAGS"
|
||||
|
||||
# check for bytesex stuff
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
# Checks for header files.
|
||||
AC_HEADER_STDC
|
||||
@@ -736,6 +739,12 @@ dnl Test for libpng
|
||||
*** from CVS.])
|
||||
fi
|
||||
|
||||
REBUILD_PNGS=\#
|
||||
if test -z "$LIBPNG"; then
|
||||
REBUILD_PNGS=
|
||||
fi
|
||||
AC_SUBST(REBUILD_PNGS)
|
||||
|
||||
AC_SUBST(LIBTIFF)
|
||||
AC_SUBST(LIBJPEG)
|
||||
AC_SUBST(LIBPNG)
|
||||
@@ -850,6 +859,16 @@ fi
|
||||
|
||||
AM_CONDITIONAL(USE_MMX, test x$use_mmx_asm = xyes)
|
||||
|
||||
dnl Look for a host system's gdk-pixbuf-csource if we are cross-compiling
|
||||
|
||||
AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
|
||||
|
||||
if test $cross_compiling = yes; then
|
||||
AC_PATH_PROG(GDK_PIXBUF_CSOURCE, gdk-pixbuf-csource, no)
|
||||
if test x$GDK_PIXBUF_CSOURCE = xno; then
|
||||
AC_MSG_ERROR(Could not find a gdk-pixbuf-csource in your PATH)
|
||||
fi
|
||||
fi
|
||||
|
||||
GDK_PIXBUF_PACKAGES="gmodule-2.0 gobject-2.0"
|
||||
GDK_PIXBUF_EXTRA_LIBS="$STATIC_LIB_DEPS $MATH_LIB"
|
||||
@@ -940,7 +959,7 @@ if test "x$gdktarget" = "xx11"; then
|
||||
# then we need to repeat the checks.
|
||||
#
|
||||
x_libs="`$PKG_CONFIG --libs $PANGO_PACKAGES`"
|
||||
case x_libs in
|
||||
case "$x_libs" in
|
||||
*-lX11*) pango_omitted_x_deps=no ;;
|
||||
*) pango_omitted_x_deps=yes ;;
|
||||
esac
|
||||
@@ -960,24 +979,32 @@ if test "x$gdktarget" = "xx11"; then
|
||||
#
|
||||
# Checks for Xft/XRender
|
||||
#
|
||||
XFT_LIBS=""
|
||||
XFT_CFLAGS=""
|
||||
if test $have_xft = true ; then
|
||||
gtk_save_cppflags="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $x_cflags"
|
||||
have_xft=false
|
||||
|
||||
AC_CHECK_LIB(Xrender, XRenderFindFormat,
|
||||
[AC_CHECK_LIB(Xft, XftFontOpen,
|
||||
[AC_CHECK_HEADER(X11/Xft/XftFreetype.h,
|
||||
have_xft=true,:)],
|
||||
:,-lXrender -lXext $x_libs $FREETYPE_LIBS)]
|
||||
,:,-lXext $x_libs)
|
||||
if pkg-config --exists pangoxft '>=' 1.1.0 ; then
|
||||
x_libs="`pkg-config --libs xft` -lX11 $FREETYPE_LIBS $X_EXTRA_LIBS"
|
||||
have_xft=true
|
||||
else
|
||||
gtk_save_cppflags="$CPPFLAGS"
|
||||
CPPFLAGS="$CPPFLAGS $x_cflags"
|
||||
|
||||
AC_CHECK_LIB(Xrender, XRenderFindFormat,
|
||||
[AC_CHECK_LIB(Xft, XftFontOpen,
|
||||
[AC_CHECK_HEADER(X11/Xft/XftFreetype.h,
|
||||
have_xft=true,:)],
|
||||
:,-lXrender -lXext $x_libs $FREETYPE_LIBS)]
|
||||
,:,-lXext $x_libs)
|
||||
|
||||
if $have_xft ; then
|
||||
x_libs="$X_LIBS -lXft -lXrender -lXext -lX11 $FREETYPE_LIBS $X_EXTRA_LIBS"
|
||||
fi
|
||||
|
||||
CPPFLAGS="$gtk_save_cppflags"
|
||||
CPPFLAGS="$gtk_save_cppflags"
|
||||
fi
|
||||
|
||||
if $have_xft ; then
|
||||
x_libs="$X_LIBS -lXft -lXrender -lXext -lX11 $FREETYPE_LIBS $X_EXTRA_LIBS"
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([pangoxft Pango backend found, but Xft not found])
|
||||
fi
|
||||
@@ -1038,31 +1065,8 @@ if test "x$gdktarget" = "xx11"; then
|
||||
|
||||
# Check for XIM support.
|
||||
|
||||
AC_CHECK_LIB(X11, XUnregisterIMInstantiateCallback,
|
||||
: ,
|
||||
enable_xim_inst="no",
|
||||
$x_libs_for_checks)
|
||||
|
||||
# On Solaris, calling XRegisterIMInstantiateCallback seems to
|
||||
# cause an immediate segfault, so we disable it, unless
|
||||
# the user specifically forces it to be on.
|
||||
|
||||
if test x$enable_xim_inst = xmaybe ; then
|
||||
case host in
|
||||
*-*-solaris*)
|
||||
enable_xim_inst="no"
|
||||
;;
|
||||
*)
|
||||
enable_xim_inst="yes"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
if test "x$enable_xim" = "xyes"; then
|
||||
GTK_XIM_FLAGS="-DUSE_XIM"
|
||||
if test "x$enable_xim_inst" = "xyes"; then
|
||||
AC_DEFINE(USE_X11R6_XIM)
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check for XKB support.
|
||||
@@ -1177,7 +1181,7 @@ if test "x$gdktarget" = "xlinux-fb"; then
|
||||
fi
|
||||
|
||||
ft2_libs="`$PKG_CONFIG --libs pangoft2`"
|
||||
case ft2_libs in
|
||||
case "$ft2_libs" in
|
||||
*-lfreetype*) pango_omitted_ft2_deps=no ;;
|
||||
*) pango_omitted_ft2_deps=yes ;;
|
||||
esac
|
||||
@@ -1212,7 +1216,7 @@ fi
|
||||
|
||||
if test "x$gdktarget" = "xx11"; then
|
||||
if $have_xft = true ; then
|
||||
PANGO_PACKAGES="pangox pangoxft"
|
||||
PANGO_PACKAGES="pangoxft pangox"
|
||||
else
|
||||
PANGO_PACKAGES=pangox
|
||||
fi
|
||||
@@ -1474,6 +1478,7 @@ build/win32/Makefile
|
||||
build/win32/dirent/Makefile
|
||||
demos/Makefile
|
||||
demos/gtk-demo/Makefile
|
||||
demos/gtk-demo/geninclude.pl
|
||||
tests/Makefile
|
||||
docs/Makefile
|
||||
docs/reference/Makefile
|
||||
|
||||
@@ -55,7 +55,7 @@ EXTRA_DIST = \
|
||||
$(IMAGEFILES)
|
||||
|
||||
demos.h: $(demos) geninclude.pl
|
||||
(cd $(srcdir) && ./geninclude.pl $(demos) > demos.h)
|
||||
(cd $(srcdir) && $(PERL) ./geninclude.pl $(demos) > demos.h)
|
||||
|
||||
gtk_demo_SOURCES = \
|
||||
$(demos) \
|
||||
|
||||
@@ -158,7 +158,7 @@ cell_edited (GtkCellRendererText *cell,
|
||||
|
||||
gtk_tree_model_get_iter (model, &iter, path);
|
||||
|
||||
switch ((gint) column)
|
||||
switch (GPOINTER_TO_INT (column))
|
||||
{
|
||||
case COLUMN_NUMBER:
|
||||
{
|
||||
|
||||
@@ -1,163 +0,0 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
print <<EOT;
|
||||
typedef GtkWidget *(*GDoDemoFunc) (void);
|
||||
|
||||
typedef struct _Demo Demo;
|
||||
|
||||
struct _Demo
|
||||
{
|
||||
gchar *title;
|
||||
gchar *filename;
|
||||
GDoDemoFunc func;
|
||||
Demo *children;
|
||||
};
|
||||
|
||||
EOT
|
||||
|
||||
for $file (@ARGV) {
|
||||
my %demo;
|
||||
|
||||
($basename = $file) =~ s/\.c$//;
|
||||
|
||||
open INFO_FILE, $file or die "Cannot open '$file'\n";
|
||||
$title = <INFO_FILE>;
|
||||
$title =~ s@^\s*/\*\s*@@;
|
||||
$title =~ s@\s*$@@;
|
||||
|
||||
close INFO_FILE;
|
||||
|
||||
print "GtkWidget *do_$basename (void);\n";
|
||||
|
||||
push @demos, {"title" => $title, "file" => $file,
|
||||
"func" => "do_$basename"};
|
||||
}
|
||||
|
||||
# generate a list of 'parent names'
|
||||
foreach $href (@demos) {
|
||||
if ($href->{"title"} =~ m|^([\w\s]+)/[\w\s]+$|) {
|
||||
my $parent_name = $1;
|
||||
my $do_next = 0;
|
||||
|
||||
# parent detected
|
||||
if (defined @parents) {
|
||||
foreach $foo (@parents) {
|
||||
if ($foo eq $parent_name) {
|
||||
$do_next = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ($do_next) {
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
push @parents, $parent_name;
|
||||
|
||||
$tmp = (defined @child_arrays)?($#child_arrays + 1):0;
|
||||
push @child_arrays, "child$tmp";
|
||||
|
||||
push @demos, {"title" => $parent_name, "file" => "NULL",
|
||||
"func" => "NULL"};
|
||||
}
|
||||
}
|
||||
|
||||
if (defined @parents) {
|
||||
$i = 0;
|
||||
for ($i = 0; $i <= $#parents; $i++) {
|
||||
$first = 1;
|
||||
|
||||
print "\nDemo ", $child_arrays[$i], "[] = {\n";
|
||||
|
||||
$j = 0;
|
||||
for ($j = 0; $j <= $#demos; $j++) {
|
||||
$href = $demos[$j];
|
||||
|
||||
if (!defined $demos[$j]) {
|
||||
next;
|
||||
}
|
||||
|
||||
if ($demos[$j]{"title"} =~ m|^$parents[$i]/([\w\s]+)$|) {
|
||||
if ($first) {
|
||||
$first = 0;
|
||||
} else {
|
||||
print ",\n";
|
||||
}
|
||||
|
||||
print qq ( { "$1", "$demos[$j]{file}", $demos[$j]{func}, NULL });
|
||||
|
||||
# hack ... ugly
|
||||
$demos[$j]{"title"} = "foo";
|
||||
}
|
||||
}
|
||||
|
||||
print ",\n";
|
||||
print qq ( { NULL } );
|
||||
print "\n};\n";
|
||||
}
|
||||
}
|
||||
|
||||
# sort @demos
|
||||
@demos_old = @demos;
|
||||
|
||||
@demos = sort {
|
||||
$a->{"title"} cmp $b->{"title"};
|
||||
} @demos_old;
|
||||
|
||||
# sort the child arrays
|
||||
if (defined @child_arrays) {
|
||||
for ($i = 0; $i <= $#child_arrays; $i++) {
|
||||
@foo_old = @{$child_arrays[$i]};
|
||||
|
||||
@{$child_arrays[$i]} = sort {
|
||||
$a->{"title"} cmp $b->{"title"};
|
||||
} @foo_old;
|
||||
}
|
||||
}
|
||||
|
||||
# toplevel
|
||||
print "\nDemo testgtk_demos[] = {\n";
|
||||
|
||||
$first = 1;
|
||||
foreach $href (@demos) {
|
||||
$handled = 0;
|
||||
|
||||
# ugly evil hack
|
||||
if ($href->{title} eq "foo") {
|
||||
next;
|
||||
}
|
||||
|
||||
if ($first) {
|
||||
$first = 0;
|
||||
} else {
|
||||
print ", \n";
|
||||
}
|
||||
|
||||
if (defined @parents) {
|
||||
for ($i = 0; $i <= $#parents; $i++) {
|
||||
if ($parents[$i] eq $href->{title}) {
|
||||
|
||||
if ($href->{file} eq 'NULL') {
|
||||
print qq ( { "$href->{title}", NULL, $href->{func}, $child_arrays[$i] });
|
||||
} else {
|
||||
print qq ( { "$href->{title}", "$href->{file}", $href->{func}, $child_arrays[$i] });
|
||||
}
|
||||
|
||||
$handled = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($handled) {
|
||||
next;
|
||||
}
|
||||
|
||||
print qq ( { "$href->{title}", "$href->{file}", $href->{func}, NULL });
|
||||
}
|
||||
|
||||
print ",\n";
|
||||
print qq ( { NULL } );
|
||||
print "\n};\n";
|
||||
|
||||
exit 0;
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/usr/bin/perl -w
|
||||
#!@PERL@ -w
|
||||
|
||||
print <<EOT;
|
||||
typedef GtkWidget *(*GDoDemoFunc) (void);
|
||||
|
||||
@@ -86,7 +86,7 @@ read_line (FILE *stream, GString *str)
|
||||
{
|
||||
int n_read = 0;
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
#ifdef HAVE_FLOCKFILE
|
||||
flockfile (stream);
|
||||
#endif
|
||||
|
||||
@@ -112,7 +112,7 @@ read_line (FILE *stream, GString *str)
|
||||
case '\r':
|
||||
case '\n':
|
||||
{
|
||||
#ifndef G_OS_WIN32
|
||||
#ifdef HAVE_FLOCKFILE
|
||||
int next_c = getc_unlocked (stream);
|
||||
#else
|
||||
int next_c = getc (stream);
|
||||
@@ -132,7 +132,7 @@ read_line (FILE *stream, GString *str)
|
||||
|
||||
done:
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
#ifdef HAVE_FLOCKFILE
|
||||
funlockfile (stream);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,392 +0,0 @@
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include <demos.h>
|
||||
|
||||
static GtkTextBuffer *info_buffer;
|
||||
static GtkTextBuffer *source_buffer;
|
||||
|
||||
static gchar *current_file = NULL;
|
||||
|
||||
enum {
|
||||
TITLE_COLUMN,
|
||||
FILENAME_COLUMN,
|
||||
FUNC_COLUMN,
|
||||
ITALIC_COLUMN,
|
||||
NUM_COLUMNS
|
||||
};
|
||||
|
||||
gboolean
|
||||
read_line (FILE *stream, GString *str)
|
||||
{
|
||||
int n_read = 0;
|
||||
|
||||
flockfile (stream);
|
||||
|
||||
g_string_truncate (str, 0);
|
||||
|
||||
while (1)
|
||||
{
|
||||
int c;
|
||||
|
||||
c = getc_unlocked (stream);
|
||||
|
||||
if (c == EOF)
|
||||
goto done;
|
||||
else
|
||||
n_read++;
|
||||
|
||||
switch (c)
|
||||
{
|
||||
case '\r':
|
||||
case '\n':
|
||||
{
|
||||
int next_c = getc_unlocked (stream);
|
||||
|
||||
if (!(next_c == EOF ||
|
||||
(c == '\r' && next_c == '\n') ||
|
||||
(c == '\n' && next_c == '\r')))
|
||||
ungetc (next_c, stream);
|
||||
|
||||
goto done;
|
||||
}
|
||||
default:
|
||||
g_string_append_c (str, c);
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
|
||||
funlockfile (stream);
|
||||
|
||||
return n_read > 0;
|
||||
}
|
||||
|
||||
void
|
||||
load_file (const gchar *filename)
|
||||
{
|
||||
FILE *file;
|
||||
GtkTextIter start, end;
|
||||
GString *buffer = g_string_new (NULL);
|
||||
int state = 0;
|
||||
gboolean in_para = 0;
|
||||
|
||||
if (current_file && !strcmp (current_file, filename))
|
||||
return;
|
||||
|
||||
g_free (current_file);
|
||||
current_file = g_strdup (filename);
|
||||
|
||||
gtk_text_buffer_get_bounds (info_buffer, &start, &end);
|
||||
gtk_text_buffer_delete (info_buffer, &start, &end);
|
||||
|
||||
gtk_text_buffer_get_bounds (source_buffer, &start, &end);
|
||||
gtk_text_buffer_delete (source_buffer, &start, &end);
|
||||
|
||||
file = fopen (filename, "r");
|
||||
if (!file)
|
||||
{
|
||||
g_warning ("Cannot open %s: %s\n", filename, g_strerror (errno));
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_text_buffer_get_iter_at_offset (info_buffer, &start, 0);
|
||||
while (read_line (file, buffer))
|
||||
{
|
||||
gchar *p = buffer->str;
|
||||
gchar *q;
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case 0:
|
||||
/* Reading title */
|
||||
while (*p == '/' || *p == '*' || isspace (*p))
|
||||
p++;
|
||||
q = p + strlen (p);
|
||||
while (q > p && isspace (*(q - 1)))
|
||||
q--;
|
||||
|
||||
if (q > p)
|
||||
{
|
||||
int len_chars = g_utf8_pointer_to_offset (p, q);
|
||||
|
||||
end = start;
|
||||
|
||||
g_assert (strlen (p) >= q - p);
|
||||
gtk_text_buffer_insert (info_buffer, &end, p, q - p);
|
||||
start = end;
|
||||
|
||||
gtk_text_iter_backward_chars (&start, len_chars);
|
||||
gtk_text_buffer_apply_tag_by_name (info_buffer, "title", &start, &end);
|
||||
|
||||
start = end;
|
||||
|
||||
state++;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
/* Reading body of info section */
|
||||
while (isspace (*p))
|
||||
p++;
|
||||
if (*p == '*' && *(p + 1) == '/')
|
||||
{
|
||||
gtk_text_buffer_get_iter_at_offset (source_buffer, &start, 0);
|
||||
state++;
|
||||
}
|
||||
else
|
||||
{
|
||||
int len;
|
||||
|
||||
while (*p == '*' || isspace (*p))
|
||||
p++;
|
||||
|
||||
len = strlen (p);
|
||||
while (isspace (*(p + len - 1)))
|
||||
len--;
|
||||
|
||||
if (len > 0)
|
||||
{
|
||||
if (in_para)
|
||||
gtk_text_buffer_insert (info_buffer, &start, " ", 1);
|
||||
|
||||
g_assert (strlen (p) >= len);
|
||||
gtk_text_buffer_insert (info_buffer, &start, p, len);
|
||||
in_para = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_text_buffer_insert (info_buffer, &start, "\n", 1);
|
||||
in_para = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
/* Skipping blank lines */
|
||||
while (isspace (*p))
|
||||
p++;
|
||||
if (*p)
|
||||
{
|
||||
p = buffer->str;
|
||||
state++;
|
||||
/* Fall through */
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
case 3:
|
||||
/* Reading program body */
|
||||
gtk_text_buffer_insert (source_buffer, &start, p, -1);
|
||||
gtk_text_buffer_insert (info_buffer, &start, "\n", 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
gtk_text_buffer_get_bounds (source_buffer, &start, &end);
|
||||
gtk_text_buffer_apply_tag_by_name (info_buffer, "source", &start, &end);
|
||||
}
|
||||
|
||||
gboolean
|
||||
button_press_event_cb (GtkTreeView *tree_view,
|
||||
GdkEventButton *event,
|
||||
GtkTreeModel *model)
|
||||
{
|
||||
if (event->type == GDK_2BUTTON_PRESS)
|
||||
{
|
||||
GtkTreePath *path = NULL;
|
||||
|
||||
gtk_tree_view_get_path_at_pos (tree_view,
|
||||
event->window,
|
||||
event->x,
|
||||
event->y,
|
||||
&path,
|
||||
NULL);
|
||||
|
||||
if (path)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
gboolean italic;
|
||||
GVoidFunc func;
|
||||
|
||||
gtk_tree_model_get_iter (model, &iter, path);
|
||||
gtk_tree_store_get (GTK_TREE_STORE (model),
|
||||
&iter,
|
||||
FUNC_COLUMN, &func,
|
||||
ITALIC_COLUMN, &italic,
|
||||
-1);
|
||||
(func) ();
|
||||
gtk_tree_store_set (GTK_TREE_STORE (model),
|
||||
&iter,
|
||||
ITALIC_COLUMN, !italic,
|
||||
-1);
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
gtk_signal_emit_stop_by_name (GTK_OBJECT (tree_view),
|
||||
"button_press_event");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
selection_cb (GtkTreeSelection *selection,
|
||||
GtkTreeModel *model)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
GValue value = {0, };
|
||||
|
||||
if (! gtk_tree_selection_get_selected (selection, NULL, &iter))
|
||||
return;
|
||||
|
||||
gtk_tree_model_get_value (model, &iter,
|
||||
FILENAME_COLUMN,
|
||||
&value);
|
||||
load_file (g_value_get_string (&value));
|
||||
g_value_unset (&value);
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_text (GtkTextBuffer **buffer,
|
||||
gboolean is_source)
|
||||
{
|
||||
GtkWidget *scrolled_window;
|
||||
GtkWidget *text_view;
|
||||
PangoFontDescription *font_desc;
|
||||
|
||||
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
|
||||
GTK_SHADOW_IN);
|
||||
|
||||
text_view = gtk_text_view_new ();
|
||||
gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
|
||||
|
||||
*buffer = gtk_text_buffer_new (NULL);
|
||||
gtk_text_view_set_buffer (GTK_TEXT_VIEW (text_view), *buffer);
|
||||
gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
|
||||
gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
|
||||
|
||||
if (is_source)
|
||||
{
|
||||
font_desc = pango_font_description_from_string ("Courier 10");
|
||||
gtk_widget_modify_font (text_view, font_desc);
|
||||
pango_font_description_free (font_desc);
|
||||
}
|
||||
|
||||
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (text_view), !is_source);
|
||||
|
||||
return scrolled_window;
|
||||
}
|
||||
|
||||
/* Technically a list, but if we do go to 80 demos, we may want to move to a tree */
|
||||
static GtkWidget *
|
||||
create_tree (void)
|
||||
{
|
||||
GtkTreeSelection *selection;
|
||||
GtkCellRenderer *cell;
|
||||
GtkWidget *tree_view;
|
||||
GtkTreeViewColumn *column;
|
||||
GtkTreeStore *model;
|
||||
GtkTreeIter iter;
|
||||
gint i;
|
||||
|
||||
model = gtk_tree_store_new_with_types (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN);
|
||||
tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
|
||||
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
|
||||
|
||||
gtk_tree_selection_set_type (GTK_TREE_SELECTION (selection),
|
||||
GTK_TREE_SELECTION_SINGLE);
|
||||
gtk_widget_set_usize (tree_view, 200, -1);
|
||||
|
||||
for (i=0; i < G_N_ELEMENTS (testgtk_demos); i++)
|
||||
{
|
||||
gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
|
||||
|
||||
gtk_tree_store_set (GTK_TREE_STORE (model),
|
||||
&iter,
|
||||
TITLE_COLUMN, testgtk_demos[i].title,
|
||||
FILENAME_COLUMN, testgtk_demos[i].filename,
|
||||
FUNC_COLUMN, testgtk_demos[i].func,
|
||||
ITALIC_COLUMN, FALSE,
|
||||
-1);
|
||||
}
|
||||
|
||||
cell = gtk_cell_renderer_text_new ();
|
||||
column = gtk_tree_view_column_new_with_attributes ("Widget",
|
||||
cell,
|
||||
"text", TITLE_COLUMN,
|
||||
"italic", ITALIC_COLUMN,
|
||||
NULL);
|
||||
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
|
||||
GTK_TREE_VIEW_COLUMN (column));
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (selection), "selection_changed", selection_cb, model);
|
||||
gtk_signal_connect (GTK_OBJECT (tree_view), "button_press_event", GTK_SIGNAL_FUNC (button_press_event_cb), model);
|
||||
|
||||
return tree_view;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
GtkWidget *window;
|
||||
GtkWidget *notebook;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *tree;
|
||||
GtkTextTag *tag;
|
||||
|
||||
gtk_init (&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_signal_connect (GTK_OBJECT (window), "destroy",
|
||||
GTK_SIGNAL_FUNC (gtk_main_quit), NULL);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), hbox);
|
||||
|
||||
tree = create_tree ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox), tree, FALSE, FALSE, 0);
|
||||
|
||||
notebook = gtk_notebook_new ();
|
||||
gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
create_text (&info_buffer, FALSE),
|
||||
gtk_label_new ("Info"));
|
||||
|
||||
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
|
||||
create_text (&source_buffer, TRUE),
|
||||
gtk_label_new ("Source"));
|
||||
|
||||
tag = gtk_text_buffer_create_tag (info_buffer, "title");
|
||||
gtk_object_set (GTK_OBJECT (tag),
|
||||
"font", "Sans 18",
|
||||
NULL);
|
||||
|
||||
tag = gtk_text_buffer_create_tag (info_buffer, "source");
|
||||
gtk_object_set (GTK_OBJECT (tag),
|
||||
"font", "Courier 10",
|
||||
"pixels_above_lines", 0,
|
||||
"pixels_below_lines", 0,
|
||||
NULL);
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
|
||||
gtk_widget_show_all (window);
|
||||
|
||||
|
||||
load_file (testgtk_demos[0].filename);
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1,3 +1,20 @@
|
||||
2002-04-24 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
Merged from HEAD:
|
||||
|
||||
* gtk/tmpl/gtksocket.sgml:
|
||||
* gtk/tmpl/gtkdrawingarea.sgml:
|
||||
* gtk/tmpl/gtktreemodel.sgml:
|
||||
* gtk/tmpl/gtkradiomenuitem.sgml:
|
||||
* gtk/tmpl/gtkwidget.sgml:
|
||||
* gtk/tmpl/gtkdialog.sgml:
|
||||
* gdk-pixbuf/tmpl/gdk-pixbuf-loader.sgml:
|
||||
* gtk/text_widget.sgml:
|
||||
* gtk/tree_widget.sgml:
|
||||
* gtk/gtk-sections.txt:
|
||||
* gdk/tmpl/properties.sgml: Documentation fixes. (#79001, #67818,
|
||||
#79080, #78661, #78392, #75588, #72312, #74439)
|
||||
|
||||
Tue Mar 26 15:41:49 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gtk/building.sgml: Add a mention of running ldconfig.
|
||||
|
||||
@@ -10,7 +10,8 @@ Application-driven progressive image loading.
|
||||
process of loading an image, by letting them send the image data
|
||||
directly to the loader instead of having the loader read the data
|
||||
from a file. Applications can use this functionality instead of
|
||||
gdk_pixbuf_new_from_file() when they need to parse image data in
|
||||
gdk_pixbuf_new_from_file() or gdk_pixbuf_animation_new_from_file()
|
||||
when they need to parse image data in
|
||||
small chunks. For example, it should be used when reading an
|
||||
image from a (potentially) slow network connection, or when
|
||||
loading an extremely large file.
|
||||
@@ -47,31 +48,18 @@ Application-driven progressive image loading.
|
||||
<title>Loading an animation</title>
|
||||
|
||||
<para>
|
||||
Loading an animation is a little more complex then loading an
|
||||
image. In addition to the above signals, there is also a "<link
|
||||
linkend="GdkPixbufLoader-frame-done">frame_done</link>" signal,
|
||||
as well as an "<link
|
||||
linkend="GdkPixbufLoader-animation-done">animation_done</link>"
|
||||
signal. The first lets the application know that it is dealing
|
||||
with an animation, instead of a static image. It also passes a
|
||||
#GdkPixbufFrame in the signal. As before, if you want to keep
|
||||
the frame, you need to ref it. Once the first "<link
|
||||
linkend="GdkPixbufLoader-frame-done">frame_done</link>" signal
|
||||
Loading an animation is almost as easy as loading an
|
||||
image. Once the first "<link
|
||||
linkend="GdkPixbufLoader-area-prepared">area_prepared</link>" signal
|
||||
has been emitted, you can call gdk_pixbuf_loader_get_animation()
|
||||
to get the #GdkPixbufAnimation struct. Each subsequent frame
|
||||
goes through a similar lifecycle. For example "<link
|
||||
linkend="GdkPixbufLoader-area-prepared">area_prepared</link>" is
|
||||
re-emitted. Then "<link
|
||||
linkend="GdkPixbufLoader-area-updated">area_updated</link>" is
|
||||
emitted as many times as necessary. Finally, "<link
|
||||
linkend="GdkPixbufLoader-animation-done">animation_done</link>"
|
||||
is emitted as soon as all frames are done.
|
||||
to get the #GdkPixbufAnimation struct and gdk_pixbuf_animation_get_iter()
|
||||
to get an #GdkPixbufAnimationIter for displaying it.
|
||||
</para>
|
||||
</refsect2>
|
||||
|
||||
<!-- ##### SECTION See_Also ##### -->
|
||||
<para>
|
||||
gdk_pixbuf_new_from_file()
|
||||
gdk_pixbuf_new_from_file(), gdk_pixbuf_animation_new_from_file()
|
||||
</para>
|
||||
|
||||
<!-- ##### FUNCTION gdk_pixbuf_loader_new ##### -->
|
||||
|
||||
@@ -244,10 +244,10 @@ Changes the contents of a property on a window.
|
||||
@window: a #GdkWindow.
|
||||
@property: the property to change.
|
||||
@type: the new type for the property. If @mode is
|
||||
%GDK_PROP_MODE_REPLACE or %GDK_PROP_MODE_APPEND, then this
|
||||
%GDK_PROP_MODE_PREPEND or %GDK_PROP_MODE_APPEND, then this
|
||||
must match the existing type or an error will occur.
|
||||
@format: the new format for the property. If @mode is
|
||||
%GDK_PROP_MODE_REPLACE or %GDK_PROP_MODE_APPEND, then this
|
||||
%GDK_PROP_MODE_PREPEND or %GDK_PROP_MODE_APPEND, then this
|
||||
must match the existing format or an error will occur.
|
||||
@mode: a value describing how the new data is to be combined
|
||||
with the current data.
|
||||
|
||||
@@ -1690,7 +1690,6 @@ GTK_OBJECT_TYPE_NAME
|
||||
GtkObjectFlags
|
||||
GTK_OBJECT_FLAGS
|
||||
GTK_OBJECT_FLOATING
|
||||
GTK_OBJECT_CONNECTED
|
||||
GtkArgFlags
|
||||
gtk_object_new
|
||||
gtk_object_sink
|
||||
@@ -3447,6 +3446,7 @@ gtk_vseparator_get_type
|
||||
<FILE>gtkwidget</FILE>
|
||||
<TITLE>GtkWidget</TITLE>
|
||||
GtkWidget
|
||||
GtkWidgetClass
|
||||
GtkWidgetFlags
|
||||
GTK_WIDGET_TYPE
|
||||
GTK_WIDGET_STATE
|
||||
|
||||
@@ -162,7 +162,7 @@ font and foreground color &mdash use standard
|
||||
functions such as
|
||||
<link linkend="gtk-widget-modify-font">gtk_widget_modify_font()</link>
|
||||
or
|
||||
<link linkend="gtk-widget-modify-fg">gtk_widget_modify_fg()</link>.
|
||||
<link linkend="gtk-widget-modify-fg">gtk_widget_modify_text()</link>.
|
||||
For other attributes there are dedicated methods on
|
||||
<link linkend="GtkTextView">GtkTextView</link> such as
|
||||
<link linkend="gtk-text-view-set-tabs">gtk_text_view_set_tabs()</link>.
|
||||
@@ -170,6 +170,7 @@ For other attributes there are dedicated methods on
|
||||
<informalexample><programlisting>
|
||||
GtkWidget *view;
|
||||
GtkTextBuffer *buffer;
|
||||
GtkTextIter start, end;
|
||||
PangoFontDescription *font_desc;
|
||||
GdkColor color;
|
||||
GtkTextTag *tag;
|
||||
@@ -187,7 +188,7 @@ For other attributes there are dedicated methods on
|
||||
|
||||
/* Change default color throughout the widget */
|
||||
gdk_color_parse ("green", &color);
|
||||
gtk_widget_modify_fg (view, GTK_STATE_NORMAL, &color);
|
||||
gtk_widget_modify_text (view, GTK_STATE_NORMAL, &color);
|
||||
|
||||
/* Change left margin throughout the widget */
|
||||
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 30);
|
||||
|
||||
@@ -157,3 +157,8 @@ box.
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkButtonBox:secondary ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
||||
@@ -382,3 +382,28 @@ how to allocate space for children, equally or variably. Refers to
|
||||
the <structfield>homogeneous</structfield> field of #GtkBox-struct.
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkBox:expand ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkBox:fill ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkBox:padding ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkBox:pack-type ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkBox:position ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
||||
@@ -5,40 +5,40 @@ GtkButton
|
||||
A widget that creates a signal when clicked on.
|
||||
|
||||
<!-- ##### SECTION Long_Description ##### -->
|
||||
<para>
|
||||
The #GtkButton widget is generally used to attach a function to that
|
||||
is called when the button is pressed. The various signals and how to use
|
||||
them are outlined below.
|
||||
</para>
|
||||
<para>
|
||||
The #GtkButton widget can hold any valid child widget. That is it can
|
||||
hold most any other standard #GtkWidget. The most commonly used child is
|
||||
the #GtkLabel.
|
||||
<para>
|
||||
The #GtkButton widget is generally used to attach a function to that
|
||||
is called when the button is pressed. The various signals and how to use
|
||||
them are outlined below.
|
||||
</para>
|
||||
<para>
|
||||
The #GtkButton widget can hold any valid child widget. That is it can
|
||||
hold most any other standard #GtkWidget. The most commonly used child is
|
||||
the #GtkLabel.
|
||||
</para>
|
||||
|
||||
<!-- ##### SECTION See_Also ##### -->
|
||||
<para>
|
||||
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### STRUCT GtkButton ##### -->
|
||||
<para>
|
||||
This should not be accessed directly. Use the accessor functions below.
|
||||
<para>
|
||||
This should not be accessed directly. Use the accessor functions below.
|
||||
</para>
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_new ##### -->
|
||||
<para>
|
||||
Creates a new #GtkButton widget.
|
||||
<para>
|
||||
Creates a new #GtkButton widget.
|
||||
</para>
|
||||
|
||||
@Returns: The newly created #GtkButton widget.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_new_with_label ##### -->
|
||||
<para>
|
||||
Creates a #GtkButton widget with a #GtkLabel child containing the given
|
||||
text.
|
||||
<para>
|
||||
Creates a #GtkButton widget with a #GtkLabel child containing the given
|
||||
text.
|
||||
</para>
|
||||
|
||||
@label: The text you want the #GtkLabel to hold.
|
||||
@@ -64,52 +64,52 @@ text.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_pressed ##### -->
|
||||
<para>
|
||||
Emits a #GtkButton::pressed signal to the given #GtkButton.
|
||||
<para>
|
||||
Emits a #GtkButton::pressed signal to the given #GtkButton.
|
||||
</para>
|
||||
|
||||
@button: The #GtkButton you want to send the signal to.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_released ##### -->
|
||||
<para>
|
||||
Emits a #GtkButton::released signal to the given #GtkButton.
|
||||
<para>
|
||||
Emits a #GtkButton::released signal to the given #GtkButton.
|
||||
</para>
|
||||
|
||||
@button: The #GtkButton you want to send the signal to.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_clicked ##### -->
|
||||
<para>
|
||||
Emits a #GtkButton::clicked signal to the given #GtkButton.
|
||||
<para>
|
||||
Emits a #GtkButton::clicked signal to the given #GtkButton.
|
||||
</para>
|
||||
|
||||
@button: The #GtkButton you want to send the signal to.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_enter ##### -->
|
||||
<para>
|
||||
Emits a #GtkButton::enter signal to the given #GtkButton.
|
||||
<para>
|
||||
Emits a #GtkButton::enter signal to the given #GtkButton.
|
||||
</para>
|
||||
|
||||
@button: The #GtkButton you want to send the signal to.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_leave ##### -->
|
||||
<para>
|
||||
Emits a #GtkButton::leave signal to the given #GtkButton.
|
||||
<para>
|
||||
Emits a #GtkButton::leave signal to the given #GtkButton.
|
||||
</para>
|
||||
|
||||
@button: The #GtkButton you want to send the signal to.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_set_relief ##### -->
|
||||
<para>
|
||||
Sets the relief style of the edges of the given #GtkButton widget.
|
||||
Three styles exist, GTK_RELIEF_NORMAL, GTK_RELIEF_HALF, GTK_RELIEF_NONE.
|
||||
The default style is, as one can guess, GTK_RELIEF_NORMAL.
|
||||
|
||||
<!-- FIXME: put pictures of each style -->
|
||||
<para>
|
||||
Sets the relief style of the edges of the given #GtkButton widget.
|
||||
Three styles exist, GTK_RELIEF_NORMAL, GTK_RELIEF_HALF, GTK_RELIEF_NONE.
|
||||
The default style is, as one can guess, GTK_RELIEF_NORMAL.
|
||||
|
||||
<!-- FIXME: put pictures of each style -->
|
||||
</para>
|
||||
|
||||
@button: The #GtkButton you want to set relief styles of.
|
||||
@@ -117,8 +117,8 @@ The default style is, as one can guess, GTK_RELIEF_NORMAL.
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_button_get_relief ##### -->
|
||||
<para>
|
||||
Returns the current relief style of the given #GtkButton.
|
||||
<para>
|
||||
Returns the current relief style of the given #GtkButton.
|
||||
</para>
|
||||
|
||||
@button: The #GtkButton you want the #GtkReliefStyle from.
|
||||
@@ -191,52 +191,52 @@ Returns the current relief style of the given #GtkButton.
|
||||
@button: the object which received the signal.
|
||||
|
||||
<!-- ##### SIGNAL GtkButton::clicked ##### -->
|
||||
<para>
|
||||
Emitted when a button clicked on by the mouse and the cursor stays on the
|
||||
button. If the cursor is not on the button when the mouse button is released,
|
||||
the signal is not emitted.
|
||||
<para>
|
||||
Emitted when a button clicked on by the mouse and the cursor stays on the
|
||||
button. If the cursor is not on the button when the mouse button is released,
|
||||
the signal is not emitted.
|
||||
</para>
|
||||
|
||||
@button: the object which received the signal.
|
||||
|
||||
<!-- ##### SIGNAL GtkButton::enter ##### -->
|
||||
<para>
|
||||
Emitted when the mouse cursor enters the region of the button.
|
||||
<para>
|
||||
Emitted when the mouse cursor enters the region of the button.
|
||||
</para>
|
||||
|
||||
@button: the object which received the signal.
|
||||
|
||||
<!-- ##### SIGNAL GtkButton::leave ##### -->
|
||||
<para>
|
||||
Emitted when the mouse cursor leaves the region of the button.
|
||||
<para>
|
||||
Emitted when the mouse cursor leaves the region of the button.
|
||||
</para>
|
||||
|
||||
@button: the object which received the signal.
|
||||
|
||||
<!-- ##### SIGNAL GtkButton::pressed ##### -->
|
||||
<para>
|
||||
Emitted when the button is initially pressed.
|
||||
<para>
|
||||
Emitted when the button is initially pressed.
|
||||
</para>
|
||||
|
||||
@button: the object which received the signal.
|
||||
|
||||
<!-- ##### SIGNAL GtkButton::released ##### -->
|
||||
<para>
|
||||
Emitted when a button which is pressed is released, no matter where the
|
||||
mouse cursor is.
|
||||
<para>
|
||||
Emitted when a button which is pressed is released, no matter where the
|
||||
mouse cursor is.
|
||||
</para>
|
||||
|
||||
@button: the object which received the signal.
|
||||
|
||||
<!-- ##### ARG GtkButton:label ##### -->
|
||||
<para>
|
||||
The text within the child #GtkLabel of the #GtkButton. Only useful if
|
||||
there is actually a #GtkLabel inside of the #GtkButton.
|
||||
<para>
|
||||
The text within the child #GtkLabel of the #GtkButton. Only useful if
|
||||
there is actually a #GtkLabel inside of the #GtkButton.
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkButton:relief ##### -->
|
||||
<para>
|
||||
The #GtkReliefStyle as outlined in gtk_button_set_relief().
|
||||
<para>
|
||||
The #GtkReliefStyle as outlined in gtk_button_set_relief().
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkButton:use-underline ##### -->
|
||||
|
||||
@@ -82,7 +82,7 @@ void quick_message (gchar *message) {
|
||||
dialog = gtk_dialog_new_with_buttons ("Message",
|
||||
main_application_window,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_BUTTON_OK,
|
||||
GTK_STOCK_OK,
|
||||
GTK_RESPONSE_NONE,
|
||||
NULL);
|
||||
label = gtk_label_new (message);
|
||||
|
||||
@@ -53,7 +53,7 @@ that drawing is implicitly clipped to the exposed area.
|
||||
<title>Simple <structname>GtkDrawingArea</structname> usage.</title>
|
||||
<programlisting>
|
||||
gboolean
|
||||
expose_event_callback (GdkWidget *widget, GdkEventExpose *event, gpointer data)
|
||||
expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data)
|
||||
{
|
||||
gdk_draw_arc (widget->window,
|
||||
widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
|
||||
@@ -64,7 +64,7 @@ expose_event_callback (GdkWidget *widget, GdkEventExpose *event, gpointer data)
|
||||
return TRUE;
|
||||
}
|
||||
[...]
|
||||
GtkWidget *drawing_area = gtk_drawing_area_new (<!>);
|
||||
GtkWidget *drawing_area = gtk_drawing_area_new (<!-- -->);
|
||||
gtk_widget_set_size_request (drawing_area, 100, 100);
|
||||
g_signal_connect (G_OBJECT (drawing_area), "expose_event",
|
||||
G_CALLBACK (expose_event_callback), NULL);
|
||||
|
||||
@@ -133,12 +133,10 @@ Creates a new file selection dialog box. By default it will contain a #GtkCList
|
||||
|
||||
<!-- ##### FUNCTION gtk_file_selection_set_filename ##### -->
|
||||
<para>
|
||||
Sets a default path for the file requestor. If @filename includes a directory path, then the requestor will open with that path as its current working directory.
|
||||
|
||||
</para>
|
||||
|
||||
@filesel: a #GtkFileSelection.
|
||||
@filename: a string to set as the default file name.
|
||||
@filesel:
|
||||
@filename:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_file_selection_get_filename ##### -->
|
||||
|
||||
@@ -166,3 +166,13 @@ Moves a child of a #GtkFixed container to the given position.
|
||||
@has_window:
|
||||
|
||||
|
||||
<!-- ##### ARG GtkFixed:x ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkFixed:y ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
||||
@@ -171,3 +171,13 @@ Layout width, see gtk_layout_set_size()
|
||||
Layout height, see gtk_layout_set_size()
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkLayout:x ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkLayout:y ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
||||
@@ -496,3 +496,33 @@ Whether the popup menu for switching pages is enabled.
|
||||
whether the tabs must have all the same size.
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkNotebook:tab-label ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkNotebook:menu-label ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkNotebook:position ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkNotebook:tab-expand ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkNotebook:tab-fill ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkNotebook:tab-pack ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ for(i = 0; i < 5; i++)
|
||||
<listitem><para>because a radio menu item is a menu item.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>#GtkCheckItem</term>
|
||||
<term>#GtkCheckMenuItem</term>
|
||||
<listitem><para>to know how to handle the check.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
@@ -792,11 +792,9 @@ otherwise %NULL.
|
||||
|
||||
<!-- ##### FUNCTION gtk_rc_get_module_dir ##### -->
|
||||
<para>
|
||||
Returns the directory in which GTK+ will look for
|
||||
theme engines.
|
||||
</para>
|
||||
|
||||
@Returns: The directory. (Must be freed with g_free())
|
||||
@Returns:
|
||||
|
||||
|
||||
<!-- ##### FUNCTION gtk_rc_get_im_module_path ##### -->
|
||||
|
||||
@@ -25,7 +25,7 @@ have been added to its parent.
|
||||
<example>
|
||||
<title>Obtaining the window ID of a socket.</title>
|
||||
<programlisting>
|
||||
GtkWidget *socket = gtk_socket_new (<!>);
|
||||
GtkWidget *socket = gtk_socket_new (<!-- -->);
|
||||
gtk_widget_show (socket);
|
||||
gtk_container_add (GTK_CONTAINER (parent), socket);
|
||||
|
||||
@@ -62,6 +62,13 @@ to be destroyed at any time when the main event loop
|
||||
is running.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The communication between a #GtkSocket and a #GtkPlug follows the
|
||||
<ulink url="http://www.freedesktop.org/standards/xembed.html">XEmbed</ulink>
|
||||
protocol. This protocol has also been implemented in other toolkits, e.g.
|
||||
<application>Qt</application>, allowing the same level of integration
|
||||
when embedding a <application>Qt</application> widget in GTK or vice versa.</para>
|
||||
|
||||
<para>
|
||||
A socket can also be used to swallow arbitrary
|
||||
pre-existing top-level windows using gtk_socket_steal(),
|
||||
@@ -77,6 +84,11 @@ as between a #GtkPlug and a #GtkSocket.</para>
|
||||
<listitem><para>the widget that plugs into a #GtkSocket.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><ulink url="http://www.freedesktop.org/standards/xembed.html">XEmbed</ulink></term>
|
||||
<listitem><para>the XEmbed Protocol Specification.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
|
||||
@@ -276,3 +276,43 @@ Sets or retrieves the number of pixels of space between rows.
|
||||
Whether each cell in the table should be the same size or not.
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkTable:left-attach ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkTable:right-attach ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkTable:top-attach ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkTable:bottom-attach ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkTable:x-options ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkTable:y-options ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkTable:x-padding ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
<!-- ##### ARG GtkTable:y-padding ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
||||
@@ -168,7 +168,7 @@ enum
|
||||
gchar *str_data;
|
||||
gint int_data;
|
||||
|
||||
/* Make sure you terminate calls to gtk_tree_model_get(<!>)
|
||||
/* Make sure you terminate calls to gtk_tree_model_get(<!-- -->)
|
||||
* with a '-1' value
|
||||
*/
|
||||
gtk_tree_model_get (list_store, &iter,
|
||||
@@ -190,7 +190,7 @@ enum
|
||||
|
||||
<!-- ##### SECTION See_Also ##### -->
|
||||
<para>
|
||||
#GtkTreeView, #GtkTreeStore, #GtkListStore, #GtkTreeDnd, #GtkTreeSortable
|
||||
#GtkTreeView, #GtkTreeStore, #GtkListStore, <link linkend="gtk-GtkTreeView-drag-and-drop">GtkTreeDnd</link>, #GtkTreeSortable
|
||||
</para>
|
||||
|
||||
<!-- ##### STRUCT GtkTreeModel ##### -->
|
||||
|
||||
@@ -20,14 +20,20 @@ GtkWidget
|
||||
</para>
|
||||
|
||||
|
||||
<!-- ##### STRUCT GtkWidgetClass ##### -->
|
||||
<para>
|
||||
|
||||
</para>
|
||||
|
||||
|
||||
<!-- ##### ENUM GtkWidgetFlags ##### -->
|
||||
<para>
|
||||
Tells about certain properties of the widget.
|
||||
</para>
|
||||
|
||||
@GTK_TOPLEVEL:
|
||||
widgets without a real parent, as there are #GtkWindow<!>s and
|
||||
#GtkMenu<!>s have this flag set throughout their lifetime.
|
||||
widgets without a real parent, as there are #GtkWindow<!-- -->s and
|
||||
#GtkMenu<!-- -->s have this flag set throughout their lifetime.
|
||||
Toplevel widgets always contain their own #GdkWindow.
|
||||
@GTK_NO_WINDOW:
|
||||
Indicative for a widget that does not provide its own #GdkWindow.
|
||||
@@ -929,7 +935,12 @@ Equivalent to <literal>gtk_widget_set_style (widget, NULL)</literal>.
|
||||
|
||||
<!-- ##### FUNCTION gtk_widget_reset_rc_styles ##### -->
|
||||
<para>
|
||||
Calls gtk_widget_set_rc_style() recursively on all descendants.
|
||||
Reset the styles of @widget and all descendents, so when
|
||||
they are looked up again, they get the correct values
|
||||
for the currently loaded RC file settings.
|
||||
</para>
|
||||
<para>
|
||||
This function is not useful for applications.
|
||||
</para>
|
||||
|
||||
@widget: a #GtkWidget.
|
||||
|
||||
@@ -287,7 +287,7 @@ setup_tree (void)
|
||||
populate_tree_model (store);
|
||||
|
||||
/* Create a view */
|
||||
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
|
||||
tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
|
||||
|
||||
/* The view now holds a reference. We can get rid of our own
|
||||
* reference */
|
||||
|
||||
@@ -1,3 +1,73 @@
|
||||
Thu Jun 13 18:11:11 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* pixops/pixops.c: Fix problem where when no alpha was
|
||||
involved, we scaled rather than composited, but then
|
||||
went ahead and composited anyways. (#76958, Patch
|
||||
from Matthias Clasen) Needs to be merged to GNOME
|
||||
1.4 gdk-pixbuf.
|
||||
|
||||
2002-06-07 Federico Mena Quintero <federico@ximian.com>
|
||||
|
||||
* io-bmp.c (lsb_32):
|
||||
(lsb_16): New functions to fetch 32 or 16-bit little-endian values
|
||||
starting at a specific memory location. We do this instead of
|
||||
GINT32_FROM_LE() as the latter is simply dereferences a cast,
|
||||
which doesn't work on platforms with alignment requirements.
|
||||
Fixes #84083.
|
||||
|
||||
2002-06-01 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* gdk-pixbuf-io.c (pixbuf_check_xbm): Accept xbms starting
|
||||
with a C comment - those seem to be not uncommon, e.g. the Gimp
|
||||
produces them. (#82706)
|
||||
|
||||
* io-xbm.c (read_bitmap_file_data): Don't leak memory on certain
|
||||
invalid inputs.
|
||||
(gdk_pixbuf__xbm_image_load_real): Don't leak memory on valid inputs.
|
||||
|
||||
2002-05-22 Federico Mena Quintero <federico@ximian.com>
|
||||
|
||||
* io-xpm.c (pixbuf_create_from_xpm): Ahem, take the rowstride into
|
||||
account!!! Fixes #82515.
|
||||
|
||||
[This bug is not present in the GNOME 1.4 branch as its XPM loader
|
||||
does not use gdk_pixbuf_new(); rather it malloc()s a buffer with
|
||||
no row padding and then uses gdk_pixbuf_new_from_data() on it.]
|
||||
|
||||
[IMPORTANT: The comment above is to make my life easier when
|
||||
merging stuff across branches. If you make changes to gdk-pixbuf
|
||||
in either branch, please include a comment in the ChangeLog that
|
||||
indicates whether this should be merged into the other branch.
|
||||
Thanks!]
|
||||
|
||||
2002-05-22 Tor Lillqvist <tml@iki.fi>
|
||||
|
||||
* gdk-pixbuf-io.c (get_libdir): Use GTK_BINARY_VERSION (and not
|
||||
GTK_VERSION) in the path to the loaders on Win32, too.
|
||||
|
||||
* Makefile.am: Pass GTK_BINARY_VERSION.
|
||||
|
||||
2002-05-18 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
* io-tiff.c (tiff_image_parse): fix packing order on bigendian
|
||||
systems. (#81702)
|
||||
|
||||
Thu May 16 15:17:30 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* pixops/pixops.c: Patch from Matthias Clasen to fix some typos
|
||||
(#77246)
|
||||
|
||||
Thu May 16 15:02:46 2002 Owen Taylor <otaylor@redhat.com>
|
||||
|
||||
* gdk-pixdata.c (gdk_pixdata_to_csource): Fix 64-bit warning.
|
||||
(#78258)
|
||||
|
||||
2002-05-07 Michael Natterer <mitch@gimp.org>
|
||||
|
||||
* gdk-pixbuf/Makefile.am: build the static pixbuf loaders
|
||||
conditionally like the dynamic ones so --without-lib<foo> is
|
||||
honored when building with --disable-modules. (#66867)
|
||||
|
||||
2002-04-11 Matthias Clasen <maclas@gmx.de>
|
||||
|
||||
More fixes for #77807:
|
||||
|
||||
+27
-14
@@ -17,7 +17,7 @@ gdk_pixbuf-win32res.lo : gdk_pixbuf.rc
|
||||
install-libtool-import-lib:
|
||||
$(INSTALL) .libs/libgdk_pixbuf-$(GTK_API_VERSION).dll.a $(DESTDIR)$(libdir)
|
||||
uninstall-libtool-import-lib:
|
||||
-rm $(DESTDIR)$(libdir)/libdk_pixbuf-$(GTK_API_VERSION).dll.a
|
||||
-rm $(DESTDIR)$(libdir)/libgdk_pixbuf-$(GTK_API_VERSION).dll.a
|
||||
else
|
||||
install-libtool-import-lib:
|
||||
uninstall-libtool-import-lib:
|
||||
@@ -144,33 +144,45 @@ libpixbufloader_tga_la_LIBADD = $(module_libs)
|
||||
|
||||
if HAVE_PNG
|
||||
PNG_LIB = libpixbufloader-png.la
|
||||
STATIC_PNG_LIB = libpixbufloader-static-png.la
|
||||
endif
|
||||
|
||||
if HAVE_JPEG
|
||||
JPEG_LIB = libpixbufloader-jpeg.la
|
||||
STATIC_JPEG_LIB = libpixbufloader-static-jpeg.la
|
||||
endif
|
||||
|
||||
GIF_LIB = libpixbufloader-gif.la
|
||||
STATIC_GIF_LIB = libpixbufloader-static-gif.la
|
||||
|
||||
ICO_LIB = libpixbufloader-ico.la
|
||||
STATIC_ICO_LIB = libpixbufloader-static-ico.la
|
||||
|
||||
RAS_LIB = libpixbufloader-ras.la
|
||||
STATIC_RAS_LIB = libpixbufloader-static-ras.la
|
||||
|
||||
if HAVE_TIFF
|
||||
TIFF_LIB = libpixbufloader-tiff.la
|
||||
STATIC_TIFF_LIB = libpixbufloader-static-tiff.la
|
||||
endif
|
||||
|
||||
XPM_LIB = libpixbufloader-xpm.la
|
||||
STATIC_XPM_LIB = libpixbufloader-static-xpm.la
|
||||
|
||||
PNM_LIB = libpixbufloader-pnm.la
|
||||
STATIC_PNM_LIB = libpixbufloader-static-pnm.la
|
||||
|
||||
BMP_LIB = libpixbufloader-bmp.la
|
||||
STATIC_BMP_LIB = libpixbufloader-static-bmp.la
|
||||
|
||||
WBMP_LIB = libpixbufloader-wbmp.la
|
||||
STATIC_WBMP_LIB = libpixbufloader-static-wbmp.la
|
||||
|
||||
XBM_LIB = libpixbufloader-xbm.la
|
||||
STATIC_XBM_LIB = libpixbufloader-static-xbm.la
|
||||
|
||||
TGA_LIB = libpixbufloader-tga.la
|
||||
STATIC_TGA_LIB = libpixbufloader-static-tga.la
|
||||
|
||||
if BUILD_DYNAMIC_MODULES
|
||||
|
||||
@@ -194,19 +206,19 @@ builtin_objs =
|
||||
else
|
||||
loader_LTLIBRARIES =
|
||||
|
||||
noinst_LTLIBRARIES = \
|
||||
libpixbufloader-static-png.la \
|
||||
libpixbufloader-static-jpeg.la \
|
||||
libpixbufloader-static-gif.la \
|
||||
libpixbufloader-static-ico.la \
|
||||
libpixbufloader-static-ras.la \
|
||||
libpixbufloader-static-tiff.la \
|
||||
libpixbufloader-static-xpm.la \
|
||||
libpixbufloader-static-pnm.la \
|
||||
libpixbufloader-static-bmp.la \
|
||||
libpixbufloader-static-wbmp.la \
|
||||
libpixbufloader-static-xbm.la \
|
||||
libpixbufloader-static-tga.la
|
||||
noinst_LTLIBRARIES = \
|
||||
$(STATIC_PNG_LIB) \
|
||||
$(STATIC_JPEG_LIB) \
|
||||
$(STATIC_GIF_LIB) \
|
||||
$(STATIC_ICO_LIB) \
|
||||
$(STATIC_RAS_LIB) \
|
||||
$(STATIC_XPM_LIB) \
|
||||
$(STATIC_TIFF_LIB) \
|
||||
$(STATIC_PNM_LIB) \
|
||||
$(STATIC_BMP_LIB) \
|
||||
$(STATIC_WBMP_LIB) \
|
||||
$(STATIC_XBM_LIB) \
|
||||
$(STATIC_TGA_LIB)
|
||||
|
||||
builtin_objs = @INCLUDED_LOADER_OBJ@
|
||||
|
||||
@@ -219,6 +231,7 @@ INCLUDES = @STRIP_BEGIN@ \
|
||||
-I$(top_srcdir)/gdk-pixbuf \
|
||||
-I$(top_builddir)/gdk-pixbuf \
|
||||
-DGTK_VERSION=\"@GTK_VERSION@\" \
|
||||
-DGTK_BINARY_VERSION=\"@GTK_BINARY_VERSION@\" \
|
||||
-DG_DISABLE_DEPRECATED \
|
||||
-DGDK_PIXBUF_DISABLE_DEPRECATED \
|
||||
@INCLUDED_LOADER_DEFINE@ \
|
||||
|
||||
+14
-10
@@ -193,17 +193,21 @@ pixbuf_check_xbm (guchar *buffer, int size)
|
||||
if (size < 20)
|
||||
return FALSE;
|
||||
|
||||
if (buffer [0] != '#'
|
||||
|| buffer [1] != 'd'
|
||||
|| buffer [2] != 'e'
|
||||
|| buffer [3] != 'f'
|
||||
|| buffer [4] != 'i'
|
||||
|| buffer [5] != 'n'
|
||||
|| buffer [6] != 'e'
|
||||
|| buffer [7] != ' ')
|
||||
return FALSE;
|
||||
if (buffer [0] == '#'
|
||||
&& buffer [1] == 'd'
|
||||
&& buffer [2] == 'e'
|
||||
&& buffer [3] == 'f'
|
||||
&& buffer [4] == 'i'
|
||||
&& buffer [5] == 'n'
|
||||
&& buffer [6] == 'e'
|
||||
&& buffer [7] == ' ')
|
||||
return TRUE;
|
||||
|
||||
if (buffer [0] == '/'
|
||||
&& buffer [1] != '*')
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -269,7 +273,7 @@ get_libdir (void)
|
||||
|
||||
if (libdir == NULL)
|
||||
libdir = g_win32_get_package_installation_subdirectory
|
||||
(GETTEXT_PACKAGE, dll_name, "lib\\gtk-2.0\\" GTK_VERSION "\\loaders");
|
||||
(GETTEXT_PACKAGE, dll_name, "lib\\gtk-2.0\\" GTK_BINARY_VERSION "\\loaders");
|
||||
|
||||
return libdir;
|
||||
}
|
||||
|
||||
@@ -707,9 +707,9 @@ gdk_pixdata_to_csource (GdkPixdata *pixdata,
|
||||
cdata.static_prefix, cdata.const_prefix, name);
|
||||
APPEND (gstring, " 0x%x, /* Pixbuf magic: 'GdkP' */\n",
|
||||
GDK_PIXBUF_MAGIC_NUMBER);
|
||||
APPEND (gstring, " %u + %u, /* header length + pixel_data length */\n",
|
||||
APPEND (gstring, " %u + %lu, /* header length + pixel_data length */\n",
|
||||
GDK_PIXDATA_HEADER_LENGTH,
|
||||
rle_encoded ? img_buffer_end - img_buffer : rowstride * height);
|
||||
rle_encoded ? (glong)(img_buffer_end - img_buffer) : (glong)rowstride * height);
|
||||
APPEND (gstring, " 0x%x, /* pixdata_type */\n",
|
||||
pixdata->pixdata_type);
|
||||
APPEND (gstring, " %u, /* rowstride */\n",
|
||||
|
||||
+28
-11
@@ -233,14 +233,31 @@ static GdkPixbuf *gdk_pixbuf__bmp_image_load(FILE * f, GError **error)
|
||||
return pb;
|
||||
}
|
||||
|
||||
/* Picks up a 32-bit little-endian integer starting at the specified location.
|
||||
* Does it by hand instead of dereferencing a simple (gint *) cast due to
|
||||
* alignment constraints many platforms.
|
||||
*/
|
||||
static int
|
||||
lsb_32 (guchar *src)
|
||||
{
|
||||
return src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24);
|
||||
}
|
||||
|
||||
/* Same as above, but for 16-bit little-endian integers. */
|
||||
static short
|
||||
lsb_16 (guchar *src)
|
||||
{
|
||||
return src[0] | (src[1] << 8);
|
||||
}
|
||||
|
||||
static gboolean DecodeHeader(unsigned char *BFH, unsigned char *BIH,
|
||||
struct bmp_progressive_state *State,
|
||||
GError **error)
|
||||
{
|
||||
/* FIXME this is totally unrobust against bogus image data. */
|
||||
|
||||
if (State->BufferSize < GUINT32_FROM_LE (* (guint32 *) &BIH[0]) + 14) {
|
||||
State->BufferSize = GUINT32_FROM_LE (* (guint32 *) &BIH[0]) + 14;
|
||||
if (State->BufferSize < lsb_32 (&BIH[0]) + 14) {
|
||||
State->BufferSize = lsb_32 (&BIH[0]) + 14;
|
||||
State->buff = g_try_realloc (State->buff, State->BufferSize);
|
||||
if (State->buff == NULL) {
|
||||
g_set_error (error,
|
||||
@@ -257,16 +274,16 @@ static gboolean DecodeHeader(unsigned char *BFH, unsigned char *BIH,
|
||||
DumpBIH(BIH);
|
||||
#endif
|
||||
|
||||
State->Header.size = GUINT32_FROM_LE (* (guint32 *) &BIH[0]);
|
||||
State->Header.size = lsb_32 (&BIH[0]);
|
||||
if (State->Header.size == 40) {
|
||||
State->Header.width = GINT32_FROM_LE (* (gint32 *) &BIH[4]);
|
||||
State->Header.height = GINT32_FROM_LE (* (gint32 *) &BIH[8]);
|
||||
State->Header.depth = GUINT16_FROM_LE (* (guint16 *) &BIH[14]);
|
||||
State->Compressed = GUINT32_FROM_LE (* (guint32 *) &BIH[16]);
|
||||
State->Header.width = lsb_32 (&BIH[4]);
|
||||
State->Header.height = lsb_32 (&BIH[8]);
|
||||
State->Header.depth = lsb_16 (&BIH[14]);
|
||||
State->Compressed = lsb_32 (&BIH[16]);
|
||||
} else if (State->Header.size == 12) {
|
||||
State->Header.width = GUINT16_FROM_LE (* (guint16 *) &BIH[4]);
|
||||
State->Header.height = GUINT16_FROM_LE (* (guint16 *) &BIH[6]);
|
||||
State->Header.depth = GUINT16_FROM_LE (* (guint16 *) &BIH[10]);
|
||||
State->Header.width = lsb_16 (&BIH[4]);
|
||||
State->Header.height = lsb_16 (&BIH[6]);
|
||||
State->Header.depth = lsb_16 (&BIH[10]);
|
||||
State->Compressed = BI_RGB;
|
||||
} else {
|
||||
g_set_error (error,
|
||||
@@ -368,7 +385,7 @@ static gboolean DecodeHeader(unsigned char *BFH, unsigned char *BIH,
|
||||
State->BufferDone = 0;
|
||||
if (State->Type <= 8) {
|
||||
State->read_state = READ_STATE_PALETTE;
|
||||
State->BufferSize = GUINT32_FROM_LE (* (guint32 *) &BFH[10]) - 14 - State->Header.size;
|
||||
State->BufferSize = lsb_32 (&BFH[10]) - 14 - State->Header.size;
|
||||
} else if (State->Compressed == BI_RGB) {
|
||||
State->read_state = READ_STATE_DATA;
|
||||
State->BufferSize = State->LineWidth;
|
||||
|
||||
@@ -268,6 +268,21 @@ tiff_image_parse (TIFF *tiff, TiffContext *context, GError **error)
|
||||
TIFFRGBAImageGet (&img, (uint32 *)pixels, width, height);
|
||||
TIFFRGBAImageEnd (&img);
|
||||
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
/* Turns out that the packing used by TIFFRGBAImage depends on the host byte order... */
|
||||
while (pixels < pixbuf->pixels + bytes) {
|
||||
uint32 pixel = *(uint32 *)pixels;
|
||||
int r = TIFFGetR(pixel);
|
||||
int g = TIFFGetG(pixel);
|
||||
int b = TIFFGetB(pixel);
|
||||
int a = TIFFGetA(pixel);
|
||||
*pixels++ = r;
|
||||
*pixels++ = g;
|
||||
*pixels++ = b;
|
||||
*pixels++ = a;
|
||||
}
|
||||
#endif
|
||||
|
||||
G_UNLOCK (tiff_loader);
|
||||
if (context)
|
||||
(* context->update_func) (pixbuf, 0, 0, width, height, context->user_data);
|
||||
|
||||
@@ -244,6 +244,7 @@ read_bitmap_file_data (FILE *fstream,
|
||||
*ptr=value;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!bits)
|
||||
@@ -323,6 +324,7 @@ gdk_pixbuf__xbm_image_load_real (FILE *f, XBMData *context, GError **error)
|
||||
}
|
||||
pixels += row_stride;
|
||||
}
|
||||
g_free (data);
|
||||
|
||||
if (context) {
|
||||
(* context->update_func) (pixbuf, 0, 0, w, h, context->user_data);
|
||||
|
||||
+3
-3
@@ -1209,7 +1209,7 @@ pixbuf_create_from_xpm (const gchar * (*get_buf) (enum buf_op op, gpointer handl
|
||||
GError **error)
|
||||
{
|
||||
gint w, h, n_col, cpp;
|
||||
gint cnt, xcnt, ycnt, wbytes, n, ns;
|
||||
gint cnt, xcnt, ycnt, wbytes, n;
|
||||
gint is_trans = FALSE;
|
||||
const gchar *buffer;
|
||||
gchar *name_buf;
|
||||
@@ -1322,9 +1322,10 @@ pixbuf_create_from_xpm (const gchar * (*get_buf) (enum buf_op op, gpointer handl
|
||||
}
|
||||
|
||||
wbytes = w * cpp;
|
||||
pixtmp = pixbuf->pixels;
|
||||
|
||||
for (ycnt = 0; ycnt < h; ycnt++) {
|
||||
pixtmp = pixbuf->pixels + ycnt * pixbuf->rowstride;
|
||||
|
||||
buffer = (*get_buf) (op_body, handle);
|
||||
if ((!buffer) || (strlen (buffer) < wbytes))
|
||||
continue;
|
||||
@@ -1332,7 +1333,6 @@ pixbuf_create_from_xpm (const gchar * (*get_buf) (enum buf_op op, gpointer handl
|
||||
for (n = 0, cnt = 0, xcnt = 0; n < wbytes; n += cpp, xcnt++) {
|
||||
strncpy (pixel_str, &buffer[n], cpp);
|
||||
pixel_str[cpp] = 0;
|
||||
ns = 0;
|
||||
|
||||
color = g_hash_table_lookup (color_hash, pixel_str);
|
||||
|
||||
|
||||
+15
-10
@@ -493,13 +493,13 @@ composite_line_22_4a4 (int *weights, int n_x, int n_y,
|
||||
b += ta * q0[6];
|
||||
a += ta;
|
||||
|
||||
ta = w3 * q0[3];
|
||||
r += ta * q0[0];
|
||||
g += ta * q0[1];
|
||||
b += ta * q0[2];
|
||||
ta = w3 * q1[3];
|
||||
r += ta * q1[0];
|
||||
g += ta * q1[1];
|
||||
b += ta * q1[2];
|
||||
a += ta;
|
||||
|
||||
ta += w4 * q1[7];
|
||||
ta = w4 * q1[7];
|
||||
r += ta * q1[4];
|
||||
g += ta * q1[5];
|
||||
b += ta * q1[6];
|
||||
@@ -881,16 +881,15 @@ scale_line_22_33 (int *weights, int n_x, int n_y,
|
||||
g += w3 * q1[1];
|
||||
b += w3 * q1[2];
|
||||
|
||||
r += w4 * q1[4];
|
||||
g += w4 * q1[5];
|
||||
b += w4 * q1[6];
|
||||
r += w4 * q1[3];
|
||||
g += w4 * q1[4];
|
||||
b += w4 * q1[5];
|
||||
|
||||
dest[0] = (r + 0x8000) >> 16;
|
||||
dest[1] = (g + 0x8000) >> 16;
|
||||
dest[2] = (b + 0x8000) >> 16;
|
||||
|
||||
dest += 3;
|
||||
|
||||
x += x_step;
|
||||
}
|
||||
|
||||
@@ -1430,10 +1429,13 @@ pixops_composite_color (guchar *dest_buf,
|
||||
return;
|
||||
|
||||
if (!src_has_alpha && overall_alpha == 255)
|
||||
{
|
||||
pixops_scale (dest_buf, render_x0, render_y0, render_x1, render_y1,
|
||||
dest_rowstride, dest_channels, dest_has_alpha,
|
||||
src_buf, src_width, src_height, src_rowstride, src_channels,
|
||||
src_has_alpha, scale_x, scale_y, interp_type);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (interp_type)
|
||||
{
|
||||
@@ -1481,7 +1483,7 @@ pixops_composite_color (guchar *dest_buf,
|
||||
* @render_x0: x0 of region of scaled source to store into @dest_buf
|
||||
* @render_y0: y0 of region of scaled source to store into @dest_buf
|
||||
* @render_x1: x1 of region of scaled source to store into @dest_buf
|
||||
* @render_y1: x1 of region of scaled source to store into @dest_buf
|
||||
* @render_y1: y1 of region of scaled source to store into @dest_buf
|
||||
* @dest_rowstride: rowstride of @dest_buf
|
||||
* @dest_channels: number of channels in @dest_buf
|
||||
* @dest_has_alpha: whether @dest_buf has alpha
|
||||
@@ -1533,10 +1535,13 @@ pixops_composite (guchar *dest_buf,
|
||||
return;
|
||||
|
||||
if (!src_has_alpha && overall_alpha == 255)
|
||||
{
|
||||
pixops_scale (dest_buf, render_x0, render_y0, render_x1, render_y1,
|
||||
dest_rowstride, dest_channels, dest_has_alpha,
|
||||
src_buf, src_width, src_height, src_rowstride, src_channels,
|
||||
src_has_alpha, scale_x, scale_y, interp_type);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (interp_type)
|
||||
{
|
||||
|
||||
@@ -11,3 +11,4 @@ gdkenumtypes.[ch]
|
||||
libgdk.la
|
||||
gdkconfig.h
|
||||
stamp-gc-h
|
||||
stamp-gdkenumtypes.h
|
||||
|
||||
+27
-9
@@ -42,7 +42,7 @@ gdk_win32_symbols = -export-symbols gdk.def
|
||||
install-libtool-import-lib:
|
||||
$(INSTALL) .libs/libgdk-win32-$(GTK_API_VERSION).dll.a $(DESTDIR)$(libdir)
|
||||
uninstall-libtool-import-lib:
|
||||
-rm $(DESTDIR)$(libdir)/libdk-win32-$(GTK_API_VERSION).dll.a
|
||||
-rm $(DESTDIR)$(libdir)/libgdk-win32-$(GTK_API_VERSION).dll.a
|
||||
else
|
||||
install-libtool-import-lib:
|
||||
uninstall-libtool-import-lib:
|
||||
@@ -164,7 +164,7 @@ lib_LTLIBRARIES = $(gdktargetlib)
|
||||
|
||||
EXTRA_LTLIBRARIES = libgdk-x11-2.0.la libgdk-linux-fb-2.0.la libgdk-win32-2.0.la
|
||||
|
||||
MAINTAINERCLEANFILES =
|
||||
MAINTAINERCLEANFILES = gdkenumtypes.h stamp-gdkenumtypes.h
|
||||
EXTRA_HEADERS =
|
||||
|
||||
#
|
||||
@@ -185,15 +185,33 @@ if DISABLE_EXPLICIT_DEPS
|
||||
endif
|
||||
|
||||
#note: not gdkconfig.h
|
||||
BUILT_SOURCES = stamp-gc-h @REBUILD@ gdkenumtypes.c gdkenumtypes.h
|
||||
BUILT_SOURCES = stamp-gc-h @REBUILD@ gdkenumtypes.h
|
||||
|
||||
gdkenumtypes.h: @REBUILD@ $(gdk_public_h_sources) $(srcdir)/makeenums.pl
|
||||
cd $(srcdir) \
|
||||
&& $(PERL) ./makeenums.pl include $(gdk_public_h_sources) > gdkenumtypes.h
|
||||
# Generate built header without using automake-1.4 BUILT_SOURCES
|
||||
$(libgdk_x11_2_0_la_OBJECTS) $(libgdk_linux_fb_2_0_la_OBJECTS) $(libgdk_win32_2_0_la_OBJECTS): gdkenumtypes.h
|
||||
|
||||
gdkenumtypes.c: @REBUILD@ $(gdk_public_h_sources) $(srcdir)/makeenums.pl
|
||||
cd $(srcdir) \
|
||||
&& $(PERL) ./makeenums.pl cfile $(gdk_public_h_sources) > gdkenumtypes.c
|
||||
$(srcdir)/gdkenumtypes.h: stamp-gdkenumtypes.h
|
||||
@true
|
||||
stamp-gdkenumtypes.h: @REBUILD@ $(gdk_public_h_sources) Makefile
|
||||
( cd $(srcdir) && glib-mkenums \
|
||||
--fhead "#ifndef __GDK_ENUM_TYPES_H__\n#define __GDK_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
|
||||
--fprod "/* enumerations from \"@filename@\" */\n" \
|
||||
--vhead "GType @enum_name@_get_type (void);\n#define GDK_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
|
||||
--ftail "G_END_DECLS\n\n#endif /* __GDK_ENUM_TYPES_H__ */" \
|
||||
$(gdk_public_h_sources) ) >> xgen-geth \
|
||||
&& (cmp -s xgen-geth $(srcdir)/gdkenumtypes.h || cp xgen-geth $(srcdir)/gdkenumtypes.h ) \
|
||||
&& rm -f xgen-geth \
|
||||
&& echo timestamp > $(@F)
|
||||
$(srcdir)/gdkenumtypes.c: @REBUILD@ $(gdk_public_h_sources) Makefile
|
||||
( cd $(srcdir) && glib-mkenums \
|
||||
--fhead "#define GDK_ENABLE_BROKEN\n#include \"gdk.h\"" \
|
||||
--fprod "\n/* enumerations from \"@filename@\" */" \
|
||||
--vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \
|
||||
--vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
|
||||
--vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \
|
||||
$(gdk_public_h_sources) ) > xgen-getc \
|
||||
&& cp xgen-getc $(srcdir)/gdkenumtypes.c \
|
||||
&& rm -f xgen-getc
|
||||
|
||||
gdkconfig.h: stamp-gc-h
|
||||
@if test -f gdkconfig.h; then :; \
|
||||
|
||||
+1
-1
@@ -275,7 +275,7 @@ gdk_draw_layout_line_with_colors (GdkDrawable *drawable,
|
||||
tmp.green = foreground->green;
|
||||
}
|
||||
|
||||
fg_gc = gdk_pango_get_gc (drawable, context, fg_set ? &tmp : NULL,
|
||||
fg_gc = gdk_pango_get_gc (drawable, context, (fg_set || foreground) ? &tmp : NULL,
|
||||
stipple, gc);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -544,12 +544,12 @@ rgb565msb (GdkImage *image,
|
||||
| (data & 0x1f0000) >> 5 | (data & 0x1c0000) >> 10;
|
||||
#else
|
||||
data = *s++;
|
||||
*o++ = (data & 0xf800) | (data & 0xe000) >> 5
|
||||
| (data & 0x7e0) >> 3 | (data & 0x600) >> 9;
|
||||
*o++ = (data & 0x1f) << 11 | (data & 0x1c) << 6
|
||||
| (data & 0xf8000000) >> 24 | (data & 0xe0000000) >> 29;
|
||||
*o++ = (data & 0x7e00000) >> 11 | (data & 0x6000000) >> 17
|
||||
| (data & 0x1f0000) >> 13 | (data & 0x1c0000) >> 18;
|
||||
*o++ = (data & 0xf8000000) >> 16 | (data & 0xe0000000) >> 21
|
||||
| (data & 0x7e00000) >> 19 | (data & 0x6000000) >> 25;
|
||||
*o++ = (data & 0x1f0000) >> 5 | (data & 0x1c0000) >> 10
|
||||
| (data & 0xf800) >> 8 | (data & 0xe000) >> 13;
|
||||
*o++ = (data & 0x7e0) << 5 | (data & 0x600) >> 1
|
||||
| (data & 0x1f) << 3 | (data & 0x1c) >> 2;
|
||||
#endif
|
||||
}
|
||||
/* check for last remaining pixel */
|
||||
|
||||
@@ -2148,7 +2148,9 @@ gdk_window_process_all_updates (void)
|
||||
static gboolean
|
||||
gdk_window_update_idle (gpointer data)
|
||||
{
|
||||
GDK_THREADS_ENTER ();
|
||||
gdk_window_process_all_updates ();
|
||||
GDK_THREADS_LEAVE ();
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -1011,6 +1011,8 @@ gdk_win32_hdc_get (GdkDrawable *drawable,
|
||||
if ((hrgn = ExtCreateRegion (NULL, nbytes, rgndata)) == NULL)
|
||||
WIN32_API_FAILED ("ExtCreateRegion"), ok = FALSE;
|
||||
|
||||
g_free (rgndata);
|
||||
|
||||
/*
|
||||
* XXX: combine the fillmode-stipple with the clip region possibly
|
||||
* this needs to be done with the hcliprgn below as well, but
|
||||
|
||||
@@ -219,7 +219,7 @@ gdk_screen_height (void)
|
||||
gint
|
||||
gdk_screen_width_mm (void)
|
||||
{
|
||||
return GetDeviceCaps (gdk_display_hdc, HORZSIZE);
|
||||
return (double) GetDeviceCaps (gdk_display_hdc, HORZRES) / GetDeviceCaps (gdk_display_hdc, LOGPIXELSX) * 25.4;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -240,7 +240,7 @@ gdk_screen_width_mm (void)
|
||||
gint
|
||||
gdk_screen_height_mm (void)
|
||||
{
|
||||
return GetDeviceCaps (gdk_display_hdc, VERTSIZE);
|
||||
return (double) GetDeviceCaps (gdk_display_hdc, VERTRES) / GetDeviceCaps (gdk_display_hdc, LOGPIXELSY) * 25.4;
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -1594,6 +1594,7 @@ gdk_window_set_cursor (GdkWindow *window,
|
||||
{
|
||||
GdkWindowImplWin32 *impl;
|
||||
GdkCursorPrivate *cursor_private;
|
||||
GdkWindowObject *parent_window;
|
||||
HCURSOR hcursor;
|
||||
HCURSOR hprevcursor;
|
||||
|
||||
@@ -1637,9 +1638,10 @@ gdk_window_set_cursor (GdkWindow *window,
|
||||
hcursor, impl->hcursor));
|
||||
}
|
||||
|
||||
/* Set new cursor in all cases if we're over our window */
|
||||
/* If the pointer is over our window, set new cursor if given */
|
||||
if (gdk_window_get_pointer(window, NULL, NULL, NULL) == window)
|
||||
SetCursor (impl->hcursor);
|
||||
if (impl->hcursor != NULL)
|
||||
SetCursor (impl->hcursor);
|
||||
|
||||
/* Destroy the previous cursor: Need to make sure it's no longer in
|
||||
* use before we destroy it, in case we're not over our window but
|
||||
@@ -1648,7 +1650,25 @@ gdk_window_set_cursor (GdkWindow *window,
|
||||
if (hprevcursor != NULL)
|
||||
{
|
||||
if (GetCursor() == hprevcursor)
|
||||
SetCursor (NULL);
|
||||
{
|
||||
/* Look for a suitable cursor to use instead */
|
||||
hcursor = NULL;
|
||||
parent_window = GDK_WINDOW_OBJECT (window)->parent;
|
||||
while (hcursor == NULL)
|
||||
{
|
||||
if (parent_window)
|
||||
{
|
||||
impl = GDK_WINDOW_IMPL_WIN32 (parent_window->impl);
|
||||
hcursor = impl->hcursor;
|
||||
parent_window = parent_window->parent;
|
||||
}
|
||||
else
|
||||
{
|
||||
hcursor = LoadCursor (NULL, IDC_ARROW);
|
||||
}
|
||||
}
|
||||
SetCursor (hcursor);
|
||||
}
|
||||
|
||||
GDK_NOTE (MISC, g_print ("...DestroyCursor (%p)\n",
|
||||
hprevcursor));
|
||||
|
||||
+56
-14
@@ -248,25 +248,13 @@ gdk_colormap_new (GdkVisual *visual,
|
||||
return colormap;
|
||||
}
|
||||
|
||||
#define MIN_SYNC_TIME 2
|
||||
|
||||
static void
|
||||
gdk_colormap_sync (GdkColormap *colormap,
|
||||
gboolean force)
|
||||
gdk_colormap_sync_palette (GdkColormap *colormap)
|
||||
{
|
||||
time_t current_time;
|
||||
GdkColormapPrivateX11 *private = GDK_COLORMAP_PRIVATE_DATA (colormap);
|
||||
XColor *xpalette;
|
||||
gint nlookup;
|
||||
gint i;
|
||||
|
||||
g_return_if_fail (GDK_IS_COLORMAP (colormap));
|
||||
|
||||
current_time = time (NULL);
|
||||
if (!force && ((current_time - private->last_sync_time) < MIN_SYNC_TIME))
|
||||
return;
|
||||
|
||||
private->last_sync_time = current_time;
|
||||
|
||||
nlookup = 0;
|
||||
xpalette = g_new (XColor, colormap->size);
|
||||
@@ -296,6 +284,60 @@ gdk_colormap_sync (GdkColormap *colormap,
|
||||
|
||||
g_free (xpalette);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_colormap_sync_direct_color (GdkColormap *colormap)
|
||||
{
|
||||
GdkColormapPrivateX11 *private = GDK_COLORMAP_PRIVATE_DATA (colormap);
|
||||
GdkVisual *visual = colormap->visual;
|
||||
XColor *xpalette;
|
||||
gint i;
|
||||
|
||||
xpalette = g_new (XColor, colormap->size);
|
||||
|
||||
for (i = 0; i < colormap->size; i++)
|
||||
{
|
||||
xpalette[i].pixel =
|
||||
(((i << visual->red_shift) & visual->red_mask) |
|
||||
((i << visual->green_shift) & visual->green_mask) |
|
||||
((i << visual->blue_shift) & visual->blue_mask));
|
||||
}
|
||||
|
||||
XQueryColors (gdk_display, private->xcolormap, xpalette, colormap->size);
|
||||
|
||||
for (i = 0; i < colormap->size; i++)
|
||||
{
|
||||
colormap->colors[i].pixel = xpalette[i].pixel;
|
||||
colormap->colors[i].red = xpalette[i].red;
|
||||
colormap->colors[i].green = xpalette[i].green;
|
||||
colormap->colors[i].blue = xpalette[i].blue;
|
||||
}
|
||||
|
||||
g_free (xpalette);
|
||||
}
|
||||
|
||||
#define MIN_SYNC_TIME 2
|
||||
|
||||
static void
|
||||
gdk_colormap_sync (GdkColormap *colormap,
|
||||
gboolean force)
|
||||
{
|
||||
time_t current_time;
|
||||
GdkColormapPrivateX11 *private = GDK_COLORMAP_PRIVATE_DATA (colormap);
|
||||
|
||||
g_return_if_fail (GDK_IS_COLORMAP (colormap));
|
||||
|
||||
current_time = time (NULL);
|
||||
if (!force && ((current_time - private->last_sync_time) < MIN_SYNC_TIME))
|
||||
return;
|
||||
|
||||
private->last_sync_time = current_time;
|
||||
|
||||
if (colormap->visual->type == GDK_VISUAL_DIRECT_COLOR)
|
||||
gdk_colormap_sync_direct_color (colormap);
|
||||
else
|
||||
gdk_colormap_sync_palette (colormap);
|
||||
}
|
||||
|
||||
|
||||
GdkColormap*
|
||||
@@ -331,10 +373,10 @@ gdk_colormap_get_system (void)
|
||||
/* Fall through */
|
||||
case GDK_VISUAL_STATIC_GRAY:
|
||||
case GDK_VISUAL_STATIC_COLOR:
|
||||
case GDK_VISUAL_DIRECT_COLOR:
|
||||
colormap->colors = g_new (GdkColor, colormap->size);
|
||||
gdk_colormap_sync (colormap, TRUE);
|
||||
|
||||
case GDK_VISUAL_DIRECT_COLOR:
|
||||
case GDK_VISUAL_TRUE_COLOR:
|
||||
break;
|
||||
}
|
||||
|
||||
+37
-3
@@ -335,6 +335,8 @@ gdk_window_cache_filter (GdkXEvent *xev,
|
||||
node->prev = above_node->prev;
|
||||
if (node->prev)
|
||||
node->prev->next = node;
|
||||
else
|
||||
cache->children = node;
|
||||
node->next = above_node;
|
||||
above_node->prev = node;
|
||||
}
|
||||
@@ -1740,6 +1742,10 @@ motif_dnd_filter (GdkXEvent *xev,
|
||||
Atom atom;
|
||||
gint16 x_root, y_root;
|
||||
gboolean is_reply;
|
||||
|
||||
if (!event->any.window ||
|
||||
gdk_window_get_window_type (event->any.window) == GDK_WINDOW_FOREIGN)
|
||||
return GDK_FILTER_CONTINUE; /* Not for us */
|
||||
|
||||
/* First read some fields common to all Motif DND messages */
|
||||
|
||||
@@ -1878,6 +1884,10 @@ xdnd_status_filter (GdkXEvent *xev,
|
||||
guint32 flags = xevent->xclient.data.l[1];
|
||||
Atom action = xevent->xclient.data.l[4];
|
||||
GdkDragContext *context;
|
||||
|
||||
if (!event->any.window ||
|
||||
gdk_window_get_window_type (event->any.window) == GDK_WINDOW_FOREIGN)
|
||||
return GDK_FILTER_CONTINUE; /* Not for us */
|
||||
|
||||
GDK_NOTE (DND,
|
||||
g_message ("XdndStatus: dest_window: %#x action: %ld",
|
||||
@@ -1920,6 +1930,10 @@ xdnd_finished_filter (GdkXEvent *xev,
|
||||
XEvent *xevent = (XEvent *)xev;
|
||||
guint32 dest_window = xevent->xclient.data.l[0];
|
||||
GdkDragContext *context;
|
||||
|
||||
if (!event->any.window ||
|
||||
gdk_window_get_window_type (event->any.window) == GDK_WINDOW_FOREIGN)
|
||||
return GDK_FILTER_CONTINUE; /* Not for us */
|
||||
|
||||
GDK_NOTE (DND,
|
||||
g_message ("XdndFinished: dest_window: %#x", dest_window));
|
||||
@@ -2371,9 +2385,17 @@ xdnd_enter_filter (GdkXEvent *xev,
|
||||
gulong nitems, after;
|
||||
Atom *data;
|
||||
|
||||
guint32 source_window = xevent->xclient.data.l[0];
|
||||
gboolean get_types = ((xevent->xclient.data.l[1] & 1) != 0);
|
||||
gint version = (xevent->xclient.data.l[1] & 0xff000000) >> 24;
|
||||
guint32 source_window;
|
||||
gboolean get_types;
|
||||
gint version;
|
||||
|
||||
if (!event->any.window ||
|
||||
gdk_window_get_window_type (event->any.window) == GDK_WINDOW_FOREIGN)
|
||||
return GDK_FILTER_CONTINUE; /* Not for us */
|
||||
|
||||
source_window = xevent->xclient.data.l[0];
|
||||
get_types = ((xevent->xclient.data.l[1] & 1) != 0);
|
||||
version = (xevent->xclient.data.l[1] & 0xff000000) >> 24;
|
||||
|
||||
GDK_NOTE (DND,
|
||||
g_message ("XdndEnter: source_window: %#x, version: %#x",
|
||||
@@ -2472,6 +2494,10 @@ xdnd_leave_filter (GdkXEvent *xev,
|
||||
g_message ("XdndLeave: source_window: %#x",
|
||||
source_window));
|
||||
|
||||
if (!event->any.window ||
|
||||
gdk_window_get_window_type (event->any.window) == GDK_WINDOW_FOREIGN)
|
||||
return GDK_FILTER_CONTINUE; /* Not for us */
|
||||
|
||||
if ((current_dest_drag != NULL) &&
|
||||
(current_dest_drag->protocol == GDK_DRAG_PROTO_XDND) &&
|
||||
(GDK_DRAWABLE_XID (current_dest_drag->source_window) == source_window))
|
||||
@@ -2499,6 +2525,10 @@ xdnd_position_filter (GdkXEvent *xev,
|
||||
gint16 y_root = xevent->xclient.data.l[2] & 0xffff;
|
||||
guint32 time = xevent->xclient.data.l[3];
|
||||
Atom action = xevent->xclient.data.l[4];
|
||||
|
||||
if (!event->any.window ||
|
||||
gdk_window_get_window_type (event->any.window) == GDK_WINDOW_FOREIGN)
|
||||
return GDK_FILTER_CONTINUE; /* Not for us */
|
||||
|
||||
GDK_NOTE (DND,
|
||||
g_message ("XdndPosition: source_window: %#x position: (%d, %d) time: %d action: %ld",
|
||||
@@ -2539,6 +2569,10 @@ xdnd_drop_filter (GdkXEvent *xev,
|
||||
XEvent *xevent = (XEvent *)xev;
|
||||
guint32 source_window = xevent->xclient.data.l[0];
|
||||
guint32 time = xevent->xclient.data.l[2];
|
||||
|
||||
if (!event->any.window ||
|
||||
gdk_window_get_window_type (event->any.window) == GDK_WINDOW_FOREIGN)
|
||||
return GDK_FILTER_CONTINUE; /* Not for us */
|
||||
|
||||
GDK_NOTE (DND,
|
||||
g_message ("XdndDrop: source_window: %#x time: %d",
|
||||
|
||||
+21
-10
@@ -304,7 +304,8 @@ gdk_check_wm_state_changed (GdkWindow *window)
|
||||
gboolean found_sticky, found_maxvert, found_maxhorz;
|
||||
GdkWindowState old_state;
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
if (GDK_WINDOW_DESTROYED (window) ||
|
||||
gdk_window_get_window_type (window) != GDK_WINDOW_TOPLEVEL)
|
||||
return;
|
||||
|
||||
if (wm_state_atom == 0)
|
||||
@@ -665,6 +666,7 @@ gdk_event_translate (GdkEvent *event,
|
||||
charcount = XLookupString (&xevent->xkey, buf, 16,
|
||||
&keysym, &compose);
|
||||
event->key.keyval = keysym;
|
||||
event->key.hardware_keycode = xevent->xkey.keycode;
|
||||
|
||||
GDK_NOTE (EVENTS,
|
||||
g_message ("key release:\t\twindow: %ld key: %12s %d",
|
||||
@@ -1311,13 +1313,17 @@ gdk_event_translate (GdkEvent *event,
|
||||
? " (discarding)"
|
||||
: GDK_WINDOW_TYPE (window) == GDK_WINDOW_CHILD
|
||||
? " (discarding child)"
|
||||
: xevent->xconfigure.event != xevent->xconfigure.window
|
||||
? " (discarding substructure)"
|
||||
: ""));
|
||||
if (window &&
|
||||
xevent->xconfigure.event == xevent->xconfigure.window &&
|
||||
!GDK_WINDOW_DESTROYED (window) &&
|
||||
(window_private->extension_events != 0))
|
||||
_gdk_input_configure_event (&xevent->xconfigure, window);
|
||||
|
||||
if (!window ||
|
||||
xevent->xconfigure.event != xevent->xconfigure.window ||
|
||||
GDK_WINDOW_TYPE (window) == GDK_WINDOW_CHILD ||
|
||||
GDK_WINDOW_TYPE (window) == GDK_WINDOW_ROOT)
|
||||
return_val = FALSE;
|
||||
@@ -1387,12 +1393,6 @@ gdk_event_translate (GdkEvent *event,
|
||||
break;
|
||||
}
|
||||
|
||||
event->property.type = GDK_PROPERTY_NOTIFY;
|
||||
event->property.window = window;
|
||||
event->property.atom = gdk_x11_xatom_to_atom (xevent->xproperty.atom);
|
||||
event->property.time = xevent->xproperty.time;
|
||||
event->property.state = xevent->xproperty.state;
|
||||
|
||||
if (wm_state_atom == 0)
|
||||
wm_state_atom = gdk_x11_get_xatom_by_name ("_NET_WM_STATE");
|
||||
|
||||
@@ -1403,9 +1403,20 @@ gdk_event_translate (GdkEvent *event,
|
||||
xevent->xproperty.atom == wm_desktop_atom)
|
||||
{
|
||||
/* If window state changed, then synthesize those events. */
|
||||
gdk_check_wm_state_changed (event->property.window);
|
||||
gdk_check_wm_state_changed (window);
|
||||
}
|
||||
|
||||
|
||||
if (window_private->event_mask & GDK_PROPERTY_CHANGE_MASK)
|
||||
{
|
||||
event->property.type = GDK_PROPERTY_NOTIFY;
|
||||
event->property.window = window;
|
||||
event->property.atom = gdk_x11_xatom_to_atom (xevent->xproperty.atom);
|
||||
event->property.time = xevent->xproperty.time;
|
||||
event->property.state = xevent->xproperty.state;
|
||||
}
|
||||
else
|
||||
return_val = FALSE;
|
||||
|
||||
break;
|
||||
|
||||
case SelectionClear:
|
||||
@@ -2076,7 +2087,7 @@ gdk_xsettings_notify_cb (const char *name,
|
||||
for (i = 0; i < G_N_ELEMENTS (settings_map) ; i++)
|
||||
if (strcmp (settings_map[i].xsettings_name, name) == 0)
|
||||
{
|
||||
new_event.setting.name = g_strdup (settings_map[i].gdk_name);
|
||||
new_event.setting.name = settings_map[i].gdk_name;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -54,6 +54,13 @@ update_keyrange (void)
|
||||
#ifdef HAVE_XKB
|
||||
#include <X11/XKBlib.h>
|
||||
|
||||
/* OSF-4.0 is apparently missing this macro
|
||||
*/
|
||||
#ifndef XkbKeySymEntry
|
||||
#define XkbKeySymEntry(d,k,sl,g) \
|
||||
(XkbKeySym(d,k,((XkbKeyGroupsWidth(d,k)*(g))+(sl))))
|
||||
#endif
|
||||
|
||||
gboolean _gdk_use_xkb = FALSE;
|
||||
gint _gdk_xkb_event_type;
|
||||
static XkbDescPtr xkb_desc = NULL;
|
||||
|
||||
@@ -112,6 +112,78 @@ GdkArgDesc _gdk_windowing_args[] = {
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
/*
|
||||
* XLib internal connection handling
|
||||
*/
|
||||
typedef struct _GdkInternalConnection GdkInternalConnection;
|
||||
|
||||
struct _GdkInternalConnection
|
||||
{
|
||||
gint fd;
|
||||
GSource *source;
|
||||
Display *display;
|
||||
};
|
||||
|
||||
static gboolean
|
||||
process_internal_connection (GIOChannel *gioc,
|
||||
GIOCondition cond,
|
||||
gpointer data)
|
||||
{
|
||||
GdkInternalConnection *connection = (GdkInternalConnection *)data;
|
||||
|
||||
GDK_THREADS_ENTER ();
|
||||
|
||||
XProcessInternalConnection ((Display*)connection->display, connection->fd);
|
||||
|
||||
GDK_THREADS_LEAVE ();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GdkInternalConnection *
|
||||
gdk_add_connection_handler (Display *display,
|
||||
guint fd)
|
||||
{
|
||||
GIOChannel *io_channel;
|
||||
GdkInternalConnection *connection;
|
||||
|
||||
connection = g_new (GdkInternalConnection, 1);
|
||||
|
||||
connection->fd = fd;
|
||||
connection->display = display;
|
||||
|
||||
io_channel = g_io_channel_unix_new (fd);
|
||||
|
||||
connection->source = g_io_create_watch (io_channel, G_IO_IN);
|
||||
g_source_set_callback (connection->source,
|
||||
(GSourceFunc)process_internal_connection, connection, NULL);
|
||||
g_source_attach (connection->source, NULL);
|
||||
|
||||
g_io_channel_unref (io_channel);
|
||||
|
||||
return connection;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_remove_connection_handler (GdkInternalConnection *connection)
|
||||
{
|
||||
g_source_destroy (connection->source);
|
||||
g_free (connection);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_internal_connection_watch (Display *display,
|
||||
XPointer arg,
|
||||
gint fd,
|
||||
gboolean opening,
|
||||
XPointer *watch_data)
|
||||
{
|
||||
if (opening)
|
||||
*watch_data = (XPointer)gdk_add_connection_handler (display, fd);
|
||||
else
|
||||
gdk_remove_connection_handler ((GdkInternalConnection *)*watch_data);
|
||||
}
|
||||
|
||||
gboolean
|
||||
_gdk_windowing_init_check (int argc, char **argv)
|
||||
{
|
||||
@@ -127,6 +199,8 @@ _gdk_windowing_init_check (int argc, char **argv)
|
||||
gdk_display = XOpenDisplay (_gdk_display_name);
|
||||
if (!gdk_display)
|
||||
return FALSE;
|
||||
|
||||
XAddConnectionWatch (gdk_display, gdk_internal_connection_watch, NULL);
|
||||
|
||||
if (gdk_synchronize)
|
||||
XSynchronize (gdk_display, True);
|
||||
|
||||
@@ -162,14 +162,14 @@ gdk_pixmap_new (GdkWindow *window,
|
||||
GdkColormap *cmap;
|
||||
gint window_depth;
|
||||
|
||||
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
|
||||
g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
|
||||
g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
|
||||
g_return_val_if_fail ((width != 0) && (height != 0), NULL);
|
||||
|
||||
if (!window)
|
||||
window = _gdk_parent_root;
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
if (GDK_IS_WINDOW (window) && GDK_WINDOW_DESTROYED (window))
|
||||
return NULL;
|
||||
|
||||
window_depth = gdk_drawable_get_depth (GDK_DRAWABLE (window));
|
||||
@@ -215,12 +215,12 @@ gdk_bitmap_create_from_data (GdkWindow *window,
|
||||
|
||||
g_return_val_if_fail (data != NULL, NULL);
|
||||
g_return_val_if_fail ((width != 0) && (height != 0), NULL);
|
||||
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
|
||||
g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
|
||||
|
||||
if (!window)
|
||||
window = _gdk_parent_root;
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
if (GDK_IS_WINDOW (window) && GDK_WINDOW_DESTROYED (window))
|
||||
return NULL;
|
||||
|
||||
pixmap = g_object_new (gdk_pixmap_get_type (), NULL);
|
||||
@@ -256,7 +256,7 @@ gdk_pixmap_create_from_data (GdkWindow *window,
|
||||
GdkDrawableImplX11 *draw_impl;
|
||||
GdkPixmapImplX11 *pix_impl;
|
||||
|
||||
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
|
||||
g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
|
||||
g_return_val_if_fail (data != NULL, NULL);
|
||||
g_return_val_if_fail (fg != NULL, NULL);
|
||||
g_return_val_if_fail (bg != NULL, NULL);
|
||||
@@ -266,7 +266,7 @@ gdk_pixmap_create_from_data (GdkWindow *window,
|
||||
if (!window)
|
||||
window = _gdk_parent_root;
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (window))
|
||||
if (GDK_IS_WINDOW (window) && GDK_WINDOW_DESTROYED (window))
|
||||
return NULL;
|
||||
|
||||
if (depth == -1)
|
||||
|
||||
@@ -410,7 +410,7 @@ gdk_window_new (GdkWindow *parent,
|
||||
visual = gdk_visual_get_system ();
|
||||
xvisual = ((GdkVisualPrivate*) visual)->xvisual;
|
||||
|
||||
xattributes.event_mask = StructureNotifyMask;
|
||||
xattributes.event_mask = StructureNotifyMask | PropertyChangeMask;
|
||||
for (i = 0; i < _gdk_nenvent_masks; i++)
|
||||
{
|
||||
if (attributes->event_mask & (1 << (i + 1)))
|
||||
@@ -1251,6 +1251,9 @@ gdk_window_reparent (GdkWindow *window,
|
||||
GDK_WINDOW_XID (new_parent),
|
||||
x, y);
|
||||
|
||||
window_private->x = x;
|
||||
window_private->y = y;
|
||||
|
||||
/* From here on, we treat parents of type GDK_WINDOW_FOREIGN like
|
||||
* the root window
|
||||
*/
|
||||
@@ -2521,7 +2524,7 @@ gdk_window_set_events (GdkWindow *window,
|
||||
if (!GDK_WINDOW_DESTROYED (window))
|
||||
{
|
||||
GDK_WINDOW_OBJECT (window)->event_mask = event_mask;
|
||||
xevent_mask = StructureNotifyMask;
|
||||
xevent_mask = StructureNotifyMask | PropertyChangeMask;
|
||||
for (i = 0; i < _gdk_nenvent_masks; i++)
|
||||
{
|
||||
if (event_mask & (1 << (i + 1)))
|
||||
|
||||
@@ -511,7 +511,8 @@ xsettings_client_process_event (XSettingsClient *client,
|
||||
if (xev->xany.window == RootWindow (client->display, client->screen))
|
||||
{
|
||||
if (xev->xany.type == ClientMessage &&
|
||||
xev->xclient.message_type == client->manager_atom)
|
||||
xev->xclient.message_type == client->manager_atom &&
|
||||
xev->xclient.data.l[1] == client->selection_atom)
|
||||
{
|
||||
check_manager_window (client);
|
||||
return True;
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ lib/libgdk-win32-@GTK_MAJOR_VERSION@.@GTK_MINOR_VERSION@-@LT_CURRENT_MINUS_AGE@.
|
||||
lib/libgtk-win32-@GTK_MAJOR_VERSION@.@GTK_MINOR_VERSION@-@LT_CURRENT_MINUS_AGE@.dll
|
||||
EOF
|
||||
|
||||
zip $ZIP lib/gtk-2.0/@GTK_VERSION@/loaders/*.dll lib/gtk-2.0/immodules/@GTK_VERSION@/*.dll
|
||||
zip $ZIP lib/gtk-2.0/@GTK_BINARY_VERSION@/loaders/*.dll lib/gtk-2.0/@GTK_BINARY_VERSION@/immodules/*.dll
|
||||
|
||||
zip $ZIP share/themes/*/gtk-2.0/gtkrc share/themes/*/gtk-2.0-key/gtkrc
|
||||
|
||||
|
||||
+5
-3
@@ -565,14 +565,16 @@ endif
|
||||
# Install a RC file for the default GTK+ theme, and key themes
|
||||
install-data-local: install-ms-lib install-libtool-import-lib
|
||||
$(mkinstalldirs) $(DESTDIR)$(datadir)/themes/Default/gtk-2.0
|
||||
$(INSTALL) $(srcdir)/gtkrc.default $(DESTDIR)$(datadir)/themes/Default/gtk-2.0/gtkrc
|
||||
$(INSTALL_DATA) $(srcdir)/gtkrc.default $(DESTDIR)$(datadir)/themes/Default/gtk-2.0/gtkrc
|
||||
$(mkinstalldirs) $(DESTDIR)$(datadir)/themes/Default/gtk-2.0-key
|
||||
$(INSTALL) $(srcdir)/gtkrc.key.default $(DESTDIR)$(datadir)/themes/Default/gtk-2.0-key/gtkrc
|
||||
$(INSTALL_DATA) $(srcdir)/gtkrc.key.default $(DESTDIR)$(datadir)/themes/Default/gtk-2.0-key/gtkrc
|
||||
$(mkinstalldirs) $(DESTDIR)$(datadir)/themes/Emacs/gtk-2.0-key
|
||||
$(INSTALL) $(srcdir)/gtkrc.key.emacs $(DESTDIR)$(datadir)/themes/Emacs/gtk-2.0-key/gtkrc
|
||||
$(INSTALL_DATA) $(srcdir)/gtkrc.key.emacs $(DESTDIR)$(datadir)/themes/Emacs/gtk-2.0-key/gtkrc
|
||||
|
||||
uninstall-local: uninstall-ms-lib uninstall-libtool-import-lib
|
||||
rm -f $(DESTDIR)$(datadir)/themes/Default/gtk-2.0/gtkrc
|
||||
rm -f $(DESTDIR)$(datadir)/themes/Default/gtk-2.0-key/gtkrc
|
||||
rm -f $(DESTDIR)$(datadir)/themes/Emacs/gtk-2.0-key/gtkrc
|
||||
|
||||
DEPS = $(gtktargetlib) $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la $(top_builddir)/gdk/$(gdktargetlib)
|
||||
|
||||
|
||||
+4
-4
@@ -119,15 +119,15 @@ gtk_accel_group_class_init (GtkAccelGroupClass *class)
|
||||
G_SIGNAL_DETAILED,
|
||||
0,
|
||||
accel_activate_accumulator, NULL,
|
||||
_gtk_marshal_BOOLEAN__OBJECT_UINT_UINT,
|
||||
G_TYPE_BOOLEAN, 3, G_TYPE_OBJECT, G_TYPE_UINT, G_TYPE_UINT);
|
||||
_gtk_marshal_BOOLEAN__OBJECT_UINT_FLAGS,
|
||||
G_TYPE_BOOLEAN, 3, G_TYPE_OBJECT, G_TYPE_UINT, GDK_TYPE_MODIFIER_TYPE);
|
||||
signal_accel_changed = g_signal_new ("accel_changed",
|
||||
G_OBJECT_CLASS_TYPE (class),
|
||||
G_SIGNAL_RUN_FIRST | G_SIGNAL_DETAILED,
|
||||
G_STRUCT_OFFSET (GtkAccelGroupClass, accel_changed),
|
||||
NULL, NULL,
|
||||
_gtk_marshal_VOID__UINT_UINT_BOXED,
|
||||
G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_CLOSURE);
|
||||
_gtk_marshal_VOID__UINT_FLAGS_BOXED,
|
||||
G_TYPE_NONE, 3, G_TYPE_UINT, GDK_TYPE_MODIFIER_TYPE, G_TYPE_CLOSURE);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -304,13 +304,12 @@ gtk_cell_renderer_toggle_render (GtkCellRenderer *cell,
|
||||
else
|
||||
state = GTK_STATE_ACTIVE;
|
||||
}
|
||||
if (celltoggle->activatable)
|
||||
{
|
||||
state = GTK_STATE_NORMAL;
|
||||
}
|
||||
else
|
||||
{
|
||||
state = GTK_STATE_INSENSITIVE;
|
||||
if (celltoggle->activatable)
|
||||
state = GTK_STATE_NORMAL;
|
||||
else
|
||||
state = GTK_STATE_INSENSITIVE;
|
||||
}
|
||||
|
||||
if (celltoggle->radio)
|
||||
|
||||
@@ -301,9 +301,12 @@ gtk_check_button_size_allocate (GtkWidget *widget,
|
||||
allocation->width -
|
||||
((border_width + focus_width + focus_pad) * 2
|
||||
+ indicator_size + indicator_spacing * 3));
|
||||
child_allocation.width = MAX (child_allocation.width, 1);
|
||||
|
||||
child_allocation.height = MIN (child_requisition.height,
|
||||
allocation->height - (border_width + focus_width + focus_pad) * 2);
|
||||
child_allocation.height = MAX (child_allocation.height, 1);
|
||||
|
||||
child_allocation.x = (border_width + indicator_size + indicator_spacing * 3 +
|
||||
widget->allocation.x + focus_width + focus_pad);
|
||||
child_allocation.y = widget->allocation.y +
|
||||
|
||||
+2
-2
@@ -152,8 +152,8 @@ gtk_clipboard_get (GdkAtom selection)
|
||||
static void
|
||||
selection_get_cb (GtkWidget *widget,
|
||||
GtkSelectionData *selection_data,
|
||||
guint time,
|
||||
guint info)
|
||||
guint info,
|
||||
guint time)
|
||||
{
|
||||
GtkClipboard *clipboard = gtk_clipboard_get (selection_data->selection);
|
||||
|
||||
|
||||
+2
-5
@@ -7669,7 +7669,7 @@ gtk_clist_drag_data_received (GtkWidget *widget,
|
||||
gtk_drag_get_source_widget (context) == widget &&
|
||||
selection_data->target ==
|
||||
gdk_atom_intern ("gtk-clist-drag-reorder", FALSE) &&
|
||||
selection_data->format == GTK_TYPE_POINTER &&
|
||||
selection_data->format == 8 &&
|
||||
selection_data->length == sizeof (GtkCListCellInfo))
|
||||
{
|
||||
GtkCListCellInfo *source_info;
|
||||
@@ -7719,12 +7719,9 @@ gtk_clist_drag_data_get (GtkWidget *widget,
|
||||
ret_info.column = info->column;
|
||||
|
||||
gtk_selection_data_set (selection_data, selection_data->target,
|
||||
GTK_TYPE_POINTER, (guchar *) &ret_info,
|
||||
8, (guchar *) &ret_info,
|
||||
sizeof (GtkCListCellInfo));
|
||||
}
|
||||
else
|
||||
gtk_selection_data_set (selection_data, selection_data->target,
|
||||
GTK_TYPE_POINTER, NULL, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-1
@@ -378,6 +378,8 @@ gtk_combo_entry_focus_out (GtkEntry * entry, GdkEventFocus * event, GtkCombo * c
|
||||
|
||||
if (combo->value_in_list && !gtk_combo_find (combo))
|
||||
{
|
||||
GSource *focus_idle;
|
||||
|
||||
/* gdk_beep(); *//* this can be annoying */
|
||||
if (combo->ok_if_empty && !strcmp (gtk_entry_get_text (entry), ""))
|
||||
return FALSE;
|
||||
@@ -390,7 +392,12 @@ gtk_combo_entry_focus_out (GtkEntry * entry, GdkEventFocus * event, GtkCombo * c
|
||||
so the focus can be lost anyway...
|
||||
the signal_emit_stop doesn't seem to work either...
|
||||
*/
|
||||
gtk_idle_add ((GtkFunction) gtk_combo_focus_idle, combo);
|
||||
focus_idle = g_idle_source_new ();
|
||||
g_source_set_closure (focus_idle,
|
||||
g_cclosure_new_object (G_CALLBACK (gtk_combo_focus_idle),
|
||||
G_OBJECT (combo)));
|
||||
g_source_attach (focus_idle, NULL);
|
||||
|
||||
/*gtk_signal_emit_stop_by_name (GTK_OBJECT (entry), "focus_out_event"); */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+15
-1
@@ -1389,6 +1389,20 @@ get_focus_chain (GtkContainer *container)
|
||||
return g_object_get_data (G_OBJECT (container), "gtk-container-focus-chain");
|
||||
}
|
||||
|
||||
/* same as gtk_container_get_children, except it includes internals
|
||||
*/
|
||||
static GList *
|
||||
gtk_container_get_all_children (GtkContainer *container)
|
||||
{
|
||||
GList *children = NULL;
|
||||
|
||||
gtk_container_forall (container,
|
||||
gtk_container_children_callback,
|
||||
&children);
|
||||
|
||||
return children;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_container_focus (GtkWidget *widget,
|
||||
GtkDirectionType direction)
|
||||
@@ -1420,7 +1434,7 @@ gtk_container_focus (GtkWidget *widget,
|
||||
if (container->has_focus_chain)
|
||||
children = g_list_copy (get_focus_chain (container));
|
||||
else
|
||||
children = gtk_container_get_children (container);
|
||||
children = gtk_container_get_all_children (container);
|
||||
|
||||
if (container->has_focus_chain &&
|
||||
(direction == GTK_DIR_TAB_FORWARD ||
|
||||
|
||||
+1
-3
@@ -2904,8 +2904,6 @@ cell_size_request (GtkCList *clist,
|
||||
requisition->height = MAX (requisition->height, height);
|
||||
break;
|
||||
default:
|
||||
requisition->width = 0;
|
||||
requisition->height = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -6050,7 +6048,7 @@ gtk_ctree_drag_data_received (GtkWidget *widget,
|
||||
gtk_drag_get_source_widget (context) == widget &&
|
||||
selection_data->target ==
|
||||
gdk_atom_intern ("gtk-clist-drag-reorder", FALSE) &&
|
||||
selection_data->format == GTK_TYPE_POINTER &&
|
||||
selection_data->format == 8 &&
|
||||
selection_data->length == sizeof (GtkCListCellInfo))
|
||||
{
|
||||
GtkCListCellInfo *source_info;
|
||||
|
||||
+17
-3
@@ -95,6 +95,7 @@ struct _GtkDragSourceInfo
|
||||
gint start_x, start_y; /* Initial position */
|
||||
gint cur_x, cur_y; /* Current Position */
|
||||
|
||||
guint32 grab_time; /* timestamp for initial grab */
|
||||
GList *selections; /* selections we've claimed */
|
||||
|
||||
GtkDragDestInfo *proxy_dest; /* Set if this is a proxy drag */
|
||||
@@ -102,6 +103,8 @@ struct _GtkDragSourceInfo
|
||||
guint drop_timeout; /* Timeout for aborting drop */
|
||||
guint destroy_icon : 1; /* If true, destroy icon_window
|
||||
*/
|
||||
guint have_grab : 1; /* Do we still have the pointer grab
|
||||
*/
|
||||
};
|
||||
|
||||
struct _GtkDragDestSite
|
||||
@@ -844,9 +847,9 @@ gtk_drag_dest_set (GtkWidget *widget,
|
||||
site->target_list = gtk_target_list_new (targets, n_targets);
|
||||
else
|
||||
site->target_list = NULL;
|
||||
|
||||
site->actions = actions;
|
||||
site->do_proxy = FALSE;
|
||||
site->proxy_window = NULL;
|
||||
|
||||
gtk_drag_dest_set_internal (widget, site);
|
||||
}
|
||||
@@ -1488,6 +1491,9 @@ gtk_drag_dest_site_destroy (gpointer data)
|
||||
{
|
||||
GtkDragDestSite *site = data;
|
||||
|
||||
if (site->proxy_window)
|
||||
g_object_unref (site->proxy_window);
|
||||
|
||||
if (site->target_list)
|
||||
gtk_target_list_unref (site->target_list);
|
||||
|
||||
@@ -1879,6 +1885,9 @@ gtk_drag_begin (GtkWidget *widget,
|
||||
}
|
||||
}
|
||||
|
||||
info->have_grab = TRUE;
|
||||
info->grab_time = time;
|
||||
|
||||
return info->context;
|
||||
}
|
||||
|
||||
@@ -2431,7 +2440,7 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else if (info->have_grab)
|
||||
{
|
||||
cursor = gtk_drag_get_cursor (event->dnd.context->action);
|
||||
if (info->cursor != cursor)
|
||||
@@ -2441,7 +2450,7 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
|
||||
GDK_POINTER_MOTION_HINT_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL,
|
||||
cursor, event->dnd.time);
|
||||
cursor, info->grab_time);
|
||||
info->cursor = cursor;
|
||||
}
|
||||
|
||||
@@ -2989,6 +2998,8 @@ gtk_drag_end (GtkDragSourceInfo *info, guint32 time)
|
||||
GdkEvent send_event;
|
||||
GtkWidget *source_widget = info->widget;
|
||||
|
||||
info->have_grab = FALSE;
|
||||
|
||||
gdk_pointer_ungrab (time);
|
||||
gdk_keyboard_ungrab (time);
|
||||
|
||||
@@ -3000,6 +3011,9 @@ gtk_drag_end (GtkDragSourceInfo *info, guint32 time)
|
||||
gtk_signal_disconnect_by_func (GTK_OBJECT (info->ipc_widget),
|
||||
GTK_SIGNAL_FUNC (gtk_drag_motion_cb),
|
||||
info);
|
||||
gtk_signal_disconnect_by_func (GTK_OBJECT (info->ipc_widget),
|
||||
GTK_SIGNAL_FUNC (gtk_drag_key_cb),
|
||||
info);
|
||||
|
||||
/* Send on a release pair to the the original
|
||||
* widget to convince it to release its grab. We need to
|
||||
|
||||
+29
-10
@@ -692,6 +692,12 @@ gtk_entry_class_init (GtkEntryClass *class)
|
||||
GTK_TYPE_ENUM, GTK_DELETE_CHARS,
|
||||
GTK_TYPE_INT, -1);
|
||||
|
||||
/* Make this do the same as Backspace, to help with mis-typing */
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_BackSpace, GDK_SHIFT_MASK,
|
||||
"delete_from_cursor", 2,
|
||||
GTK_TYPE_ENUM, GTK_DELETE_CHARS,
|
||||
GTK_TYPE_INT, -1);
|
||||
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_Delete, GDK_CONTROL_MASK,
|
||||
"delete_from_cursor", 2,
|
||||
GTK_TYPE_ENUM, GTK_DELETE_WORD_ENDS,
|
||||
@@ -711,13 +717,18 @@ gtk_entry_class_init (GtkEntryClass *class)
|
||||
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_x, GDK_CONTROL_MASK,
|
||||
"cut_clipboard", 0);
|
||||
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_c, GDK_CONTROL_MASK,
|
||||
"copy_clipboard", 0);
|
||||
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_v, GDK_CONTROL_MASK,
|
||||
"paste_clipboard", 0);
|
||||
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_Delete, GDK_SHIFT_MASK,
|
||||
"cut_clipboard", 0);
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_Insert, GDK_CONTROL_MASK,
|
||||
"copy_clipboard", 0);
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_Insert, GDK_SHIFT_MASK,
|
||||
"paste_clipboard", 0);
|
||||
|
||||
/* Overwrite */
|
||||
gtk_binding_entry_add_signal (binding_set, GDK_Insert, 0,
|
||||
"toggle_overwrite", 0);
|
||||
@@ -2358,11 +2369,11 @@ update_im_cursor_location (GtkEntry *entry)
|
||||
GdkRectangle area;
|
||||
gint strong_x;
|
||||
gint strong_xoffset;
|
||||
gint x, y, area_width, area_height;
|
||||
gint area_width, area_height;
|
||||
|
||||
gtk_entry_get_cursor_locations (entry, CURSOR_STANDARD, &strong_x, NULL)
|
||||
;
|
||||
get_text_area_size (entry, &x, &y, &area_width, &area_height);
|
||||
get_text_area_size (entry, NULL, NULL, &area_width, &area_height);
|
||||
|
||||
strong_xoffset = strong_x - entry->scroll_offset;
|
||||
if (strong_xoffset < 0)
|
||||
@@ -2373,9 +2384,9 @@ update_im_cursor_location (GtkEntry *entry)
|
||||
{
|
||||
strong_xoffset = area_width;
|
||||
}
|
||||
area.x = x + strong_xoffset;
|
||||
area.y = y + area_height;
|
||||
area.width = area_width;
|
||||
area.x = strong_xoffset;
|
||||
area.y = 0;
|
||||
area.width = 0;
|
||||
area.height = area_height;
|
||||
|
||||
gtk_im_context_set_cursor_location (entry->im_context, &area);
|
||||
@@ -3989,7 +4000,8 @@ gtk_entry_drag_motion (GtkWidget *widget,
|
||||
old_position = entry->dnd_position;
|
||||
new_position = gtk_entry_find_position (entry, x + entry->scroll_offset);
|
||||
|
||||
if (entry->editable)
|
||||
if (entry->editable &&
|
||||
gtk_drag_dest_find_target (widget, context, NULL) != GDK_NONE)
|
||||
{
|
||||
source_widget = gtk_drag_get_source_widget (context);
|
||||
suggested_action = context->suggested_action;
|
||||
@@ -4018,7 +4030,7 @@ gtk_entry_drag_motion (GtkWidget *widget,
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Entry not editable */
|
||||
/* Entry not editable, or no text */
|
||||
suggested_action = 0;
|
||||
entry->dnd_position = -1;
|
||||
}
|
||||
@@ -4088,7 +4100,7 @@ gtk_entry_drag_data_get (GtkWidget *widget,
|
||||
|
||||
if (gtk_editable_get_selection_bounds (editable, &sel_start, &sel_end))
|
||||
{
|
||||
gchar *str = gtk_editable_get_chars (editable, sel_start, sel_end);
|
||||
gchar *str = gtk_entry_get_public_chars (GTK_ENTRY (widget), sel_start, sel_end);
|
||||
|
||||
gtk_selection_data_set_text (selection_data, str, -1);
|
||||
|
||||
@@ -4182,6 +4194,13 @@ blink_cb (gpointer data)
|
||||
GDK_THREADS_ENTER ();
|
||||
|
||||
entry = GTK_ENTRY (data);
|
||||
|
||||
if (!GTK_WIDGET_HAS_FOCUS (entry))
|
||||
{
|
||||
g_warning ("GtkEntry - did not receive focus-out-event. If you\n"
|
||||
"connect a handler to this signal, it must return\n"
|
||||
"FALSE so the entry gets the event as well");
|
||||
}
|
||||
|
||||
g_assert (GTK_WIDGET_HAS_FOCUS (entry));
|
||||
g_assert (entry->selection_bound == entry->current_pos);
|
||||
|
||||
+37
-9
@@ -938,13 +938,21 @@ filenames_dropped (GtkWidget *widget,
|
||||
else
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
gchar *filename_utf8;
|
||||
|
||||
/* Conversion back to UTF-8 should always succeed for the result
|
||||
* of g_filename_from_uri()
|
||||
*/
|
||||
filename_utf8 = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
|
||||
g_assert (filename_utf8);
|
||||
|
||||
dialog = gtk_message_dialog_new (GTK_WINDOW (widget),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_QUESTION,
|
||||
GTK_BUTTONS_YES_NO,
|
||||
_("The file \"%s\" resides on another machine (called %s) and may not be available to this program.\n"
|
||||
"Are you sure that you want to select it?"), filename, hostname);
|
||||
"Are you sure that you want to select it?"), filename_utf8, hostname);
|
||||
g_free (filename_utf8);
|
||||
|
||||
g_object_set_data_full (G_OBJECT (dialog), "gtk-fs-dnd-filename", g_strdup (filename), g_free);
|
||||
|
||||
@@ -1008,8 +1016,10 @@ filenames_drag_get (GtkWidget *widget,
|
||||
}
|
||||
else
|
||||
{
|
||||
g_print ("Setting text: '%s'\n", file);
|
||||
gtk_selection_data_set_text (selection_data, file, -1);
|
||||
gchar *filename_utf8 = g_filename_to_utf8 (file, -1, NULL, NULL, NULL);
|
||||
g_assert (filename_utf8);
|
||||
gtk_selection_data_set_text (selection_data, filename_utf8, -1);
|
||||
g_free (filename_utf8);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1134,27 +1144,43 @@ gtk_file_selection_hide_fileop_buttons (GtkFileSelection *filesel)
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* gtk_file_selection_set_filename:
|
||||
* @filesel: a #GtkFileSelection.
|
||||
* @filename: a string to set as the default file name.
|
||||
*
|
||||
* Sets a default path for the file requestor. If @filename includes a
|
||||
* directory path, then the requestor will open with that path as its
|
||||
* current working directory.
|
||||
*
|
||||
* The encoding of @filename is the on-disk encoding, which
|
||||
* may not be UTF-8. See g_filename_from_utf8().
|
||||
**/
|
||||
void
|
||||
gtk_file_selection_set_filename (GtkFileSelection *filesel,
|
||||
const gchar *filename)
|
||||
{
|
||||
gchar *buf;
|
||||
const char *name, *last_slash;
|
||||
char *filename_utf8;
|
||||
|
||||
g_return_if_fail (GTK_IS_FILE_SELECTION (filesel));
|
||||
g_return_if_fail (filename != NULL);
|
||||
|
||||
last_slash = strrchr (filename, G_DIR_SEPARATOR);
|
||||
filename_utf8 = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
|
||||
g_return_if_fail (filename_utf8 != NULL);
|
||||
|
||||
last_slash = strrchr (filename_utf8, G_DIR_SEPARATOR);
|
||||
|
||||
if (!last_slash)
|
||||
{
|
||||
buf = g_strdup ("");
|
||||
name = filename;
|
||||
name = filename_utf8;
|
||||
}
|
||||
else
|
||||
{
|
||||
buf = g_strdup (filename);
|
||||
buf[last_slash - filename + 1] = 0;
|
||||
buf = g_strdup (filename_utf8);
|
||||
buf[last_slash - filename_utf8 + 1] = 0;
|
||||
name = last_slash + 1;
|
||||
}
|
||||
|
||||
@@ -1164,14 +1190,16 @@ gtk_file_selection_set_filename (GtkFileSelection *filesel,
|
||||
gtk_entry_set_text (GTK_ENTRY (filesel->selection_entry), name);
|
||||
g_free (buf);
|
||||
g_object_notify (G_OBJECT (filesel), "filename");
|
||||
|
||||
g_free (filename_utf8);
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_file_selection_get_filename:
|
||||
* @filesel: a #GtkFileSelection
|
||||
*
|
||||
* This function returns the selected filename in encoding of
|
||||
* g_filename_from_utf8(), which may or may not be the same as that
|
||||
* This function returns the selected filename in the on-disk encoding
|
||||
* (see g_filename_from_utf8()), which may or may not be the same as that
|
||||
* used by GTK+ (UTF-8). To convert to UTF-8, call g_filename_to_utf8().
|
||||
* The returned string points to a statically allocated buffer and
|
||||
* should be copied if you plan to keep it around.
|
||||
|
||||
+17
-1
@@ -136,6 +136,9 @@ static void gtk_font_selection_show_available_sizes (GtkFontSelection *fs,
|
||||
gboolean first_time);
|
||||
static void gtk_font_selection_size_activate (GtkWidget *w,
|
||||
gpointer data);
|
||||
static gboolean gtk_font_selection_size_focus_out (GtkWidget *w,
|
||||
GdkEventFocus *event,
|
||||
gpointer data);
|
||||
static void gtk_font_selection_select_size (GtkTreeSelection *selection,
|
||||
gpointer data);
|
||||
|
||||
@@ -317,6 +320,9 @@ gtk_font_selection_init (GtkFontSelection *fontsel)
|
||||
gtk_signal_connect (GTK_OBJECT (fontsel->size_entry), "activate",
|
||||
(GtkSignalFunc) gtk_font_selection_size_activate,
|
||||
fontsel);
|
||||
gtk_signal_connect_after (GTK_OBJECT (fontsel->size_entry), "focus_out_event",
|
||||
(GtkSignalFunc) gtk_font_selection_size_focus_out,
|
||||
fontsel);
|
||||
|
||||
font_label = gtk_label_new_with_mnemonic (_("_Family:"));
|
||||
gtk_misc_set_alignment (GTK_MISC (font_label), 0.0, 0.5);
|
||||
@@ -616,7 +622,7 @@ cmp_families (const void *a, const void *b)
|
||||
const char *a_name = pango_font_family_get_name (*(PangoFontFamily **)a);
|
||||
const char *b_name = pango_font_family_get_name (*(PangoFontFamily **)b);
|
||||
|
||||
return strcmp (a_name, b_name);
|
||||
return g_utf8_collate (a_name, b_name);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -941,6 +947,16 @@ gtk_font_selection_size_activate (GtkWidget *w,
|
||||
gtk_font_selection_set_size (fontsel, new_size);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_font_selection_size_focus_out (GtkWidget *w,
|
||||
GdkEventFocus *event,
|
||||
gpointer data)
|
||||
{
|
||||
gtk_font_selection_size_activate (w, data);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* This is called when a size is selected in the list. */
|
||||
static void
|
||||
gtk_font_selection_select_size (GtkTreeSelection *selection,
|
||||
|
||||
@@ -1211,7 +1211,7 @@ gtk_icon_set_get_type (void)
|
||||
static GType our_type = 0;
|
||||
|
||||
if (our_type == 0)
|
||||
our_type = g_boxed_type_register_static ("GtkTypeIconSet",
|
||||
our_type = g_boxed_type_register_static ("GtkIconSet",
|
||||
(GBoxedCopyFunc) gtk_icon_set_ref,
|
||||
(GBoxedFreeFunc) gtk_icon_set_unref);
|
||||
|
||||
@@ -1694,7 +1694,7 @@ gtk_icon_source_get_type (void)
|
||||
static GType our_type = 0;
|
||||
|
||||
if (our_type == 0)
|
||||
our_type = g_boxed_type_register_static ("GtkTypeIconSource",
|
||||
our_type = g_boxed_type_register_static ("GtkIconSource",
|
||||
(GBoxedCopyFunc) gtk_icon_source_copy,
|
||||
(GBoxedFreeFunc) gtk_icon_source_free);
|
||||
|
||||
|
||||
+18
-14
@@ -71,12 +71,14 @@ static guint16 gtk_compose_seqs[] = {
|
||||
GDK_dead_acute, GDK_space, 0, 0, 0, 0x0027, /* APOSTROPHE */
|
||||
GDK_dead_acute, GDK_apostrophe, 0, 0, 0, 0x00B4, /* ACUTE_ACCENT */
|
||||
GDK_dead_acute, GDK_A, 0, 0, 0, 0x00C1, /* LATIN_CAPITAL_LETTER_A_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_C, 0, 0, 0, 0x00C7, /* LATIN_CAPITAL_LETTER_C_WITH_CEDILLA */
|
||||
GDK_dead_acute, GDK_E, 0, 0, 0, 0x00C9, /* LATIN_CAPITAL_LETTER_E_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_I, 0, 0, 0, 0x00CD, /* LATIN_CAPITAL_LETTER_I_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_O, 0, 0, 0, 0x00D3, /* LATIN_CAPITAL_LETTER_O_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_U, 0, 0, 0, 0x00DA, /* LATIN_CAPITAL_LETTER_U_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_Y, 0, 0, 0, 0x00DD, /* LATIN_CAPITAL_LETTER_Y_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_a, 0, 0, 0, 0x00E1, /* LATIN_SMALL_LETTER_A_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_c, 0, 0, 0, 0x00E7, /* LATIN_SMALL_LETTER_C_WITH_CEDILLA */
|
||||
GDK_dead_acute, GDK_e, 0, 0, 0, 0x00E9, /* LATIN_SMALL_LETTER_E_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_i, 0, 0, 0, 0x00ED, /* LATIN_SMALL_LETTER_I_WITH_ACUTE */
|
||||
GDK_dead_acute, GDK_o, 0, 0, 0, 0x00F3, /* LATIN_SMALL_LETTER_O_WITH_ACUTE */
|
||||
@@ -1101,10 +1103,9 @@ canonical_hex_keyval (GdkEventKey *event)
|
||||
if (keyval)
|
||||
return keyval;
|
||||
else
|
||||
/* just return the keyval unchanged, we couldn't figure
|
||||
* out a way to make it a hex digit
|
||||
/* No way to make it a hex digit
|
||||
*/
|
||||
return event->keyval;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -1114,6 +1115,8 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
|
||||
GtkIMContextSimple *context_simple = GTK_IM_CONTEXT_SIMPLE (context);
|
||||
GSList *tmp_list;
|
||||
int n_compose = 0;
|
||||
gboolean have_hex_mods;
|
||||
guint hex_keyval;
|
||||
int i;
|
||||
|
||||
if (event->type == GDK_KEY_RELEASE)
|
||||
@@ -1142,30 +1145,31 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
|
||||
if (event->keyval == gtk_compose_ignore[i])
|
||||
return FALSE;
|
||||
|
||||
have_hex_mods = (event->state & (ISO_14755_MOD_MASK)) == ISO_14755_MOD_MASK;
|
||||
hex_keyval = canonical_hex_keyval (event);
|
||||
|
||||
while (context_simple->compose_buffer[n_compose] != 0)
|
||||
n_compose++;
|
||||
|
||||
/* First key in sequence; decide if it's a 14755 hex sequence */
|
||||
if (n_compose == 0)
|
||||
context_simple->in_hex_sequence =
|
||||
((event->state & (ISO_14755_MOD_MASK)) == ISO_14755_MOD_MASK);
|
||||
|
||||
/* If we are already in a non-hex sequence, or
|
||||
* the 14755 modifiers are not held down, filter all
|
||||
* this keystroke is not 14755 modifiers + hex digit, don't filter
|
||||
* key events with accelerator modifiers held down.
|
||||
*/
|
||||
if (!context_simple->in_hex_sequence ||
|
||||
((event->state & (ISO_14755_MOD_MASK)) != ISO_14755_MOD_MASK))
|
||||
if ((n_compose > 0 && !context_simple->in_hex_sequence) || !have_hex_mods || !hex_keyval)
|
||||
{
|
||||
if (event->state &
|
||||
(gtk_accelerator_get_default_mod_mask () & ~GDK_SHIFT_MASK))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* First key in sequence; decide if it's a 14755 hex sequence */
|
||||
if (n_compose == 0)
|
||||
context_simple->in_hex_sequence = have_hex_mods;
|
||||
|
||||
/* Then, check for compose sequences
|
||||
*/
|
||||
if (context_simple->in_hex_sequence)
|
||||
context_simple->compose_buffer[n_compose++] = canonical_hex_keyval (event);
|
||||
context_simple->compose_buffer[n_compose++] = hex_keyval ? hex_keyval : event->keyval;
|
||||
else
|
||||
context_simple->compose_buffer[n_compose++] = event->keyval;
|
||||
|
||||
@@ -1174,7 +1178,7 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
|
||||
if (context_simple->in_hex_sequence)
|
||||
{
|
||||
/* If the modifiers are still held down, consider the sequence again */
|
||||
if ((event->state & (ISO_14755_MOD_MASK)) == ISO_14755_MOD_MASK)
|
||||
if (have_hex_mods)
|
||||
{
|
||||
/* space ends the sequence, and we eat the space */
|
||||
if (n_compose > 1 &&
|
||||
@@ -1226,7 +1230,7 @@ gtk_im_context_simple_get_preedit_string (GtkIMContext *context,
|
||||
PangoAttrList **attrs,
|
||||
gint *cursor_pos)
|
||||
{
|
||||
char outbuf[25]; /* up to 4 hex digits */
|
||||
char outbuf[37]; /* up to 6 hex digits */
|
||||
int len = 0;
|
||||
|
||||
GtkIMContextSimple *context_simple = GTK_IM_CONTEXT_SIMPLE (context);
|
||||
|
||||
@@ -157,6 +157,8 @@ gtk_im_multicontext_set_slave (GtkIMMulticontext *multicontext,
|
||||
GtkIMContext *slave,
|
||||
gboolean finalizing)
|
||||
{
|
||||
gboolean need_preedit_changed = FALSE;
|
||||
|
||||
if (multicontext->slave)
|
||||
{
|
||||
if (!finalizing)
|
||||
@@ -179,7 +181,7 @@ gtk_im_multicontext_set_slave (GtkIMMulticontext *multicontext,
|
||||
multicontext->slave = NULL;
|
||||
|
||||
if (!finalizing)
|
||||
g_signal_emit_by_name (multicontext, "preedit_changed");
|
||||
need_preedit_changed = TRUE;
|
||||
}
|
||||
|
||||
multicontext->slave = slave;
|
||||
@@ -210,6 +212,9 @@ gtk_im_multicontext_set_slave (GtkIMMulticontext *multicontext,
|
||||
if (multicontext->client_window)
|
||||
gtk_im_context_set_client_window (slave, multicontext->client_window);
|
||||
}
|
||||
|
||||
if (need_preedit_changed)
|
||||
g_signal_emit_by_name (multicontext, "preedit_changed");
|
||||
}
|
||||
|
||||
static GtkIMContext *
|
||||
@@ -494,5 +499,7 @@ gtk_im_multicontext_append_menuitems (GtkIMMulticontext *context,
|
||||
gtk_widget_show (menuitem);
|
||||
gtk_menu_shell_append (menushell, menuitem);
|
||||
}
|
||||
|
||||
g_free (contexts);
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1443,6 +1443,7 @@ gtk_label_ensure_layout (GtkLabel *label)
|
||||
|
||||
pango_layout_set_width (label->layout, width);
|
||||
pango_layout_get_extents (label->layout, NULL, &logical_rect);
|
||||
width = logical_rect.width;
|
||||
height = logical_rect.height;
|
||||
|
||||
/* Unfortunately, the above may leave us with a very unbalanced looking paragraph,
|
||||
@@ -1461,7 +1462,7 @@ gtk_label_ensure_layout (GtkLabel *label)
|
||||
pango_layout_get_extents (label->layout, NULL, &logical_rect);
|
||||
|
||||
if (logical_rect.height <= height)
|
||||
width = perfect_width;
|
||||
width = logical_rect.width;
|
||||
else
|
||||
{
|
||||
gint mid_width = (perfect_width + width) / 2;
|
||||
@@ -1472,7 +1473,7 @@ gtk_label_ensure_layout (GtkLabel *label)
|
||||
pango_layout_get_extents (label->layout, NULL, &logical_rect);
|
||||
|
||||
if (logical_rect.height <= height)
|
||||
width = mid_width;
|
||||
width = logical_rect.width;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+28
-22
@@ -108,7 +108,8 @@ static void gtk_layout_style_set (GtkWidget *widget,
|
||||
GtkStyle *old_style);
|
||||
|
||||
static void gtk_layout_set_adjustment_upper (GtkAdjustment *adj,
|
||||
gdouble upper);
|
||||
gdouble upper,
|
||||
gboolean always_emit_changed);
|
||||
|
||||
static GtkWidgetClass *parent_class = NULL;
|
||||
|
||||
@@ -222,7 +223,7 @@ gtk_layout_set_adjustments (GtkLayout *layout,
|
||||
layout->hadjustment = hadj;
|
||||
gtk_object_ref (GTK_OBJECT (layout->hadjustment));
|
||||
gtk_object_sink (GTK_OBJECT (layout->hadjustment));
|
||||
gtk_layout_set_adjustment_upper (layout->hadjustment, layout->width);
|
||||
gtk_layout_set_adjustment_upper (layout->hadjustment, layout->width, FALSE);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (layout->hadjustment), "value_changed",
|
||||
(GtkSignalFunc) gtk_layout_adjustment_changed,
|
||||
@@ -235,7 +236,7 @@ gtk_layout_set_adjustments (GtkLayout *layout,
|
||||
layout->vadjustment = vadj;
|
||||
gtk_object_ref (GTK_OBJECT (layout->vadjustment));
|
||||
gtk_object_sink (GTK_OBJECT (layout->vadjustment));
|
||||
gtk_layout_set_adjustment_upper (layout->vadjustment, layout->height);
|
||||
gtk_layout_set_adjustment_upper (layout->vadjustment, layout->height, FALSE);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (layout->vadjustment), "value_changed",
|
||||
(GtkSignalFunc) gtk_layout_adjustment_changed,
|
||||
@@ -420,25 +421,30 @@ gtk_layout_move (GtkLayout *layout,
|
||||
|
||||
static void
|
||||
gtk_layout_set_adjustment_upper (GtkAdjustment *adj,
|
||||
gdouble upper)
|
||||
gdouble upper,
|
||||
gboolean always_emit_changed)
|
||||
{
|
||||
gboolean changed = FALSE;
|
||||
gboolean value_changed = FALSE;
|
||||
|
||||
gdouble min = MAX (0., upper - adj->page_size);
|
||||
|
||||
if (upper != adj->upper)
|
||||
{
|
||||
gdouble min = MAX (0., upper - adj->page_size);
|
||||
gboolean value_changed = FALSE;
|
||||
|
||||
adj->upper = upper;
|
||||
|
||||
if (adj->value > min)
|
||||
{
|
||||
adj->value = min;
|
||||
value_changed = TRUE;
|
||||
}
|
||||
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
|
||||
if (value_changed)
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed");
|
||||
changed = TRUE;
|
||||
}
|
||||
|
||||
if (adj->value > min)
|
||||
{
|
||||
adj->value = min;
|
||||
value_changed = TRUE;
|
||||
}
|
||||
|
||||
if (changed || always_emit_changed)
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (adj), "changed");
|
||||
if (value_changed)
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (adj), "value_changed");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -475,9 +481,9 @@ gtk_layout_set_size (GtkLayout *layout,
|
||||
g_object_thaw_notify (G_OBJECT (layout));
|
||||
|
||||
if (layout->hadjustment)
|
||||
gtk_layout_set_adjustment_upper (layout->hadjustment, layout->width);
|
||||
gtk_layout_set_adjustment_upper (layout->hadjustment, layout->width, FALSE);
|
||||
if (layout->vadjustment)
|
||||
gtk_layout_set_adjustment_upper (layout->vadjustment, layout->height);
|
||||
gtk_layout_set_adjustment_upper (layout->vadjustment, layout->height, FALSE);
|
||||
|
||||
if (GTK_WIDGET_REALIZED (layout))
|
||||
{
|
||||
@@ -1002,14 +1008,14 @@ gtk_layout_size_allocate (GtkWidget *widget,
|
||||
layout->hadjustment->page_size = allocation->width;
|
||||
layout->hadjustment->page_increment = allocation->width * 0.9;
|
||||
layout->hadjustment->lower = 0;
|
||||
layout->hadjustment->upper = MAX (allocation->width, layout->width);
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (layout->hadjustment), "changed");
|
||||
/* set_adjustment_upper() emits ::changed */
|
||||
gtk_layout_set_adjustment_upper (layout->hadjustment, MAX (allocation->width, layout->width), TRUE);
|
||||
|
||||
layout->vadjustment->page_size = allocation->height;
|
||||
layout->vadjustment->page_increment = allocation->height * 0.9;
|
||||
layout->vadjustment->lower = 0;
|
||||
layout->vadjustment->upper = MAX (allocation->height, layout->height);
|
||||
gtk_signal_emit_by_name (GTK_OBJECT (layout->vadjustment), "changed");
|
||||
gtk_layout_set_adjustment_upper (layout->vadjustment, MAX (allocation->height, layout->height), TRUE);
|
||||
}
|
||||
|
||||
static gint
|
||||
|
||||
+32
-8
@@ -49,6 +49,7 @@
|
||||
#include <pango/pango-utils.h> /* For pango_split_file_list */
|
||||
|
||||
#include "gtkaccelmap.h"
|
||||
#include "gtkbox.h"
|
||||
#include "gtkdnd.h"
|
||||
#include "gtkversion.h"
|
||||
#include "gtkmain.h"
|
||||
@@ -183,8 +184,6 @@ gtk_check_version (guint required_major,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#undef gtk_init_check
|
||||
|
||||
/* This checks to see if the process is running suid or sgid
|
||||
* at the current time. If so, we don't allow GTK+ to be initialized.
|
||||
* This is meant to be a mild check - we only error out if we
|
||||
@@ -446,9 +445,9 @@ _gtk_find_module (const gchar *name,
|
||||
g_free(tmp_name);
|
||||
}
|
||||
|
||||
g_strfreev (paths);
|
||||
|
||||
found:
|
||||
g_strfreev (paths);
|
||||
return module_name;
|
||||
}
|
||||
|
||||
@@ -551,6 +550,8 @@ gtk_disable_setlocale (void)
|
||||
do_setlocale = FALSE;
|
||||
}
|
||||
|
||||
#undef gtk_init_check
|
||||
|
||||
gboolean
|
||||
gtk_init_check (int *argc,
|
||||
char ***argv)
|
||||
@@ -790,23 +791,46 @@ check_sizeof_GtkWindow (size_t sizeof_GtkWindow)
|
||||
"The code using GTK+ thinks GtkWindow is of different\n"
|
||||
"size than it actually is in this build of GTK+.\n"
|
||||
"On Windows, this probably means that you have compiled\n"
|
||||
"your code with gcc without the -fnative-struct switch.");
|
||||
"your code with gcc without the -fnative-struct switch,\n"
|
||||
"or that you are using an unsupported compiler.");
|
||||
}
|
||||
|
||||
/* In GTK+ 2.0 the GtkWindow struct actually is the same size in
|
||||
* gcc-compiled code on Win32 whether compiled with -fnative-struct or
|
||||
* not. Unfortunately this wan't noticed until after GTK+ 2.0.1. So,
|
||||
* from GTK+ 2.0.2 on, check some other struct, too, where the use of
|
||||
* -fnative-struct still matters. GtkBox is one such.
|
||||
*/
|
||||
static void
|
||||
check_sizeof_GtkBox (size_t sizeof_GtkBox)
|
||||
{
|
||||
if (sizeof_GtkBox != sizeof (GtkBox))
|
||||
g_error ("Incompatible build!\n"
|
||||
"The code using GTK+ thinks GtkBox is of different\n"
|
||||
"size than it actually is in this build of GTK+.\n"
|
||||
"On Windows, this probably means that you have compiled\n"
|
||||
"your code with gcc without the -fnative-struct switch,\n"
|
||||
"or that you are using an unsupported compiler.");
|
||||
}
|
||||
|
||||
/* These two functions might get more checks added later, thus pass
|
||||
* in the number of extra args.
|
||||
*/
|
||||
void
|
||||
gtk_init_abi_check (int *argc, char ***argv, int num_checks, size_t sizeof_GtkWindow)
|
||||
gtk_init_abi_check (int *argc, char ***argv, int num_checks, size_t sizeof_GtkWindow, size_t sizeof_GtkBox)
|
||||
{
|
||||
check_sizeof_GtkWindow (sizeof_GtkWindow);
|
||||
if (num_checks >= 2)
|
||||
check_sizeof_GtkBox (sizeof_GtkBox);
|
||||
gtk_init (argc, argv);
|
||||
}
|
||||
|
||||
gboolean
|
||||
gtk_init_check_abi_check (int *argc, char ***argv, int num_checks, size_t sizeof_GtkWindow)
|
||||
gtk_init_check_abi_check (int *argc, char ***argv, int num_checks, size_t sizeof_GtkWindow, size_t sizeof_GtkBox)
|
||||
{
|
||||
check_sizeof_GtkWindow (sizeof_GtkWindow);
|
||||
if (num_checks >= 2)
|
||||
check_sizeof_GtkBox (sizeof_GtkBox);
|
||||
return gtk_init_check (argc, argv);
|
||||
}
|
||||
|
||||
@@ -1029,8 +1053,8 @@ rewrite_events_translate (GdkWindow *old_window,
|
||||
gdk_window_get_origin (old_window, &old_origin_x, &old_origin_y);
|
||||
gdk_window_get_origin (new_window, &new_origin_x, &new_origin_y);
|
||||
|
||||
*x += new_origin_x - old_origin_x;
|
||||
*y += new_origin_y - old_origin_y;
|
||||
*x += old_origin_x - new_origin_x;
|
||||
*y += old_origin_y - new_origin_y;
|
||||
}
|
||||
|
||||
static GdkEvent *
|
||||
|
||||
+6
-4
@@ -98,14 +98,16 @@ gboolean gtk_init_check (int *argc,
|
||||
void gtk_init_abi_check (int *argc,
|
||||
char ***argv,
|
||||
int num_checks,
|
||||
size_t sizeof_GtkWindow);
|
||||
size_t sizeof_GtkWindow,
|
||||
size_t sizeof_GtkBox);
|
||||
gboolean gtk_init_check_abi_check (int *argc,
|
||||
char ***argv,
|
||||
int num_checks,
|
||||
size_t sizeof_GtkWindow);
|
||||
size_t sizeof_GtkWindow,
|
||||
size_t sizeof_GtkBox);
|
||||
|
||||
#define gtk_init(argc, argv) gtk_init_abi_check (argc, argv, 1, sizeof (GtkWindow))
|
||||
#define gtk_init_check(argc, argv) gtk_init_check_abi_check (argc, argv, 1, sizeof (GtkWindow))
|
||||
#define gtk_init(argc, argv) gtk_init_abi_check (argc, argv, 2, sizeof (GtkWindow), sizeof (GtkBox))
|
||||
#define gtk_init_check(argc, argv) gtk_init_check_abi_check (argc, argv, 2, sizeof (GtkWindow), sizeof (GtkBox))
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ BOOLEAN:BOXED
|
||||
BOOLEAN:BOXED,BOXED
|
||||
BOOLEAN:ENUM
|
||||
BOOLEAN:ENUM,INT
|
||||
BOOLEAN:OBJECT,UINT,UINT
|
||||
BOOLEAN:OBJECT,UINT,FLAGS
|
||||
BOOLEAN:OBJECT,INT,INT,UINT
|
||||
BOOLEAN:OBJECT,STRING,STRING,BOXED
|
||||
BOOLEAN:OBJECT,BOXED,BOXED
|
||||
@@ -81,8 +81,8 @@ VOID:POINTER,UINT
|
||||
VOID:STRING
|
||||
VOID:STRING,STRING
|
||||
VOID:STRING,INT,POINTER
|
||||
VOID:UINT,FLAGS,BOXED
|
||||
VOID:UINT,UINT
|
||||
VOID:UINT,UINT,BOXED
|
||||
VOID:UINT,STRING
|
||||
VOID:UINT,BOXED,UINT,FLAGS,FLAGS
|
||||
VOID:UINT,OBJECT,UINT,FLAGS,FLAGS
|
||||
|
||||
+20
-37
@@ -113,6 +113,9 @@ static void gtk_menu_handle_scrolling (GtkMenu *menu,
|
||||
gboolean enter);
|
||||
static void gtk_menu_set_tearoff_hints (GtkMenu *menu,
|
||||
gint width);
|
||||
static void gtk_menu_style_set (GtkWidget *widget,
|
||||
GtkStyle *previous_style);
|
||||
|
||||
|
||||
static void gtk_menu_stop_navigating_submenu (GtkMenu *menu);
|
||||
static gboolean gtk_menu_stop_navigating_submenu_cb (gpointer user_data);
|
||||
@@ -206,6 +209,7 @@ gtk_menu_class_init (GtkMenuClass *class)
|
||||
widget_class->hide_all = gtk_menu_hide_all;
|
||||
widget_class->enter_notify_event = gtk_menu_enter_notify;
|
||||
widget_class->leave_notify_event = gtk_menu_leave_notify;
|
||||
widget_class->style_set = gtk_menu_style_set;
|
||||
|
||||
container_class->remove = gtk_menu_remove;
|
||||
|
||||
@@ -709,6 +713,7 @@ gtk_menu_popup (GtkMenu *menu,
|
||||
* try again.
|
||||
*/
|
||||
menu_shell->parent_menu_shell = NULL;
|
||||
menu_grab_transfer_window_destroy (menu);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1112,13 +1117,6 @@ gtk_menu_set_tearoff_state (GtkMenu *menu,
|
||||
|
||||
gtk_widget_realize (menu->tearoff_window);
|
||||
|
||||
gdk_window_set_decorations (menu->tearoff_window->window,
|
||||
GDK_DECOR_ALL |
|
||||
GDK_DECOR_RESIZEH |
|
||||
GDK_DECOR_MINIMIZE |
|
||||
GDK_DECOR_MAXIMIZE);
|
||||
gtk_window_set_resizable (GTK_WINDOW (menu->tearoff_window), FALSE);
|
||||
|
||||
menu->tearoff_hbox = gtk_hbox_new (FALSE, FALSE);
|
||||
gtk_container_add (GTK_CONTAINER (menu->tearoff_window), menu->tearoff_hbox);
|
||||
|
||||
@@ -1248,6 +1246,20 @@ gtk_menu_reorder_child (GtkMenu *menu,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_menu_style_set (GtkWidget *widget,
|
||||
GtkStyle *previous_style)
|
||||
{
|
||||
if (GTK_WIDGET_REALIZED (widget))
|
||||
{
|
||||
GtkMenu *menu = GTK_MENU (widget);
|
||||
|
||||
gtk_style_set_background (widget->style, menu->bin_window, GTK_STATE_NORMAL);
|
||||
gtk_style_set_background (widget->style, menu->view_window, GTK_STATE_NORMAL);
|
||||
gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_menu_realize (GtkWidget *widget)
|
||||
{
|
||||
@@ -1667,35 +1679,6 @@ gtk_menu_paint (GtkWidget *widget,
|
||||
MENU_SCROLL_ARROW_HEIGHT - 2 * border_y - 2);
|
||||
}
|
||||
}
|
||||
else if (event->window == menu->view_window)
|
||||
{
|
||||
gint menu_height;
|
||||
gint top_pos;
|
||||
|
||||
if (menu->scroll_offset < 0)
|
||||
gtk_paint_box (widget->style,
|
||||
menu->view_window,
|
||||
GTK_STATE_ACTIVE,
|
||||
GTK_SHADOW_IN,
|
||||
NULL, widget, "menu",
|
||||
0, 0,
|
||||
-1,
|
||||
-menu->scroll_offset);
|
||||
|
||||
menu_height = widget->requisition.height - 2*border_y;
|
||||
top_pos = height - 2*border_y - (menu->upper_arrow_visible ? MENU_SCROLL_ARROW_HEIGHT : 0);
|
||||
|
||||
if (menu_height - menu->scroll_offset < top_pos)
|
||||
gtk_paint_box (widget->style,
|
||||
menu->view_window,
|
||||
GTK_STATE_ACTIVE,
|
||||
GTK_SHADOW_IN,
|
||||
NULL, widget, "menu",
|
||||
0,
|
||||
menu_height - menu->scroll_offset,
|
||||
-1,
|
||||
top_pos - (menu_height - menu->scroll_offset));
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@@ -1814,7 +1797,7 @@ gtk_menu_key_press (GtkWidget *widget,
|
||||
menu_shell->active_menu_item &&
|
||||
GTK_BIN (menu_shell->active_menu_item)->child && /* no seperators */
|
||||
GTK_MENU_ITEM (menu_shell->active_menu_item)->submenu == NULL && /* no submenus */
|
||||
(delete || gtk_accelerator_valid (event->keyval, event->state)))
|
||||
(delete || gtk_accelerator_valid (accel_key, accel_mods)))
|
||||
{
|
||||
GtkWidget *menu_item = menu_shell->active_menu_item;
|
||||
gboolean replace_accels = TRUE;
|
||||
|
||||
+37
-4
@@ -372,6 +372,34 @@ get_menu_bars (GtkWindow *window)
|
||||
return g_object_get_data (G_OBJECT (window), "gtk-menu-bar-list");
|
||||
}
|
||||
|
||||
static GList *
|
||||
get_viewable_menu_bars (GtkWindow *window)
|
||||
{
|
||||
GList *menu_bars;
|
||||
GList *viewable_menu_bars = NULL;
|
||||
|
||||
for (menu_bars = get_menu_bars (window);
|
||||
menu_bars;
|
||||
menu_bars = menu_bars->next)
|
||||
{
|
||||
GtkWidget *widget = menu_bars->data;
|
||||
gboolean viewable = TRUE;
|
||||
|
||||
while (widget)
|
||||
{
|
||||
if (!GTK_WIDGET_MAPPED (widget))
|
||||
viewable = FALSE;
|
||||
|
||||
widget = widget->parent;
|
||||
}
|
||||
|
||||
if (viewable)
|
||||
viewable_menu_bars = g_list_prepend (viewable_menu_bars, menu_bars->data);
|
||||
}
|
||||
|
||||
return g_list_reverse (viewable_menu_bars);
|
||||
}
|
||||
|
||||
static void
|
||||
set_menu_bars (GtkWindow *window,
|
||||
GList *menubars)
|
||||
@@ -410,10 +438,13 @@ window_key_press_handler (GtkWidget *widget,
|
||||
((event->state & gtk_accelerator_get_default_mod_mask ()) ==
|
||||
(mods & gtk_accelerator_get_default_mod_mask ())))
|
||||
{
|
||||
GList *menubars = get_menu_bars (GTK_WINDOW (widget));
|
||||
GList *tmp_menubars = get_viewable_menu_bars (GTK_WINDOW (widget));
|
||||
GList *menubars;
|
||||
|
||||
menubars = _gtk_container_focus_sort (GTK_CONTAINER (widget), menubars,
|
||||
menubars = _gtk_container_focus_sort (GTK_CONTAINER (widget), tmp_menubars,
|
||||
GTK_DIR_TAB_FORWARD, NULL);
|
||||
g_list_free (tmp_menubars);
|
||||
|
||||
if (menubars)
|
||||
{
|
||||
GtkMenuShell *menu_shell = GTK_MENU_SHELL (menubars->data);
|
||||
@@ -504,12 +535,14 @@ _gtk_menu_bar_cycle_focus (GtkMenuBar *menubar,
|
||||
|
||||
if (GTK_WIDGET_TOPLEVEL (toplevel))
|
||||
{
|
||||
GList *menubars = get_menu_bars (GTK_WINDOW (toplevel));
|
||||
GList *tmp_menubars = get_viewable_menu_bars (GTK_WINDOW (toplevel));
|
||||
GList *menubars;
|
||||
GList *current;
|
||||
GtkMenuBar *new;
|
||||
|
||||
menubars = _gtk_container_focus_sort (GTK_CONTAINER (toplevel), menubars,
|
||||
menubars = _gtk_container_focus_sort (GTK_CONTAINER (toplevel), tmp_menubars,
|
||||
dir, GTK_WIDGET (menubar));
|
||||
g_list_free (tmp_menubars);
|
||||
|
||||
if (menubars)
|
||||
{
|
||||
|
||||
+8
-2
@@ -488,6 +488,8 @@ gtk_menu_item_size_allocate (GtkWidget *widget,
|
||||
|
||||
if (bin->child)
|
||||
{
|
||||
GtkRequisition child_requisition;
|
||||
|
||||
child_allocation.x = (GTK_CONTAINER (widget)->border_width +
|
||||
widget->style->xthickness +
|
||||
BORDER_SPACING);
|
||||
@@ -499,9 +501,13 @@ gtk_menu_item_size_allocate (GtkWidget *widget,
|
||||
child_allocation.width -= GTK_MENU_ITEM (widget)->toggle_size;
|
||||
child_allocation.x += widget->allocation.x;
|
||||
child_allocation.y += widget->allocation.y;
|
||||
|
||||
|
||||
gtk_widget_get_child_requisition (bin->child, &child_requisition);
|
||||
if (menu_item->submenu && menu_item->show_submenu_indicator)
|
||||
child_allocation.width -= child_allocation.height;
|
||||
child_allocation.width -= child_requisition.height;
|
||||
|
||||
if (child_allocation.width < 1)
|
||||
child_allocation.width = 1;
|
||||
|
||||
gtk_widget_size_allocate (bin->child, &child_allocation);
|
||||
}
|
||||
|
||||
@@ -872,6 +872,9 @@ gtk_menu_shell_real_select_item (GtkMenuShell *menu_shell,
|
||||
{
|
||||
gtk_menu_shell_deselect (menu_shell);
|
||||
|
||||
if (!_gtk_menu_item_is_selectable (menu_item))
|
||||
return;
|
||||
|
||||
menu_shell->active_menu_item = menu_item;
|
||||
_gtk_menu_item_set_placement (GTK_MENU_ITEM (menu_shell->active_menu_item),
|
||||
GTK_MENU_SHELL_GET_CLASS (menu_shell)->submenu_placement);
|
||||
|
||||
+1
-1
@@ -4252,7 +4252,7 @@ gtk_notebook_prev_page (GtkNotebook *notebook)
|
||||
* @show_border: %TRUE if a bevel should be drawn around the notebook.
|
||||
*
|
||||
* Sets whether a bevel will be drawn around the notebook pages.
|
||||
* This is only has an effect when the tabs are not shown.
|
||||
* This only has a visual effect when the tabs are not shown.
|
||||
* See gtk_notebook_set_show_tabs().
|
||||
**/
|
||||
void
|
||||
|
||||
+6
-1
@@ -295,7 +295,12 @@ gtk_option_menu_remove_menu (GtkOptionMenu *option_menu)
|
||||
g_return_if_fail (GTK_IS_OPTION_MENU (option_menu));
|
||||
|
||||
if (option_menu->menu)
|
||||
gtk_menu_detach (GTK_MENU (option_menu->menu));
|
||||
{
|
||||
if (GTK_MENU_SHELL (option_menu->menu)->active)
|
||||
g_signal_emit_by_name (option_menu->menu, "cancel", 0);
|
||||
|
||||
gtk_menu_detach (GTK_MENU (option_menu->menu));
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
+42
-38
@@ -48,6 +48,8 @@ static void gtk_plug_size_allocate (GtkWidget *widget,
|
||||
GtkAllocation *allocation);
|
||||
static gboolean gtk_plug_key_press_event (GtkWidget *widget,
|
||||
GdkEventKey *event);
|
||||
static gboolean gtk_plug_focus_event (GtkWidget *widget,
|
||||
GdkEventFocus *event);
|
||||
static void gtk_plug_set_focus (GtkWindow *window,
|
||||
GtkWidget *focus);
|
||||
static gboolean gtk_plug_focus (GtkWidget *widget,
|
||||
@@ -123,6 +125,8 @@ gtk_plug_class_init (GtkPlugClass *class)
|
||||
widget_class->realize = gtk_plug_realize;
|
||||
widget_class->unrealize = gtk_plug_unrealize;
|
||||
widget_class->key_press_event = gtk_plug_key_press_event;
|
||||
widget_class->focus_in_event = gtk_plug_focus_event;
|
||||
widget_class->focus_out_event = gtk_plug_focus_event;
|
||||
|
||||
widget_class->show = gtk_plug_show;
|
||||
widget_class->hide = gtk_plug_hide;
|
||||
@@ -217,6 +221,7 @@ _gtk_plug_add_to_socket (GtkPlug *plug,
|
||||
GtkSocket *socket)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
gint w, h;
|
||||
|
||||
g_return_if_fail (GTK_IS_PLUG (plug));
|
||||
g_return_if_fail (GTK_IS_SOCKET (socket));
|
||||
@@ -232,7 +237,10 @@ _gtk_plug_add_to_socket (GtkPlug *plug,
|
||||
plug->socket_window = GTK_WIDGET (socket)->window;
|
||||
|
||||
if (GTK_WIDGET_REALIZED (widget))
|
||||
gdk_window_reparent (widget->window, plug->socket_window, 0, 0);
|
||||
{
|
||||
gdk_drawable_get_size (GDK_DRAWABLE (widget->window), &w, &h);
|
||||
gdk_window_reparent (widget->window, plug->socket_window, -w, -h);
|
||||
}
|
||||
|
||||
gtk_widget_set_parent (widget, GTK_WIDGET (socket));
|
||||
|
||||
@@ -274,7 +282,9 @@ _gtk_plug_remove_from_socket (GtkPlug *plug,
|
||||
GTK_PRIVATE_UNSET_FLAG (plug, GTK_IN_REPARENT);
|
||||
|
||||
socket->plug_widget = NULL;
|
||||
g_object_unref (socket->plug_window);
|
||||
socket->plug_window = NULL;
|
||||
|
||||
socket->same_app = FALSE;
|
||||
|
||||
plug->same_app = FALSE;
|
||||
@@ -587,6 +597,17 @@ gtk_plug_key_press_event (GtkWidget *widget,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtk_plug_focus_event (GtkWidget *widget,
|
||||
GdkEventFocus *event)
|
||||
{
|
||||
/* We eat focus-in events and focus-out events, since they
|
||||
* can be generated by something like a keyboard grab on
|
||||
* a child of the plug.
|
||||
*/
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_plug_set_focus (GtkWindow *window,
|
||||
GtkWidget *focus)
|
||||
@@ -600,23 +621,6 @@ gtk_plug_set_focus (GtkWindow *window,
|
||||
|
||||
if (focus && !window->has_focus)
|
||||
{
|
||||
#if 0
|
||||
XEvent xevent;
|
||||
|
||||
xevent.xfocus.type = FocusIn;
|
||||
xevent.xfocus.display = GDK_WINDOW_XDISPLAY (GTK_WIDGET(plug)->window);
|
||||
xevent.xfocus.window = GDK_WINDOW_XWINDOW (plug->socket_window);
|
||||
xevent.xfocus.mode = EMBEDDED_APP_WANTS_FOCUS;
|
||||
xevent.xfocus.detail = FALSE; /* Don't force */
|
||||
|
||||
gdk_error_trap_push ();
|
||||
XSendEvent (GDK_DISPLAY (),
|
||||
GDK_WINDOW_XWINDOW (plug->socket_window),
|
||||
False, NoEventMask, &xevent);
|
||||
gdk_flush ();
|
||||
gdk_error_trap_pop ();
|
||||
#endif
|
||||
|
||||
send_xembed_message (plug, XEMBED_REQUEST_FOCUS, 0, 0, 0,
|
||||
gtk_get_current_event_time ());
|
||||
}
|
||||
@@ -781,19 +785,6 @@ gtk_plug_focus (GtkWidget *widget,
|
||||
|
||||
send_xembed_message (plug, message, 0, 0, 0,
|
||||
gtk_get_current_event_time ());
|
||||
|
||||
#if 0
|
||||
gtk_window_set_focus (GTK_WINDOW (widget), NULL);
|
||||
|
||||
gdk_error_trap_push ();
|
||||
XSetInputFocus (GDK_DISPLAY (),
|
||||
GDK_WINDOW_XWINDOW (plug->socket_window),
|
||||
RevertToParent, event->time);
|
||||
gdk_flush ();
|
||||
gdk_error_trap_pop ();
|
||||
|
||||
gtk_plug_forward_key_press (plug, event);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -831,6 +822,9 @@ send_xembed_message (GtkPlug *plug,
|
||||
{
|
||||
XEvent xevent;
|
||||
|
||||
GTK_NOTE(PLUGSOCKET,
|
||||
g_message ("GtkPlug: Sending XEMBED message of type %ld", message));
|
||||
|
||||
xevent.xclient.window = GDK_WINDOW_XWINDOW (plug->socket_window);
|
||||
xevent.xclient.type = ClientMessage;
|
||||
xevent.xclient.message_type = gdk_x11_get_xatom_by_name ("_XEMBED");
|
||||
@@ -922,7 +916,7 @@ handle_xembed_message (GtkPlug *plug,
|
||||
guint32 time)
|
||||
{
|
||||
GTK_NOTE (PLUGSOCKET,
|
||||
g_message ("Message of type %ld received", message));
|
||||
g_message ("GtkPlug: Message of type %ld received", message));
|
||||
|
||||
switch (message)
|
||||
{
|
||||
@@ -959,15 +953,24 @@ handle_xembed_message (GtkPlug *plug,
|
||||
|
||||
case XEMBED_FOCUS_OUT:
|
||||
{
|
||||
GtkWidget *widget = GTK_WIDGET (plug);
|
||||
GdkEvent event;
|
||||
|
||||
event.focus_change.type = GDK_FOCUS_CHANGE;
|
||||
event.focus_change.window = GTK_WIDGET (plug)->window;
|
||||
event.focus_change.window = widget->window;
|
||||
event.focus_change.send_event = TRUE;
|
||||
event.focus_change.in = (message == XEMBED_FOCUS_IN);
|
||||
|
||||
gtk_widget_event (GTK_WIDGET (plug), &event);
|
||||
|
||||
if (message == XEMBED_FOCUS_IN)
|
||||
{
|
||||
event.focus_change.in = TRUE;
|
||||
GTK_WIDGET_CLASS (parent_class)->focus_in_event (widget, (GdkEventFocus *)&event);
|
||||
}
|
||||
else
|
||||
{
|
||||
event.focus_change.in = FALSE;
|
||||
GTK_WIDGET_CLASS (parent_class)->focus_out_event (widget, (GdkEventFocus *)&event);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1072,7 +1075,7 @@ gtk_plug_filter_func (GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data)
|
||||
}
|
||||
}
|
||||
else
|
||||
break;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (xre->parent != GDK_ROOT_WINDOW ())
|
||||
@@ -1107,7 +1110,8 @@ gtk_plug_filter_func (GdkXEvent *gdk_xevent, GdkEvent *event, gpointer data)
|
||||
if (!was_embedded)
|
||||
g_signal_emit (G_OBJECT (plug), plug_signals[EMBEDDED], 0);
|
||||
}
|
||||
|
||||
|
||||
done:
|
||||
g_object_unref (plug);
|
||||
|
||||
break;
|
||||
|
||||
+14
-3
@@ -413,6 +413,9 @@ gtk_range_init (GtkRange *range)
|
||||
range->need_recalc = TRUE;
|
||||
range->round_digits = -1;
|
||||
range->layout = g_new0 (GtkRangeLayout, 1);
|
||||
range->layout->mouse_location = MOUSE_OUTSIDE;
|
||||
range->layout->mouse_x = -1;
|
||||
range->layout->mouse_y = -1;
|
||||
range->layout->grab_location = MOUSE_OUTSIDE;
|
||||
range->layout->grab_button = 0;
|
||||
range->timer = NULL;
|
||||
@@ -2041,8 +2044,12 @@ gtk_range_calc_layout (GtkRange *range,
|
||||
/* slider height is the fraction (page_size /
|
||||
* total_adjustment_range) times the trough height in pixels
|
||||
*/
|
||||
height = ((bottom - top) * (range->adjustment->page_size /
|
||||
(range->adjustment->upper - range->adjustment->lower)));
|
||||
|
||||
if (range->adjustment->upper - range->adjustment->lower != 0)
|
||||
height = ((bottom - top) * (range->adjustment->page_size /
|
||||
(range->adjustment->upper - range->adjustment->lower)));
|
||||
else
|
||||
height = range->min_slider_size;
|
||||
|
||||
if (height < range->min_slider_size ||
|
||||
range->slider_size_fixed)
|
||||
@@ -2177,8 +2184,12 @@ gtk_range_calc_layout (GtkRange *range,
|
||||
/* slider width is the fraction (page_size /
|
||||
* total_adjustment_range) times the trough width in pixels
|
||||
*/
|
||||
width = ((right - left) * (range->adjustment->page_size /
|
||||
|
||||
if (range->adjustment->upper - range->adjustment->lower != 0)
|
||||
width = ((right - left) * (range->adjustment->page_size /
|
||||
(range->adjustment->upper - range->adjustment->lower)));
|
||||
else
|
||||
width = range->min_slider_size;
|
||||
|
||||
if (width < range->min_slider_size ||
|
||||
range->slider_size_fixed)
|
||||
|
||||
+35
-9
@@ -482,8 +482,10 @@ _gtk_rbtree_remove (GtkRBTree *tree)
|
||||
|
||||
gint height = tree->root->offset;
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
#endif
|
||||
|
||||
tmp_tree = tree->parent_tree;
|
||||
tmp_node = tree->parent_node;
|
||||
@@ -513,8 +515,10 @@ _gtk_rbtree_remove (GtkRBTree *tree)
|
||||
tmp_node = tree->parent_node;
|
||||
_gtk_rbtree_free (tree);
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
_gtk_rbtree_test (G_STRLOC, tmp_tree);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -529,12 +533,14 @@ _gtk_rbtree_insert_after (GtkRBTree *tree,
|
||||
GtkRBNode *tmp_node;
|
||||
GtkRBTree *tmp_tree;
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
{
|
||||
g_print ("\n\n_gtk_rbtree_insert_after: 0x%x\n", (gint) current);
|
||||
g_print ("\n\n_gtk_rbtree_insert_after: %p\n", current);
|
||||
_gtk_rbtree_debug_spew (tree);
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
}
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
|
||||
if (current != NULL && current->right != tree->nil)
|
||||
{
|
||||
@@ -588,6 +594,7 @@ _gtk_rbtree_insert_after (GtkRBTree *tree,
|
||||
|
||||
_gtk_rbtree_insert_fixup (tree, node);
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
{
|
||||
g_print ("_gtk_rbtree_insert_after finished...\n");
|
||||
@@ -595,6 +602,7 @@ _gtk_rbtree_insert_after (GtkRBTree *tree,
|
||||
g_print ("\n\n");
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
}
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
|
||||
return node;
|
||||
}
|
||||
@@ -609,14 +617,16 @@ _gtk_rbtree_insert_before (GtkRBTree *tree,
|
||||
gboolean left = TRUE;
|
||||
GtkRBNode *tmp_node;
|
||||
GtkRBTree *tmp_tree;
|
||||
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
{
|
||||
g_print ("\n\n_gtk_rbtree_insert_before: 0x%x\n", (gint) current);
|
||||
g_print ("\n\n_gtk_rbtree_insert_before: %p\n", current);
|
||||
_gtk_rbtree_debug_spew (tree);
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
}
|
||||
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
|
||||
if (current != NULL && current->left != tree->nil)
|
||||
{
|
||||
current = current->left;
|
||||
@@ -670,6 +680,7 @@ _gtk_rbtree_insert_before (GtkRBTree *tree,
|
||||
|
||||
_gtk_rbtree_insert_fixup (tree, node);
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
{
|
||||
g_print ("_gtk_rbtree_insert_before finished...\n");
|
||||
@@ -677,7 +688,8 @@ _gtk_rbtree_insert_before (GtkRBTree *tree,
|
||||
g_print ("\n\n");
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
}
|
||||
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
@@ -725,8 +737,10 @@ _gtk_rbtree_node_set_height (GtkRBTree *tree,
|
||||
tmp_tree = tmp_tree->parent_tree;
|
||||
}
|
||||
}
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1030,6 +1044,8 @@ _gtk_rbtree_reorder (GtkRBTree *tree,
|
||||
node = _gtk_rbtree_next (tree, node);
|
||||
}
|
||||
gtk_rbtree_reorder_fixup (tree, tree->root);
|
||||
|
||||
g_array_free (array, TRUE);
|
||||
}
|
||||
|
||||
|
||||
@@ -1196,20 +1212,26 @@ _gtk_rbtree_remove_node (GtkRBTree *tree,
|
||||
g_return_if_fail (tree != NULL);
|
||||
g_return_if_fail (node != NULL);
|
||||
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
{
|
||||
g_print ("\n\n_gtk_rbtree_remove_node: 0x%x\n", (gint) node);
|
||||
g_print ("\n\n_gtk_rbtree_remove_node: %p\n", node);
|
||||
_gtk_rbtree_debug_spew (tree);
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
}
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
|
||||
/* make sure we're deleting a node that's actually in the tree */
|
||||
for (x = node; x->parent != tree->nil; x = x->parent)
|
||||
;
|
||||
g_return_if_fail (x == tree->root);
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
|
||||
#endif
|
||||
|
||||
if (node->left == tree->nil || node->right == tree->nil)
|
||||
{
|
||||
y = node;
|
||||
@@ -1335,6 +1357,7 @@ _gtk_rbtree_remove_node (GtkRBTree *tree,
|
||||
_gtk_rbtree_remove_node_fixup (tree, x);
|
||||
_gtk_rbnode_free (y);
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if (gtk_debug_flags & GTK_DEBUG_TREE)
|
||||
{
|
||||
g_print ("_gtk_rbtree_remove_node finished...\n");
|
||||
@@ -1342,6 +1365,7 @@ _gtk_rbtree_remove_node (GtkRBTree *tree,
|
||||
g_print ("\n\n");
|
||||
_gtk_rbtree_test (G_STRLOC, tree);
|
||||
}
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
}
|
||||
|
||||
GtkRBNode *
|
||||
@@ -1585,6 +1609,7 @@ void _fixup_parity (GtkRBTree *tree,
|
||||
((node->right != tree->nil) ? node->right->parity : 0);
|
||||
}
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
static guint
|
||||
get_parity (GtkRBNode *node)
|
||||
{
|
||||
@@ -1785,8 +1810,8 @@ _gtk_rbtree_debug_spew_helper (GtkRBTree *tree,
|
||||
for (i = 0; i < depth; i++)
|
||||
g_print ("\t");
|
||||
|
||||
g_print ("(0x%x - %s) (Offset %d) (Parity %d) (Validity %d%d%d)\n",
|
||||
(gint) node,
|
||||
g_print ("(%p - %s) (Offset %d) (Parity %d) (Validity %d%d%d)\n",
|
||||
node,
|
||||
(GTK_RBNODE_GET_COLOR (node) == GTK_RBNODE_BLACK)?"BLACK":" RED ",
|
||||
node->offset,
|
||||
node->parity?1:0,
|
||||
@@ -1819,3 +1844,4 @@ _gtk_rbtree_debug_spew (GtkRBTree *tree)
|
||||
else
|
||||
_gtk_rbtree_debug_spew_helper (tree, tree->root, 0);
|
||||
}
|
||||
#endif /* G_ENABLE_DEBUG */
|
||||
|
||||
+2
-1
@@ -171,10 +171,11 @@ void _gtk_rbtree_prev_full (GtkRBTree *tree,
|
||||
gint _gtk_rbtree_get_depth (GtkRBTree *tree);
|
||||
|
||||
/* This func checks the integrity of the tree */
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
void _gtk_rbtree_test (const gchar *where,
|
||||
GtkRBTree *tree);
|
||||
void _gtk_rbtree_debug_spew (GtkRBTree *tree);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
+16
-4
@@ -299,9 +299,9 @@ gtk_rc_make_default_dir (const gchar *type)
|
||||
|
||||
var = g_getenv ("GTK_EXE_PREFIX");
|
||||
if (var)
|
||||
path = g_build_filename (var, "lib", "gtk-2.0", type, GTK_BINARY_VERSION, NULL);
|
||||
path = g_build_filename (var, "lib", "gtk-2.0", GTK_BINARY_VERSION, type, NULL);
|
||||
else
|
||||
path = g_build_filename (GTK_LIBDIR, "gtk-2.0", type, GTK_BINARY_VERSION, NULL);
|
||||
path = g_build_filename (GTK_LIBDIR, "gtk-2.0", GTK_BINARY_VERSION, type, NULL);
|
||||
|
||||
return path;
|
||||
}
|
||||
@@ -367,6 +367,16 @@ gtk_rc_get_theme_dir (void)
|
||||
return path;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_rc_get_module_dir:
|
||||
*
|
||||
* Returns a directory in which GTK+ looks for theme engines.
|
||||
* For full information about the search for theme engines,
|
||||
* see the docs for <envar>GTK_PATH</envar> in
|
||||
* <xref linkend="gtk-running">.
|
||||
*
|
||||
* return value: the directory. (Must be freed with g_free())
|
||||
**/
|
||||
gchar *
|
||||
gtk_rc_get_module_dir (void)
|
||||
{
|
||||
@@ -1604,7 +1614,9 @@ gtk_rc_get_style (GtkWidget *widget)
|
||||
* gtk_rc_get_style_by_paths:
|
||||
* @settings: a #GtkSettings object
|
||||
* @widget_path: the widget path to use when looking up the style, or %NULL
|
||||
* if no matching against the widget path should be done
|
||||
* @class_path: the class path to use when looking up the style, or %NULL
|
||||
* if no matching against the class path should be done.
|
||||
* @type: a type that will be used along with parent types of this type
|
||||
* when matching against class styles, or #G_TYPE_NONE
|
||||
*
|
||||
@@ -1645,7 +1657,7 @@ gtk_rc_get_style_by_paths (GtkSettings *settings,
|
||||
|
||||
context = gtk_rc_context_get (settings);
|
||||
|
||||
if (context->rc_sets_widget)
|
||||
if (widget_path && context->rc_sets_widget)
|
||||
{
|
||||
gchar *path_reversed;
|
||||
guint path_length;
|
||||
@@ -1658,7 +1670,7 @@ gtk_rc_get_style_by_paths (GtkSettings *settings,
|
||||
g_free (path_reversed);
|
||||
}
|
||||
|
||||
if (context->rc_sets_widget_class)
|
||||
if (class_path && context->rc_sets_widget_class)
|
||||
{
|
||||
gchar *path_reversed;
|
||||
guint path_length;
|
||||
|
||||
@@ -324,8 +324,6 @@ gtk_scrolled_window_init (GtkScrolledWindow *scrolled_window)
|
||||
{
|
||||
GTK_WIDGET_SET_FLAGS (scrolled_window, GTK_NO_WINDOW | GTK_CAN_FOCUS);
|
||||
|
||||
gtk_container_set_resize_mode (GTK_CONTAINER (scrolled_window), GTK_RESIZE_QUEUE);
|
||||
|
||||
scrolled_window->hscrollbar = NULL;
|
||||
scrolled_window->vscrollbar = NULL;
|
||||
scrolled_window->hscrollbar_policy = GTK_POLICY_ALWAYS;
|
||||
|
||||
+1
-1
@@ -1825,7 +1825,7 @@ gtk_selection_data_get_type (void)
|
||||
static GType our_type = 0;
|
||||
|
||||
if (our_type == 0)
|
||||
our_type = g_boxed_type_register_static ("GtkTypeSelectionData",
|
||||
our_type = g_boxed_type_register_static ("GtkSelectionData",
|
||||
(GBoxedCopyFunc) gtk_selection_data_copy,
|
||||
(GBoxedFreeFunc) gtk_selection_data_free);
|
||||
|
||||
|
||||
+14
-10
@@ -62,27 +62,31 @@ G_BEGIN_DECLS
|
||||
#define gtk_signal_handler_unblock(object,handler_id) \
|
||||
g_signal_handler_unblock ((object), (handler_id))
|
||||
#define gtk_signal_disconnect_by_func(object,func,data) \
|
||||
gtk_signal_compat_matched ((object), (func), (data), G_SIGNAL_MATCH_FUNC | \
|
||||
G_SIGNAL_MATCH_DATA, 0)
|
||||
gtk_signal_compat_matched ((object), (func), (data), \
|
||||
(GSignalMatchType)(G_SIGNAL_MATCH_FUNC | \
|
||||
G_SIGNAL_MATCH_DATA), 0)
|
||||
#define gtk_signal_disconnect_by_data(object,data) \
|
||||
gtk_signal_compat_matched ((object), 0, (data), G_SIGNAL_MATCH_DATA, 0)
|
||||
#define gtk_signal_handler_block_by_func(object,func,data) \
|
||||
gtk_signal_compat_matched ((object), (func), (data), G_SIGNAL_MATCH_FUNC | \
|
||||
G_SIGNAL_MATCH_DATA, 1)
|
||||
gtk_signal_compat_matched ((object), (func), (data), \
|
||||
(GSignalMatchType)(G_SIGNAL_MATCH_FUNC | \
|
||||
G_SIGNAL_MATCH_DATA), 1)
|
||||
#define gtk_signal_handler_block_by_data(object,data) \
|
||||
gtk_signal_compat_matched ((object), 0, (data), G_SIGNAL_MATCH_DATA, 1)
|
||||
#define gtk_signal_handler_unblock_by_func(object,func,data) \
|
||||
gtk_signal_compat_matched ((object), (func), (data), G_SIGNAL_MATCH_FUNC | \
|
||||
G_SIGNAL_MATCH_DATA, 2)
|
||||
gtk_signal_compat_matched ((object), (func), (data), \
|
||||
(GSignalMatchType)(G_SIGNAL_MATCH_FUNC | \
|
||||
G_SIGNAL_MATCH_DATA), 2)
|
||||
#define gtk_signal_handler_unblock_by_data(object,data) \
|
||||
gtk_signal_compat_matched ((object), 0, (data), G_SIGNAL_MATCH_DATA, 2)
|
||||
#define gtk_signal_handler_pending(object,signal_id,may_be_blocked) \
|
||||
g_signal_has_handler_pending ((object), (signal_id), 0, (may_be_blocked))
|
||||
#define gtk_signal_handler_pending_by_func(object,signal_id,may_be_blocked,func,data) \
|
||||
(g_signal_handler_find ((object), G_SIGNAL_MATCH_ID | \
|
||||
G_SIGNAL_MATCH_FUNC | \
|
||||
G_SIGNAL_MATCH_DATA | \
|
||||
((may_be_blocked) ? 0 : G_SIGNAL_MATCH_UNBLOCKED),\
|
||||
(g_signal_handler_find ((object), \
|
||||
(GSignalMatchType)(G_SIGNAL_MATCH_ID | \
|
||||
G_SIGNAL_MATCH_FUNC | \
|
||||
G_SIGNAL_MATCH_DATA | \
|
||||
((may_be_blocked) ? 0 : G_SIGNAL_MATCH_UNBLOCKED)),\
|
||||
(signal_id), 0, 0, (func), (data)) != 0)
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user