diff -Nru devhelp-3.8.0/NEWS devhelp-3.8.2/NEWS --- devhelp-3.8.0/NEWS 2013-03-25 14:37:16.000000000 +0000 +++ devhelp-3.8.2/NEWS 2013-05-15 11:07:17.000000000 +0000 @@ -1,4 +1,32 @@ ============= +Version 3.8.2 +============= + +Fixed bugs: + + - disconnect signals when preferences dialog is shutdown + +Updated translations: ru + +Many thanks to all contributors: Dmitriy S. Seregin, Aleksander Morgado + + +============= +Version 3.8.1 +============= + +Fixed bugs: + + - #697026, font size is too small by default and don't match system font + size + - #697541, changing preferences crashes/fails after closing one of + multiple windows + +Many thanks to all contributors: Carlos Garcia Campos, Ignacio Casal +Quinteiro, Aleksander Morgado + + +============= Version 3.8.0 ============= diff -Nru devhelp-3.8.0/aclocal.m4 devhelp-3.8.2/aclocal.m4 --- devhelp-3.8.0/aclocal.m4 2013-03-25 14:35:51.000000000 +0000 +++ devhelp-3.8.2/aclocal.m4 2013-05-15 11:07:32.000000000 +0000 @@ -20,166 +20,6 @@ If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright © 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- -AC_DEFUN([PKG_PROG_PKG_CONFIG], -[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) -m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) -AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) -AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) -AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=m4_default([$1], [0.9.0]) - AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - PKG_CONFIG="" - fi -fi[]dnl -])# PKG_PROG_PKG_CONFIG - -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_EXISTS], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -if test -n "$PKG_CONFIG" && \ - AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then - m4_default([$2], [:]) -m4_ifvaln([$3], [else - $3])dnl -fi]) - -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- -m4_define([_PKG_CONFIG], -[if test -n "$$1"; then - pkg_cv_[]$1="$$1" - elif test -n "$PKG_CONFIG"; then - PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes ], - [pkg_failed=yes]) - else - pkg_failed=untried -fi[]dnl -])# _PKG_CONFIG - -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- -AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED - - -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- -AC_DEFUN([PKG_CHECK_MODULES], -[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl -AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl -AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl - -pkg_failed=no -AC_MSG_CHECKING([for $1]) - -_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) -_PKG_CONFIG([$1][_LIBS], [libs], [$2]) - -m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS -and $1[]_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details.]) - -if test $pkg_failed = yes; then - AC_MSG_RESULT([no]) - _PKG_SHORT_ERRORS_SUPPORTED - if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` - else - $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD - - m4_default([$4], [AC_MSG_ERROR( -[Package requirements ($2) were not met: - -$$1_PKG_ERRORS - -Consider adjusting the PKG_CONFIG_PATH environment variable if you -installed software in a non-standard prefix. - -_PKG_TEXT])[]dnl - ]) -elif test $pkg_failed = untried; then - AC_MSG_RESULT([no]) - m4_default([$4], [AC_MSG_FAILURE( -[The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -_PKG_TEXT - -To get pkg-config, see .])[]dnl - ]) -else - $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS - $1[]_LIBS=$pkg_cv_[]$1[]_LIBS - AC_MSG_RESULT([yes]) - $3 -fi[]dnl -])# PKG_CHECK_MODULES - # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # @@ -1443,6 +1283,166 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + dnl GNOME_COMPILE_WARNINGS dnl Turn on many useful compiler warnings and substitute the result into dnl WARN_CFLAGS diff -Nru devhelp-3.8.0/config.h.in devhelp-3.8.2/config.h.in --- devhelp-3.8.0/config.h.in 2013-03-25 14:35:53.000000000 +0000 +++ devhelp-3.8.2/config.h.in 2013-05-15 11:07:33.000000000 +0000 @@ -62,7 +62,10 @@ #undef HAVE_ZLIB_H /* Description */ -#undef LIBGD_MAIN_TOOLBAR +#undef LIBGD_HEADER_BAR + +/* Description */ +#undef LIBGD__HEADER_BUTTON /* Define to the sub-directory in which libtool stores uninstalled libraries. */ diff -Nru devhelp-3.8.0/configure devhelp-3.8.2/configure --- devhelp-3.8.0/configure 2013-03-25 14:35:52.000000000 +0000 +++ devhelp-3.8.2/configure 2013-05-15 11:07:33.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for Devhelp 3.8.0. +# Generated by GNU Autoconf 2.69 for Devhelp 3.8.2. # # Report bugs to . # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='Devhelp' PACKAGE_TARNAME='devhelp' -PACKAGE_VERSION='3.8.0' -PACKAGE_STRING='Devhelp 3.8.0' +PACKAGE_VERSION='3.8.2' +PACKAGE_STRING='Devhelp 3.8.2' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=devhelp' PACKAGE_URL='http://live.gnome.org/devhelp' @@ -642,20 +642,28 @@ LIBGD_GIR_INCLUDES LIBGD_LIBS LIBGD_CFLAGS +LIBGD__VIEW_COMMON_FALSE +LIBGD__VIEW_COMMON_TRUE +LIBGD__HEADER_BUTTON_FALSE +LIBGD__HEADER_BUTTON_TRUE LIBGD_GIR_FALSE LIBGD_GIR_TRUE LIBGD_VAPI_FALSE LIBGD_VAPI_TRUE LIBGD_TAGGED_ENTRY_FALSE LIBGD_TAGGED_ENTRY_TRUE +LIBGD_STACK_FALSE +LIBGD_STACK_TRUE +LIBGD_REVEALER_FALSE +LIBGD_REVEALER_TRUE LIBGD_NOTIFICATION_FALSE LIBGD_NOTIFICATION_TRUE LIBGD_MARGIN_CONTAINER_FALSE LIBGD_MARGIN_CONTAINER_TRUE +LIBGD_HEADER_BAR_FALSE +LIBGD_HEADER_BAR_TRUE LIBGD_MAIN_TOOLBAR_FALSE LIBGD_MAIN_TOOLBAR_TRUE -LIBGD__VIEW_COMMON_FALSE -LIBGD__VIEW_COMMON_TRUE LIBGD_MAIN_LIST_VIEW_FALSE LIBGD_MAIN_LIST_VIEW_TRUE LIBGD_MAIN_ICON_VIEW_FALSE @@ -1441,7 +1449,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Devhelp 3.8.0 to adapt to many kinds of systems. +\`configure' configures Devhelp 3.8.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1511,7 +1519,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Devhelp 3.8.0:";; + short | recursive ) echo "Configuration of Devhelp 3.8.2:";; esac cat <<\_ACEOF @@ -1646,7 +1654,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Devhelp configure 3.8.0 +Devhelp configure 3.8.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2015,7 +2023,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Devhelp $as_me 3.8.0, which was +It was created by Devhelp $as_me 3.8.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2849,7 +2857,7 @@ # Define the identity of the package. PACKAGE='devhelp' - VERSION='3.8.0' + VERSION='3.8.2' # Some tools Automake needs. @@ -15440,7 +15448,7 @@ - LIBGD_MODULES="gtk+-3.0 >= 3.6" + LIBGD_MODULES="gtk+-3.0 >= 3.7.10" LIBGD_GIR_INCLUDES="Gtk-3.0" LIBGD_SOURCES="" @@ -15497,29 +15505,30 @@ - # _view-common: + # main-toolbar: if false; then - LIBGD__VIEW_COMMON_TRUE= - LIBGD__VIEW_COMMON_FALSE='#' + LIBGD_MAIN_TOOLBAR_TRUE= + LIBGD_MAIN_TOOLBAR_FALSE='#' else - LIBGD__VIEW_COMMON_TRUE='#' - LIBGD__VIEW_COMMON_FALSE= + LIBGD_MAIN_TOOLBAR_TRUE='#' + LIBGD_MAIN_TOOLBAR_FALSE= fi - # main-toolbar: + # header-bar: if true; then - LIBGD_MAIN_TOOLBAR_TRUE= - LIBGD_MAIN_TOOLBAR_FALSE='#' + LIBGD_HEADER_BAR_TRUE= + LIBGD_HEADER_BAR_FALSE='#' else - LIBGD_MAIN_TOOLBAR_TRUE='#' - LIBGD_MAIN_TOOLBAR_FALSE= + LIBGD_HEADER_BAR_TRUE='#' + LIBGD_HEADER_BAR_FALSE= fi -$as_echo "#define LIBGD_MAIN_TOOLBAR 1" >>confdefs.h + +$as_echo "#define LIBGD_HEADER_BAR 1" >>confdefs.h @@ -15545,6 +15554,28 @@ + # revealer: + if false; then + LIBGD_REVEALER_TRUE= + LIBGD_REVEALER_FALSE='#' +else + LIBGD_REVEALER_TRUE='#' + LIBGD_REVEALER_FALSE= +fi + + + + # stack: + if false; then + LIBGD_STACK_TRUE= + LIBGD_STACK_FALSE='#' +else + LIBGD_STACK_TRUE='#' + LIBGD_STACK_FALSE= +fi + + + # tagged-entry: Gtk+ widget if false; then LIBGD_TAGGED_ENTRY_TRUE= @@ -15578,6 +15609,32 @@ + # _header-button: + if true; then + LIBGD__HEADER_BUTTON_TRUE= + LIBGD__HEADER_BUTTON_FALSE='#' +else + LIBGD__HEADER_BUTTON_TRUE='#' + LIBGD__HEADER_BUTTON_FALSE= +fi + + + +$as_echo "#define LIBGD__HEADER_BUTTON 1" >>confdefs.h + + + + # _view-common: + if false; then + LIBGD__VIEW_COMMON_TRUE= + LIBGD__VIEW_COMMON_FALSE='#' +else + LIBGD__VIEW_COMMON_TRUE='#' + LIBGD__VIEW_COMMON_FALSE= +fi + + + pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGD" >&5 @@ -15829,14 +15886,14 @@ as_fn_error $? "conditional \"LIBGD_MAIN_LIST_VIEW\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -if test -z "${LIBGD__VIEW_COMMON_TRUE}" && test -z "${LIBGD__VIEW_COMMON_FALSE}"; then - as_fn_error $? "conditional \"LIBGD__VIEW_COMMON\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi if test -z "${LIBGD_MAIN_TOOLBAR_TRUE}" && test -z "${LIBGD_MAIN_TOOLBAR_FALSE}"; then as_fn_error $? "conditional \"LIBGD_MAIN_TOOLBAR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${LIBGD_HEADER_BAR_TRUE}" && test -z "${LIBGD_HEADER_BAR_FALSE}"; then + as_fn_error $? "conditional \"LIBGD_HEADER_BAR\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${LIBGD_MARGIN_CONTAINER_TRUE}" && test -z "${LIBGD_MARGIN_CONTAINER_FALSE}"; then as_fn_error $? "conditional \"LIBGD_MARGIN_CONTAINER\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -15845,6 +15902,14 @@ as_fn_error $? "conditional \"LIBGD_NOTIFICATION\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${LIBGD_REVEALER_TRUE}" && test -z "${LIBGD_REVEALER_FALSE}"; then + as_fn_error $? "conditional \"LIBGD_REVEALER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${LIBGD_STACK_TRUE}" && test -z "${LIBGD_STACK_FALSE}"; then + as_fn_error $? "conditional \"LIBGD_STACK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${LIBGD_TAGGED_ENTRY_TRUE}" && test -z "${LIBGD_TAGGED_ENTRY_FALSE}"; then as_fn_error $? "conditional \"LIBGD_TAGGED_ENTRY\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -15857,6 +15922,14 @@ as_fn_error $? "conditional \"LIBGD_GIR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${LIBGD__HEADER_BUTTON_TRUE}" && test -z "${LIBGD__HEADER_BUTTON_FALSE}"; then + as_fn_error $? "conditional \"LIBGD__HEADER_BUTTON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${LIBGD__VIEW_COMMON_TRUE}" && test -z "${LIBGD__VIEW_COMMON_FALSE}"; then + as_fn_error $? "conditional \"LIBGD__VIEW_COMMON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -16254,7 +16327,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Devhelp $as_me 3.8.0, which was +This file was extended by Devhelp $as_me 3.8.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16321,7 +16394,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -Devhelp config.status 3.8.0 +Devhelp config.status 3.8.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru devhelp-3.8.0/configure.ac devhelp-3.8.2/configure.ac --- devhelp-3.8.0/configure.ac 2013-03-25 14:35:42.000000000 +0000 +++ devhelp-3.8.2/configure.ac 2013-05-15 11:05:20.000000000 +0000 @@ -1,6 +1,6 @@ AC_PREREQ([2.64]) AC_INIT([Devhelp], - [3.8.0], + [3.8.2], [http://bugzilla.gnome.org/enter_bug.cgi?product=devhelp], [devhelp], [http://live.gnome.org/devhelp]) @@ -108,7 +108,7 @@ AM_PATH_PYTHON([2.3],[],[no]) LIBGD_INIT([ - main-toolbar + header-bar static ]) diff -Nru devhelp-3.8.0/data/devhelp.desktop.in devhelp-3.8.2/data/devhelp.desktop.in --- devhelp-3.8.0/data/devhelp.desktop.in 2013-03-25 14:36:02.000000000 +0000 +++ devhelp-3.8.2/data/devhelp.desktop.in 2013-05-15 11:07:51.000000000 +0000 @@ -12,4 +12,4 @@ X-GNOME-Bugzilla-Bugzilla=GNOME X-GNOME-Bugzilla-Product=devhelp X-GNOME-Bugzilla-Component=General -X-GNOME-Bugzilla-Version=3.8.0 +X-GNOME-Bugzilla-Version=3.8.2 diff -Nru devhelp-3.8.0/debian/changelog devhelp-3.8.2/debian/changelog --- devhelp-3.8.0/debian/changelog 2013-04-01 12:47:03.000000000 +0000 +++ devhelp-3.8.2/debian/changelog 2013-05-31 06:00:47.000000000 +0000 @@ -1,10 +1,19 @@ -devhelp (3.8.0-1ubuntu1~raring1) raring; urgency=low +devhelp (3.8.2-0ubuntu1~raring1) raring; urgency=medium + * Copied from saucy + + -- Rico Tzschichholz Fri, 31 May 2013 08:00:29 +0200 + +devhelp (3.8.2-0ubuntu1) saucy; urgency=low + + * New upstream version + + [ Jeremy Bicha ] * Sync with Debian * debian/control.in, debian/rules: - Use dh_python3 - -- Jeremy Bicha Mon, 01 Apr 2013 08:45:34 -0400 + -- Sebastien Bacher Wed, 29 May 2013 13:30:46 +0200 devhelp (3.8.0-1) experimental; urgency=low diff -Nru devhelp-3.8.0/debian/control devhelp-3.8.2/debian/control --- devhelp-3.8.0/debian/control 2013-04-01 12:47:05.000000000 +0000 +++ devhelp-3.8.2/debian/control 2013-05-31 06:00:51.000000000 +0000 @@ -7,7 +7,7 @@ Priority: optional Maintainer: Ubuntu Developers XSBC-Original-Maintainer: Debian GNOME Maintainers -Uploaders: Debian GNOME Maintainers , Emilio Pozuelo Monfort , Frederic Peters , Jeremy Bicha , Michael Biebl +Uploaders: Debian GNOME Maintainers , Emilio Pozuelo Monfort , Frederic Peters , Michael Biebl Homepage: http://live.gnome.org/devhelp Build-Depends: cdbs, debhelper (>= 8), diff -Nru devhelp-3.8.0/libgd/Makefile.am devhelp-3.8.2/libgd/Makefile.am --- devhelp-3.8.0/libgd/Makefile.am 2013-03-25 14:35:45.000000000 +0000 +++ devhelp-3.8.2/libgd/Makefile.am 2013-04-17 07:27:09.000000000 +0000 @@ -13,6 +13,8 @@ $(LIBGD_CFLAGS) \ $(NULL) +noinst_PROGRAMS = + if LIBGD_STATIC noinst_LTLIBRARIES = libgd.la else @@ -92,6 +94,35 @@ EXTRA_DIST += $(main_toolbar_sources) endif +if LIBGD_HEADER_BAR +header_bar_sources = \ + libgd/gd-header-bar.c \ + libgd/gd-header-bar.h \ + $(NULL) + +nodist_libgd_la_SOURCES += $(header_bar_sources) +EXTRA_DIST += $(header_bar_sources) + +noinst_PROGRAMS += test-header-bar +test_header_bar_SOURCES = \ + test-header-bar.c \ + $(NULL) +test_header_bar_LDADD = \ + $(LIBGD_LIBS) \ + libgd.la \ + $(NULL) +endif + +if LIBGD__HEADER_BUTTON +header_button_sources = \ + libgd/gd-header-button.c \ + libgd/gd-header-button.h \ + $(NULL) + +nodist_libgd_la_SOURCES += $(header_button_sources) +EXTRA_DIST += $(header_button_sources) +endif + if LIBGD_MARGIN_CONTAINER margin_container_sources = \ libgd/gd-margin-container.c \ @@ -112,6 +143,46 @@ EXTRA_DIST += $(notification_sources) endif +if LIBGD_REVEALER +revealer_sources = \ + libgd/gd-revealer.c \ + libgd/gd-revealer.h \ + $(NULL) + +nodist_libgd_la_SOURCES += $(revealer_sources) +EXTRA_DIST += $(revealer_sources) + +noinst_PROGRAMS += test-revealer +test_revealer_SOURCES = \ + test-revealer.c \ + $(NULL) +test_revealer_LDADD = \ + $(LIBGD_LIBS) \ + libgd.la \ + $(NULL) +endif + +if LIBGD_STACK +stack_sources = \ + libgd/gd-stack.c \ + libgd/gd-stack.h \ + libgd/gd-stack-switcher.c \ + libgd/gd-stack-switcher.h \ + $(NULL) + +nodist_libgd_la_SOURCES += $(stack_sources) +EXTRA_DIST += $(stack_sources) + +noinst_PROGRAMS += test-stack +test_stack_SOURCES = \ + test-stack.c \ + $(NULL) +test_stack_LDADD = \ + $(LIBGD_LIBS) \ + libgd.la \ + $(NULL) +endif + if LIBGD_TAGGED_ENTRY tagged_entry_sources = \ libgd/gd-tagged-entry.c \ @@ -141,8 +212,9 @@ Gd_1_0_gir_FILES = $(nodist_libgd_la_SOURCES) if LIBGD_STATIC -noinst_DATA += $(builddir)/Gd-1.0.gir -MAINTAINERCLEANFILES += $(builddir)/Gd-1.0.gir +noinst_DATA += $(srcdir)/Gd-1.0.gir +EXTRA_DIST += $(srcdir)/Gd-1.0.gir +MAINTAINERCLEANFILES += $(srcdir)/Gd-1.0.gir else girdir= $(pkgdatadir)/gir-1.0 typelibdir= $(pkglibdir)/girepository-1.0 @@ -157,11 +229,10 @@ if LIBGD_VAPI VAPIS = $(srcdir)/gd-1.0.vapi -$(srcdir)/gd-1.0.vapi: $(builddir)/Gd-1.0.gir +$(srcdir)/gd-1.0.vapi: $(srcdir)/Gd-1.0.gir $(AM_V_GEN)$(VAPIGEN) \ --library gd-1.0 \ --pkg gtk+-3.0 \ - -d $(srcdir) \ $< #This 'touch' is a workaround for vapigen not touching the dest file if #its content hasn't changed, which causes the rule to generate the .vapi diff -Nru devhelp-3.8.0/libgd/Makefile.in devhelp-3.8.2/libgd/Makefile.in --- devhelp-3.8.0/libgd/Makefile.in 2013-03-25 14:35:54.000000000 +0000 +++ devhelp-3.8.2/libgd/Makefile.in 2013-05-15 11:07:35.000000000 +0000 @@ -16,6 +16,7 @@ @SET_MAKE@ + VPATH = @srcdir@ am__make_dryrun = \ { \ @@ -52,6 +53,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ +noinst_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) @LIBGD_GTK_HACKS_TRUE@am__append_1 = $(gtk_hacks_sources) @LIBGD_GTK_HACKS_TRUE@am__append_2 = $(gtk_hacks_sources) @LIBGD__VIEW_COMMON_TRUE@am__append_3 = $(view_common_sources) @@ -64,18 +66,30 @@ @LIBGD_MAIN_VIEW_TRUE@am__append_10 = $(main_view_sources) @LIBGD_MAIN_TOOLBAR_TRUE@am__append_11 = $(main_toolbar_sources) @LIBGD_MAIN_TOOLBAR_TRUE@am__append_12 = $(main_toolbar_sources) -@LIBGD_MARGIN_CONTAINER_TRUE@am__append_13 = $(margin_container_sources) -@LIBGD_MARGIN_CONTAINER_TRUE@am__append_14 = $(margin_container_sources) -@LIBGD_NOTIFICATION_TRUE@am__append_15 = $(notification_sources) -@LIBGD_NOTIFICATION_TRUE@am__append_16 = $(notification_sources) -@LIBGD_TAGGED_ENTRY_TRUE@am__append_17 = $(tagged_entry_sources) -@LIBGD_TAGGED_ENTRY_TRUE@am__append_18 = $(tagged_entry_sources) -@LIBGD_GIR_TRUE@@LIBGD_STATIC_TRUE@am__append_19 = $(builddir)/Gd-1.0.gir -@LIBGD_GIR_TRUE@@LIBGD_STATIC_TRUE@am__append_20 = $(builddir)/Gd-1.0.gir -@LIBGD_GIR_TRUE@@LIBGD_STATIC_FALSE@am__append_21 = $(gir_DATA) $(typelib_DATA) -@LIBGD_VAPI_TRUE@am__append_22 = $(VAPIS) -@LIBGD_VAPI_TRUE@am__append_23 = $(VAPIS) -@LIBGD_VAPI_TRUE@am__append_24 = $(VAPIS) +@LIBGD_HEADER_BAR_TRUE@am__append_13 = $(header_bar_sources) +@LIBGD_HEADER_BAR_TRUE@am__append_14 = $(header_bar_sources) +@LIBGD_HEADER_BAR_TRUE@am__append_15 = test-header-bar +@LIBGD__HEADER_BUTTON_TRUE@am__append_16 = $(header_button_sources) +@LIBGD__HEADER_BUTTON_TRUE@am__append_17 = $(header_button_sources) +@LIBGD_MARGIN_CONTAINER_TRUE@am__append_18 = $(margin_container_sources) +@LIBGD_MARGIN_CONTAINER_TRUE@am__append_19 = $(margin_container_sources) +@LIBGD_NOTIFICATION_TRUE@am__append_20 = $(notification_sources) +@LIBGD_NOTIFICATION_TRUE@am__append_21 = $(notification_sources) +@LIBGD_REVEALER_TRUE@am__append_22 = $(revealer_sources) +@LIBGD_REVEALER_TRUE@am__append_23 = $(revealer_sources) +@LIBGD_REVEALER_TRUE@am__append_24 = test-revealer +@LIBGD_STACK_TRUE@am__append_25 = $(stack_sources) +@LIBGD_STACK_TRUE@am__append_26 = $(stack_sources) +@LIBGD_STACK_TRUE@am__append_27 = test-stack +@LIBGD_TAGGED_ENTRY_TRUE@am__append_28 = $(tagged_entry_sources) +@LIBGD_TAGGED_ENTRY_TRUE@am__append_29 = $(tagged_entry_sources) +@LIBGD_GIR_TRUE@@LIBGD_STATIC_TRUE@am__append_30 = $(srcdir)/Gd-1.0.gir +@LIBGD_GIR_TRUE@@LIBGD_STATIC_TRUE@am__append_31 = $(srcdir)/Gd-1.0.gir +@LIBGD_GIR_TRUE@@LIBGD_STATIC_TRUE@am__append_32 = $(srcdir)/Gd-1.0.gir +@LIBGD_GIR_TRUE@@LIBGD_STATIC_FALSE@am__append_33 = $(gir_DATA) $(typelib_DATA) +@LIBGD_VAPI_TRUE@am__append_34 = $(VAPIS) +@LIBGD_VAPI_TRUE@am__append_35 = $(VAPIS) +@LIBGD_VAPI_TRUE@am__append_36 = $(VAPIS) subdir = libgd DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -149,19 +163,31 @@ @LIBGD_MAIN_TOOLBAR_TRUE@am__objects_12 = gd-main-toolbar.lo \ @LIBGD_MAIN_TOOLBAR_TRUE@ $(am__objects_1) @LIBGD_MAIN_TOOLBAR_TRUE@am__objects_13 = $(am__objects_12) -@LIBGD_MARGIN_CONTAINER_TRUE@am__objects_14 = gd-margin-container.lo \ +@LIBGD_HEADER_BAR_TRUE@am__objects_14 = gd-header-bar.lo \ +@LIBGD_HEADER_BAR_TRUE@ $(am__objects_1) +@LIBGD_HEADER_BAR_TRUE@am__objects_15 = $(am__objects_14) +@LIBGD__HEADER_BUTTON_TRUE@am__objects_16 = gd-header-button.lo \ +@LIBGD__HEADER_BUTTON_TRUE@ $(am__objects_1) +@LIBGD__HEADER_BUTTON_TRUE@am__objects_17 = $(am__objects_16) +@LIBGD_MARGIN_CONTAINER_TRUE@am__objects_18 = gd-margin-container.lo \ @LIBGD_MARGIN_CONTAINER_TRUE@ $(am__objects_1) -@LIBGD_MARGIN_CONTAINER_TRUE@am__objects_15 = $(am__objects_14) -@LIBGD_NOTIFICATION_TRUE@am__objects_16 = gd-notification.lo \ +@LIBGD_MARGIN_CONTAINER_TRUE@am__objects_19 = $(am__objects_18) +@LIBGD_NOTIFICATION_TRUE@am__objects_20 = gd-notification.lo \ @LIBGD_NOTIFICATION_TRUE@ $(am__objects_1) -@LIBGD_NOTIFICATION_TRUE@am__objects_17 = $(am__objects_16) -@LIBGD_TAGGED_ENTRY_TRUE@am__objects_18 = gd-tagged-entry.lo \ +@LIBGD_NOTIFICATION_TRUE@am__objects_21 = $(am__objects_20) +@LIBGD_REVEALER_TRUE@am__objects_22 = gd-revealer.lo $(am__objects_1) +@LIBGD_REVEALER_TRUE@am__objects_23 = $(am__objects_22) +@LIBGD_STACK_TRUE@am__objects_24 = gd-stack.lo gd-stack-switcher.lo \ +@LIBGD_STACK_TRUE@ $(am__objects_1) +@LIBGD_STACK_TRUE@am__objects_25 = $(am__objects_24) +@LIBGD_TAGGED_ENTRY_TRUE@am__objects_26 = gd-tagged-entry.lo \ @LIBGD_TAGGED_ENTRY_TRUE@ $(am__objects_1) -@LIBGD_TAGGED_ENTRY_TRUE@am__objects_19 = $(am__objects_18) +@LIBGD_TAGGED_ENTRY_TRUE@am__objects_27 = $(am__objects_26) nodist_libgd_la_OBJECTS = $(am__objects_3) $(am__objects_5) \ $(am__objects_7) $(am__objects_9) $(am__objects_11) \ $(am__objects_13) $(am__objects_15) $(am__objects_17) \ - $(am__objects_19) + $(am__objects_19) $(am__objects_21) $(am__objects_23) \ + $(am__objects_25) $(am__objects_27) libgd_la_OBJECTS = $(am_libgd_la_OBJECTS) $(nodist_libgd_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -171,6 +197,31 @@ $(libgd_la_LDFLAGS) $(LDFLAGS) -o $@ @LIBGD_STATIC_FALSE@am_libgd_la_rpath = -rpath $(pkglibdir) @LIBGD_STATIC_TRUE@am_libgd_la_rpath = +@LIBGD_HEADER_BAR_TRUE@am__EXEEXT_1 = test-header-bar$(EXEEXT) +@LIBGD_REVEALER_TRUE@am__EXEEXT_2 = test-revealer$(EXEEXT) +@LIBGD_STACK_TRUE@am__EXEEXT_3 = test-stack$(EXEEXT) +PROGRAMS = $(noinst_PROGRAMS) +am__test_header_bar_SOURCES_DIST = test-header-bar.c +@LIBGD_HEADER_BAR_TRUE@am_test_header_bar_OBJECTS = \ +@LIBGD_HEADER_BAR_TRUE@ test-header-bar.$(OBJEXT) \ +@LIBGD_HEADER_BAR_TRUE@ $(am__objects_1) +test_header_bar_OBJECTS = $(am_test_header_bar_OBJECTS) +@LIBGD_HEADER_BAR_TRUE@test_header_bar_DEPENDENCIES = \ +@LIBGD_HEADER_BAR_TRUE@ $(am__DEPENDENCIES_1) libgd.la \ +@LIBGD_HEADER_BAR_TRUE@ $(am__DEPENDENCIES_1) +am__test_revealer_SOURCES_DIST = test-revealer.c +@LIBGD_REVEALER_TRUE@am_test_revealer_OBJECTS = \ +@LIBGD_REVEALER_TRUE@ test-revealer.$(OBJEXT) $(am__objects_1) +test_revealer_OBJECTS = $(am_test_revealer_OBJECTS) +@LIBGD_REVEALER_TRUE@test_revealer_DEPENDENCIES = \ +@LIBGD_REVEALER_TRUE@ $(am__DEPENDENCIES_1) libgd.la \ +@LIBGD_REVEALER_TRUE@ $(am__DEPENDENCIES_1) +am__test_stack_SOURCES_DIST = test-stack.c +@LIBGD_STACK_TRUE@am_test_stack_OBJECTS = test-stack.$(OBJEXT) \ +@LIBGD_STACK_TRUE@ $(am__objects_1) +test_stack_OBJECTS = $(am_test_stack_OBJECTS) +@LIBGD_STACK_TRUE@test_stack_DEPENDENCIES = $(am__DEPENDENCIES_1) \ +@LIBGD_STACK_TRUE@ libgd.la $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles @@ -197,8 +248,12 @@ AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; -SOURCES = $(libgd_la_SOURCES) $(nodist_libgd_la_SOURCES) -DIST_SOURCES = $(libgd_la_SOURCES) +SOURCES = $(libgd_la_SOURCES) $(nodist_libgd_la_SOURCES) \ + $(test_header_bar_SOURCES) $(test_revealer_SOURCES) \ + $(test_stack_SOURCES) +DIST_SOURCES = $(libgd_la_SOURCES) $(am__test_header_bar_SOURCES_DIST) \ + $(am__test_revealer_SOURCES_DIST) \ + $(am__test_stack_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -387,13 +442,14 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ NULL = -CLEANFILES = $(am__append_21) -MAINTAINERCLEANFILES = $(am__append_20) $(am__append_24) +CLEANFILES = $(am__append_33) +MAINTAINERCLEANFILES = $(am__append_32) $(am__append_36) EXTRA_DIST = $(am__append_2) $(am__append_4) $(am__append_6) \ $(am__append_8) $(am__append_10) $(am__append_12) \ - $(am__append_14) $(am__append_16) $(am__append_18) \ - $(am__append_23) -noinst_DATA = $(am__append_19) $(am__append_22) + $(am__append_14) $(am__append_17) $(am__append_19) \ + $(am__append_21) $(am__append_23) $(am__append_26) \ + $(am__append_29) $(am__append_31) $(am__append_35) +noinst_DATA = $(am__append_30) $(am__append_34) AM_CPPFLAGS = \ -I$(top_srcdir) \ -DPREFIX=\"$(prefix)\" \ @@ -410,8 +466,9 @@ libgd_la_SOURCES = libgd/gd.h nodist_libgd_la_SOURCES = $(am__append_1) $(am__append_3) \ $(am__append_5) $(am__append_7) $(am__append_9) \ - $(am__append_11) $(am__append_13) $(am__append_15) \ - $(am__append_17) + $(am__append_11) $(am__append_13) $(am__append_16) \ + $(am__append_18) $(am__append_20) $(am__append_22) \ + $(am__append_25) $(am__append_28) @LIBGD_GTK_HACKS_TRUE@gtk_hacks_sources = \ @LIBGD_GTK_HACKS_TRUE@ libgd/gd-entry-focus-hack.c \ @LIBGD_GTK_HACKS_TRUE@ libgd/gd-entry-focus-hack.h \ @@ -450,6 +507,25 @@ @LIBGD_MAIN_TOOLBAR_TRUE@ libgd/gd-main-toolbar.h \ @LIBGD_MAIN_TOOLBAR_TRUE@ $(NULL) +@LIBGD_HEADER_BAR_TRUE@header_bar_sources = \ +@LIBGD_HEADER_BAR_TRUE@ libgd/gd-header-bar.c \ +@LIBGD_HEADER_BAR_TRUE@ libgd/gd-header-bar.h \ +@LIBGD_HEADER_BAR_TRUE@ $(NULL) + +@LIBGD_HEADER_BAR_TRUE@test_header_bar_SOURCES = \ +@LIBGD_HEADER_BAR_TRUE@ test-header-bar.c \ +@LIBGD_HEADER_BAR_TRUE@ $(NULL) + +@LIBGD_HEADER_BAR_TRUE@test_header_bar_LDADD = \ +@LIBGD_HEADER_BAR_TRUE@ $(LIBGD_LIBS) \ +@LIBGD_HEADER_BAR_TRUE@ libgd.la \ +@LIBGD_HEADER_BAR_TRUE@ $(NULL) + +@LIBGD__HEADER_BUTTON_TRUE@header_button_sources = \ +@LIBGD__HEADER_BUTTON_TRUE@ libgd/gd-header-button.c \ +@LIBGD__HEADER_BUTTON_TRUE@ libgd/gd-header-button.h \ +@LIBGD__HEADER_BUTTON_TRUE@ $(NULL) + @LIBGD_MARGIN_CONTAINER_TRUE@margin_container_sources = \ @LIBGD_MARGIN_CONTAINER_TRUE@ libgd/gd-margin-container.c \ @LIBGD_MARGIN_CONTAINER_TRUE@ libgd/gd-margin-container.h \ @@ -460,6 +536,36 @@ @LIBGD_NOTIFICATION_TRUE@ libgd/gd-notification.h \ @LIBGD_NOTIFICATION_TRUE@ $(NULL) +@LIBGD_REVEALER_TRUE@revealer_sources = \ +@LIBGD_REVEALER_TRUE@ libgd/gd-revealer.c \ +@LIBGD_REVEALER_TRUE@ libgd/gd-revealer.h \ +@LIBGD_REVEALER_TRUE@ $(NULL) + +@LIBGD_REVEALER_TRUE@test_revealer_SOURCES = \ +@LIBGD_REVEALER_TRUE@ test-revealer.c \ +@LIBGD_REVEALER_TRUE@ $(NULL) + +@LIBGD_REVEALER_TRUE@test_revealer_LDADD = \ +@LIBGD_REVEALER_TRUE@ $(LIBGD_LIBS) \ +@LIBGD_REVEALER_TRUE@ libgd.la \ +@LIBGD_REVEALER_TRUE@ $(NULL) + +@LIBGD_STACK_TRUE@stack_sources = \ +@LIBGD_STACK_TRUE@ libgd/gd-stack.c \ +@LIBGD_STACK_TRUE@ libgd/gd-stack.h \ +@LIBGD_STACK_TRUE@ libgd/gd-stack-switcher.c \ +@LIBGD_STACK_TRUE@ libgd/gd-stack-switcher.h \ +@LIBGD_STACK_TRUE@ $(NULL) + +@LIBGD_STACK_TRUE@test_stack_SOURCES = \ +@LIBGD_STACK_TRUE@ test-stack.c \ +@LIBGD_STACK_TRUE@ $(NULL) + +@LIBGD_STACK_TRUE@test_stack_LDADD = \ +@LIBGD_STACK_TRUE@ $(LIBGD_LIBS) \ +@LIBGD_STACK_TRUE@ libgd.la \ +@LIBGD_STACK_TRUE@ $(NULL) + @LIBGD_TAGGED_ENTRY_TRUE@tagged_entry_sources = \ @LIBGD_TAGGED_ENTRY_TRUE@ libgd/gd-tagged-entry.c \ @LIBGD_TAGGED_ENTRY_TRUE@ libgd/gd-tagged-entry.h \ @@ -562,6 +668,24 @@ libgd.la: $(libgd_la_OBJECTS) $(libgd_la_DEPENDENCIES) $(EXTRA_libgd_la_DEPENDENCIES) $(AM_V_CCLD)$(libgd_la_LINK) $(am_libgd_la_rpath) $(libgd_la_OBJECTS) $(libgd_la_LIBADD) $(LIBS) +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +test-header-bar$(EXEEXT): $(test_header_bar_OBJECTS) $(test_header_bar_DEPENDENCIES) $(EXTRA_test_header_bar_DEPENDENCIES) + @rm -f test-header-bar$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_header_bar_OBJECTS) $(test_header_bar_LDADD) $(LIBS) +test-revealer$(EXEEXT): $(test_revealer_OBJECTS) $(test_revealer_DEPENDENCIES) $(EXTRA_test_revealer_DEPENDENCIES) + @rm -f test-revealer$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_revealer_OBJECTS) $(test_revealer_LDADD) $(LIBS) +test-stack$(EXEEXT): $(test_stack_OBJECTS) $(test_stack_DEPENDENCIES) $(EXTRA_test_stack_DEPENDENCIES) + @rm -f test-stack$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(test_stack_OBJECTS) $(test_stack_LDADD) $(LIBS) + mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -569,6 +693,8 @@ -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-entry-focus-hack.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-header-bar.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-header-button.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-icon-utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-main-icon-view.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-main-list-view.Plo@am__quote@ @@ -577,10 +703,16 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-main-view.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-margin-container.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-notification.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-revealer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-stack-switcher.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-stack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-styled-text-renderer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-tagged-entry.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-toggle-pixbuf-renderer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gd-two-lines-renderer.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-header-bar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-revealer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-stack.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @@ -673,6 +805,20 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gd-main-toolbar.lo `test -f 'libgd/gd-main-toolbar.c' || echo '$(srcdir)/'`libgd/gd-main-toolbar.c +gd-header-bar.lo: libgd/gd-header-bar.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gd-header-bar.lo -MD -MP -MF $(DEPDIR)/gd-header-bar.Tpo -c -o gd-header-bar.lo `test -f 'libgd/gd-header-bar.c' || echo '$(srcdir)/'`libgd/gd-header-bar.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gd-header-bar.Tpo $(DEPDIR)/gd-header-bar.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libgd/gd-header-bar.c' object='gd-header-bar.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gd-header-bar.lo `test -f 'libgd/gd-header-bar.c' || echo '$(srcdir)/'`libgd/gd-header-bar.c + +gd-header-button.lo: libgd/gd-header-button.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gd-header-button.lo -MD -MP -MF $(DEPDIR)/gd-header-button.Tpo -c -o gd-header-button.lo `test -f 'libgd/gd-header-button.c' || echo '$(srcdir)/'`libgd/gd-header-button.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gd-header-button.Tpo $(DEPDIR)/gd-header-button.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libgd/gd-header-button.c' object='gd-header-button.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gd-header-button.lo `test -f 'libgd/gd-header-button.c' || echo '$(srcdir)/'`libgd/gd-header-button.c + gd-margin-container.lo: libgd/gd-margin-container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gd-margin-container.lo -MD -MP -MF $(DEPDIR)/gd-margin-container.Tpo -c -o gd-margin-container.lo `test -f 'libgd/gd-margin-container.c' || echo '$(srcdir)/'`libgd/gd-margin-container.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gd-margin-container.Tpo $(DEPDIR)/gd-margin-container.Plo @@ -687,6 +833,27 @@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gd-notification.lo `test -f 'libgd/gd-notification.c' || echo '$(srcdir)/'`libgd/gd-notification.c +gd-revealer.lo: libgd/gd-revealer.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gd-revealer.lo -MD -MP -MF $(DEPDIR)/gd-revealer.Tpo -c -o gd-revealer.lo `test -f 'libgd/gd-revealer.c' || echo '$(srcdir)/'`libgd/gd-revealer.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gd-revealer.Tpo $(DEPDIR)/gd-revealer.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libgd/gd-revealer.c' object='gd-revealer.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gd-revealer.lo `test -f 'libgd/gd-revealer.c' || echo '$(srcdir)/'`libgd/gd-revealer.c + +gd-stack.lo: libgd/gd-stack.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gd-stack.lo -MD -MP -MF $(DEPDIR)/gd-stack.Tpo -c -o gd-stack.lo `test -f 'libgd/gd-stack.c' || echo '$(srcdir)/'`libgd/gd-stack.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gd-stack.Tpo $(DEPDIR)/gd-stack.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libgd/gd-stack.c' object='gd-stack.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gd-stack.lo `test -f 'libgd/gd-stack.c' || echo '$(srcdir)/'`libgd/gd-stack.c + +gd-stack-switcher.lo: libgd/gd-stack-switcher.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gd-stack-switcher.lo -MD -MP -MF $(DEPDIR)/gd-stack-switcher.Tpo -c -o gd-stack-switcher.lo `test -f 'libgd/gd-stack-switcher.c' || echo '$(srcdir)/'`libgd/gd-stack-switcher.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gd-stack-switcher.Tpo $(DEPDIR)/gd-stack-switcher.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libgd/gd-stack-switcher.c' object='gd-stack-switcher.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gd-stack-switcher.lo `test -f 'libgd/gd-stack-switcher.c' || echo '$(srcdir)/'`libgd/gd-stack-switcher.c + gd-tagged-entry.lo: libgd/gd-tagged-entry.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gd-tagged-entry.lo -MD -MP -MF $(DEPDIR)/gd-tagged-entry.Tpo -c -o gd-tagged-entry.lo `test -f 'libgd/gd-tagged-entry.c' || echo '$(srcdir)/'`libgd/gd-tagged-entry.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gd-tagged-entry.Tpo $(DEPDIR)/gd-tagged-entry.Plo @@ -826,7 +993,7 @@ done check-am: all-am check: check-am -all-am: Makefile $(LTLIBRARIES) $(DATA) +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(girdir)" "$(DESTDIR)$(typelibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ @@ -866,7 +1033,7 @@ clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ - clean-pkglibLTLIBRARIES mostlyclean-am + clean-noinstPROGRAMS clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) @@ -938,16 +1105,16 @@ .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ - ctags distclean distclean-compile distclean-generic \ - distclean-libtool distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-girDATA install-html install-html-am \ - install-info install-info-am install-man install-pdf \ - install-pdf-am install-pkglibLTLIBRARIES install-ps \ - install-ps-am install-strip install-typelibDATA installcheck \ - installcheck-am installdirs maintainer-clean \ + clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ + clean-pkglibLTLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-girDATA install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-pkglibLTLIBRARIES \ + install-ps install-ps-am install-strip install-typelibDATA \ + installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-girDATA \ @@ -958,11 +1125,10 @@ @LIBGD_GIR_TRUE@Gd-1.0.gir: libgd.la Makefile -@LIBGD_VAPI_TRUE@$(srcdir)/gd-1.0.vapi: $(builddir)/Gd-1.0.gir +@LIBGD_VAPI_TRUE@$(srcdir)/gd-1.0.vapi: $(srcdir)/Gd-1.0.gir @LIBGD_VAPI_TRUE@ $(AM_V_GEN)$(VAPIGEN) \ @LIBGD_VAPI_TRUE@ --library gd-1.0 \ @LIBGD_VAPI_TRUE@ --pkg gtk+-3.0 \ -@LIBGD_VAPI_TRUE@ -d $(srcdir) \ @LIBGD_VAPI_TRUE@ $< #This 'touch' is a workaround for vapigen not touching the dest file if #its content hasn't changed, which causes the rule to generate the .vapi diff -Nru devhelp-3.8.0/libgd/README devhelp-3.8.2/libgd/README --- devhelp-3.8.0/libgd/README 2013-03-25 14:35:45.000000000 +0000 +++ devhelp-3.8.2/libgd/README 2013-04-17 07:27:09.000000000 +0000 @@ -93,12 +93,20 @@ - gtk-hacks +- header-bar + - main-icon-view - main-toolbar - margin-container +- notification + +- revealer + +- stack + - static - tagged-entry @@ -120,4 +128,4 @@ - eventually add documentation generation - some licensing check - more modularity (not all in libgd.m4/Makefile.am) -- CSS styling and data: shared only with gnome-themes-standard? \ No newline at end of file +- CSS styling and data: shared only with gnome-themes-standard? diff -Nru devhelp-3.8.0/libgd/libgd/gd-header-bar.c devhelp-3.8.2/libgd/libgd/gd-header-bar.c --- devhelp-3.8.0/libgd/libgd/gd-header-bar.c 1970-01-01 00:00:00.000000000 +0000 +++ devhelp-3.8.2/libgd/libgd/gd-header-bar.c 2013-04-17 07:27:09.000000000 +0000 @@ -0,0 +1,1350 @@ +/* + * Copyright (c) 2013 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "gd-header-bar.h" + +#include + +/* TODO + * - wm communication + */ + +#define DEFAULT_SPACING 8 +#define DEFAULT_HPADDING 8 +#define DEFAULT_VPADDING 6 + +struct _GdHeaderBarPrivate +{ + gchar *title; + gchar *subtitle; + + GtkWidget *title_label; + GtkWidget *subtitle_label; + GtkWidget *labels_box; + GtkWidget *labels_sizing_box; + + GtkWidget *custom_title; + GdkWindow *event_window; + gint spacing; + gint hpadding; + gint vpadding; + + GList *children; +}; + +typedef struct _Child Child; +struct _Child +{ + GtkWidget *widget; + GtkPackType pack_type; +}; + +enum { + PROP_0, + PROP_TITLE, + PROP_SUBTITLE, + PROP_CUSTOM_TITLE, + PROP_SPACING, + PROP_HPADDING, + PROP_VPADDING +}; + +enum { + CHILD_PROP_0, + CHILD_PROP_PACK_TYPE, + CHILD_PROP_POSITION +}; + +static void gd_header_buildable_init (GtkBuildableIface *iface); + +G_DEFINE_TYPE_WITH_CODE (GdHeaderBar, gd_header_bar, GTK_TYPE_CONTAINER, + G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, + gd_header_buildable_init)); + +static void +boldify_label (GtkWidget *label) +{ + PangoAttrList *attrs; + attrs = pango_attr_list_new (); + pango_attr_list_insert (attrs, pango_attr_weight_new (PANGO_WEIGHT_BOLD)); + gtk_label_set_attributes (GTK_LABEL (label), attrs); + pango_attr_list_unref (attrs); +} + +static void +smallify_label (GtkWidget *label) +{ + PangoAttrList *attrs; + attrs = pango_attr_list_new (); + pango_attr_list_insert (attrs, pango_attr_scale_new (PANGO_SCALE_SMALL)); + gtk_label_set_attributes (GTK_LABEL (label), attrs); + pango_attr_list_unref (attrs); + + gtk_style_context_add_class (gtk_widget_get_style_context (label), "dim-label"); +} + +static void +get_css_padding_and_border (GtkWidget *widget, + GtkBorder *border) +{ + GtkStyleContext *context; + GtkStateFlags state; + GtkBorder tmp; + + context = gtk_widget_get_style_context (widget); + state = gtk_widget_get_state_flags (widget); + + gtk_style_context_get_padding (context, state, border); + gtk_style_context_get_border (context, state, &tmp); + border->top += tmp.top; + border->right += tmp.right; + border->bottom += tmp.bottom; + border->left += tmp.left; +} + +static void +init_sizing_box (GdHeaderBar *bar) +{ + GdHeaderBarPrivate *priv = bar->priv; + GtkWidget *w; + + /* We use this box to always request size for the two labels (title and subtitle) + * as if they were always visible, but then allocate the real label box + * with its actual size, to keep it center-aligned in case we have only the title. + */ + priv->labels_sizing_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + + w = gtk_label_new (NULL); + boldify_label (w); + gtk_box_pack_start (GTK_BOX (priv->labels_sizing_box), w, FALSE, FALSE, 0); + gtk_label_set_line_wrap (GTK_LABEL (w), FALSE); + gtk_label_set_single_line_mode (GTK_LABEL (w), TRUE); + gtk_label_set_ellipsize (GTK_LABEL (w), PANGO_ELLIPSIZE_END); + + w = gtk_label_new (NULL); + smallify_label (w); + gtk_box_pack_start (GTK_BOX (priv->labels_sizing_box), w, FALSE, FALSE, 0); + gtk_label_set_line_wrap (GTK_LABEL (w), FALSE); + gtk_label_set_single_line_mode (GTK_LABEL (w), TRUE); + gtk_label_set_ellipsize (GTK_LABEL (w), PANGO_ELLIPSIZE_END); + + gtk_widget_show_all (priv->labels_sizing_box); +} + +static void +gd_header_bar_init (GdHeaderBar *bar) +{ + GtkStyleContext *context; + GdHeaderBarPrivate *priv; + + priv = G_TYPE_INSTANCE_GET_PRIVATE (bar, GD_TYPE_HEADER_BAR, GdHeaderBarPrivate); + bar->priv = priv; + + gtk_widget_set_has_window (GTK_WIDGET (bar), FALSE); + gtk_widget_set_redraw_on_allocate (GTK_WIDGET (bar), FALSE); + + priv->labels_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_set_parent (priv->labels_box, GTK_WIDGET (bar)); + gtk_widget_set_valign (priv->labels_box, GTK_ALIGN_CENTER); + gtk_widget_show (priv->labels_box); + + init_sizing_box (bar); + + priv->title_label = gtk_label_new (""); + boldify_label (priv->title_label); + gtk_box_pack_start (GTK_BOX (priv->labels_box), priv->title_label, FALSE, FALSE, 0); + gtk_label_set_line_wrap (GTK_LABEL (priv->title_label), FALSE); + gtk_label_set_single_line_mode (GTK_LABEL (priv->title_label), TRUE); + gtk_label_set_ellipsize (GTK_LABEL (priv->title_label), PANGO_ELLIPSIZE_END); + gtk_widget_show (priv->title_label); + + priv->subtitle_label = gtk_label_new (""); + smallify_label (priv->subtitle_label); + gtk_box_pack_start (GTK_BOX (priv->labels_box), priv->subtitle_label, FALSE, FALSE, 0); + gtk_label_set_line_wrap (GTK_LABEL (priv->subtitle_label), FALSE); + gtk_label_set_single_line_mode (GTK_LABEL (priv->subtitle_label), TRUE); + gtk_label_set_ellipsize (GTK_LABEL (priv->subtitle_label), PANGO_ELLIPSIZE_END); + + priv->title = NULL; + priv->custom_title = NULL; + priv->children = NULL; + priv->spacing = DEFAULT_SPACING; + priv->hpadding = DEFAULT_HPADDING; + priv->vpadding = DEFAULT_VPADDING; + + context = gtk_widget_get_style_context (GTK_WIDGET (bar)); + gtk_style_context_add_class (context, "header-bar"); + gtk_style_context_add_class (context, GTK_STYLE_CLASS_HORIZONTAL); +} + +static gint +count_visible_children (GdHeaderBar *bar) +{ + GList *l; + Child *child; + gint n; + + n = 0; + for (l = bar->priv->children; l; l = l->next) + { + child = l->data; + if (gtk_widget_get_visible (child->widget)) + n++; + } + + return n; +} + +static void +gd_header_bar_get_size (GtkWidget *widget, + GtkOrientation orientation, + gint *minimum_size, + gint *natural_size) +{ + GdHeaderBar *bar = GD_HEADER_BAR (widget); + GdHeaderBarPrivate *priv = bar->priv; + GList *l; + gint nvis_children; + gint minimum, natural; + GtkBorder css_borders; + + minimum = natural = 0; + nvis_children = 0; + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + gtk_widget_get_preferred_width (priv->labels_sizing_box, + &minimum, &natural); + else + gtk_widget_get_preferred_height (priv->labels_sizing_box, + &minimum, &natural); + + for (l = priv->children; l; l = l->next) + { + Child *child = l->data; + + if (gtk_widget_get_visible (child->widget)) + { + gint child_minimum, child_natural; + + if (orientation == GTK_ORIENTATION_HORIZONTAL) + gtk_widget_get_preferred_width (child->widget, + &child_minimum, &child_natural); + else + gtk_widget_get_preferred_height (child->widget, + &child_minimum, &child_natural); + + if (GTK_ORIENTATION_HORIZONTAL == orientation) + { + minimum += child_minimum; + natural += child_natural; + } + else + { + minimum = MAX (minimum, child_minimum); + natural = MAX (natural, child_natural); + } + nvis_children += 1; + } + } + + if (nvis_children > 0 && orientation == GTK_ORIENTATION_HORIZONTAL) + { + minimum += nvis_children * priv->spacing; + natural += nvis_children * priv->spacing; + } + + get_css_padding_and_border (widget, &css_borders); + + if (GTK_ORIENTATION_HORIZONTAL == orientation) + { + minimum += 2 * priv->hpadding + css_borders.left + css_borders.right; + natural += 2 * priv->hpadding + css_borders.left + css_borders.right; + } + else + { + minimum += 2 * priv->vpadding + css_borders.top + css_borders.bottom; + natural += 2 * priv->vpadding + css_borders.top + css_borders.bottom; + } + + if (minimum_size) + *minimum_size = minimum; + + if (natural_size) + *natural_size = natural; +} + +static void +gd_header_bar_compute_size_for_orientation (GtkWidget *widget, + gint avail_size, + gint *minimum_size, + gint *natural_size) +{ + GdHeaderBar *bar = GD_HEADER_BAR (widget); + GdHeaderBarPrivate *priv = bar->priv; + GList *children; + gint required_size = 0; + gint required_natural = 0; + gint child_size; + gint child_natural; + gint nvis_children; + GtkBorder css_borders; + + avail_size -= 2 * priv->vpadding; + + nvis_children = 0; + + for (children = priv->children; children != NULL; children = children->next) + { + Child *child = children->data; + + if (gtk_widget_get_visible (child->widget)) + { + gtk_widget_get_preferred_width_for_height (child->widget, + avail_size, &child_size, &child_natural); + + required_size += child_size; + required_natural += child_natural; + + nvis_children += 1; + } + } + + gtk_widget_get_preferred_width (priv->labels_sizing_box, + &child_size, &child_natural); + required_size += child_size; + required_natural += child_natural; + + if (nvis_children > 0) + { + required_size += nvis_children * priv->spacing; + required_natural += nvis_children * priv->spacing; + } + + get_css_padding_and_border (widget, &css_borders); + + required_size += 2 * priv->hpadding + css_borders.left + css_borders.right; + required_natural += 2 * priv->hpadding + css_borders.left + css_borders.right; + + if (minimum_size) + *minimum_size = required_size; + + if (natural_size) + *natural_size = required_natural; +} + +static void +gd_header_bar_compute_size_for_opposing_orientation (GtkWidget *widget, + gint avail_size, + gint *minimum_size, + gint *natural_size) +{ + GdHeaderBar *bar = GD_HEADER_BAR (widget); + GdHeaderBarPrivate *priv = bar->priv; + Child *child; + GList *children; + gint nvis_children; + gint computed_minimum = 0; + gint computed_natural = 0; + GtkRequestedSize *sizes; + GtkPackType packing; + gint size; + gint i; + gint child_size; + gint child_minimum; + gint child_natural; + GtkBorder css_borders; + + nvis_children = count_visible_children (bar); + + if (nvis_children <= 0) + return; + + sizes = g_newa (GtkRequestedSize, nvis_children); + size = avail_size - 2 * priv->hpadding; + + /* Retrieve desired size for visible children */ + for (i = 0, children = priv->children; children; children = children->next) + { + child = children->data; + + if (gtk_widget_get_visible (child->widget)) + { + gtk_widget_get_preferred_width (child->widget, + &sizes[i].minimum_size, + &sizes[i].natural_size); + + size -= sizes[i].minimum_size; + sizes[i].data = child; + i += 1; + } + } + + /* Bring children up to size first */ + size = gtk_distribute_natural_allocation (MAX (0, size), nvis_children, sizes); + + /* Allocate child positions. */ + for (packing = GTK_PACK_START; packing <= GTK_PACK_END; ++packing) + { + for (i = 0, children = priv->children; children; children = children->next) + { + child = children->data; + + /* If widget is not visible, skip it. */ + if (!gtk_widget_get_visible (child->widget)) + continue; + + /* If widget is packed differently skip it, but still increment i, + * since widget is visible and will be handled in next loop + * iteration. + */ + if (child->pack_type != packing) + { + i++; + continue; + } + + child_size = sizes[i].minimum_size; + + gtk_widget_get_preferred_height_for_width (child->widget, + child_size, &child_minimum, &child_natural); + + computed_minimum = MAX (computed_minimum, child_minimum); + computed_natural = MAX (computed_natural, child_natural); + } + i += 1; + } + + gtk_widget_get_preferred_height (priv->labels_sizing_box, + &child_minimum, &child_natural); + computed_minimum = MAX (computed_minimum, child_minimum); + computed_natural = MAX (computed_natural, child_natural); + + get_css_padding_and_border (widget, &css_borders); + + computed_minimum += 2 * priv->vpadding + css_borders.top + css_borders.bottom; + computed_natural += 2 * priv->vpadding + css_borders.top + css_borders.bottom; + + if (minimum_size) + *minimum_size = computed_minimum; + + if (natural_size) + *natural_size = computed_natural; +} + +static void +gd_header_bar_get_preferred_width (GtkWidget *widget, + gint *minimum_size, + gint *natural_size) +{ + gd_header_bar_get_size (widget, GTK_ORIENTATION_HORIZONTAL, minimum_size, natural_size); +} + +static void +gd_header_bar_get_preferred_height (GtkWidget *widget, + gint *minimum_size, + gint *natural_size) +{ + gd_header_bar_get_size (widget, GTK_ORIENTATION_VERTICAL, minimum_size, natural_size); +} + +static void +gd_header_bar_get_preferred_width_for_height (GtkWidget *widget, + gint height, + gint *minimum_width, + gint *natural_width) +{ + gd_header_bar_compute_size_for_orientation (widget, height, minimum_width, natural_width); +} + +static void +gd_header_bar_get_preferred_height_for_width (GtkWidget *widget, + gint width, + gint *minimum_height, + gint *natural_height) +{ + gd_header_bar_compute_size_for_opposing_orientation (widget, width, minimum_height, natural_height); +} + +static void +gd_header_bar_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) +{ + GdHeaderBar *bar = GD_HEADER_BAR (widget); + GdHeaderBarPrivate *priv = bar->priv; + GtkRequestedSize *sizes; + gint width, height; + gint nvis_children; + gint title_minimum_size; + gint title_natural_size; + gint side[2]; + GList *l; + gint i; + Child *child; + GtkPackType packing; + GtkAllocation child_allocation; + gint x; + gint child_size; + GtkTextDirection direction; + GtkBorder css_borders; + + gtk_widget_set_allocation (widget, allocation); + + if (gtk_widget_get_realized (widget)) + gdk_window_move_resize (priv->event_window, + allocation->x, + allocation->y, + allocation->width, + allocation->height); + + direction = gtk_widget_get_direction (widget); + nvis_children = count_visible_children (bar); + sizes = g_newa (GtkRequestedSize, nvis_children); + + get_css_padding_and_border (widget, &css_borders); + width = allocation->width - nvis_children * priv->spacing - + 2 * priv->hpadding - css_borders.left - css_borders.right; + height = allocation->height - 2 * priv->vpadding - css_borders.top - css_borders.bottom; + + i = 0; + for (l = priv->children; l; l = l->next) + { + child = l->data; + if (!gtk_widget_get_visible (child->widget)) + continue; + + gtk_widget_get_preferred_width_for_height (child->widget, + height, + &sizes[i].minimum_size, + &sizes[i].natural_size); + width -= sizes[i].minimum_size; + i++; + } + + if (priv->custom_title) + { + gtk_widget_get_preferred_width_for_height (priv->custom_title, + height, + &title_minimum_size, + &title_natural_size); + } + else + { + gtk_widget_get_preferred_width_for_height (priv->labels_box, + height, + &title_minimum_size, + &title_natural_size); + } + width -= title_natural_size; + + width = gtk_distribute_natural_allocation (MAX (0, width), nvis_children, sizes); + + side[0] = side[1] = 0; + for (packing = GTK_PACK_START; packing <= GTK_PACK_END; packing++) + { + child_allocation.y = allocation->y + priv->vpadding + css_borders.top; + child_allocation.height = height; + if (packing == GTK_PACK_START) + x = allocation->x + priv->hpadding + css_borders.left; + else + x = allocation->x + allocation->width - priv->hpadding - css_borders.right; + + if (packing == GTK_PACK_START) + { + l = priv->children; + i = 0; + } + else + { + l = g_list_last (priv->children); + i = nvis_children - 1; + } + + for (; l != NULL; (packing == GTK_PACK_START) ? (l = l->next) : (l = l->prev)) + { + child = l->data; + if (!gtk_widget_get_visible (child->widget)) + continue; + + if (child->pack_type != packing) + goto next; + + child_size = sizes[i].minimum_size; + + child_allocation.width = child_size; + + if (packing == GTK_PACK_START) + { + child_allocation.x = x; + x += child_size; + x += priv->spacing; + } + else + { + x -= child_size; + child_allocation.x = x; + x -= priv->spacing; + } + + side[packing] += child_size + priv->spacing; + + if (direction == GTK_TEXT_DIR_RTL) + child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; + + gtk_widget_size_allocate (child->widget, &child_allocation); + + next: + if (packing == GTK_PACK_START) + i++; + else + i--; + } + } + + child_allocation.y = allocation->y + priv->vpadding + css_borders.top; + child_allocation.height = height; + + width = MAX(side[0], side[1]); + + if (allocation->width - 2 * width >= title_natural_size) + child_size = MIN (title_natural_size, allocation->width - 2 * width); + else if (allocation->width - side[0] - side[1] >= title_natural_size) + child_size = MIN (title_natural_size, allocation->width - side[0] - side[1]); + else + child_size = allocation->width - side[0] - side[1]; + + child_allocation.x = allocation->x + (allocation->width - child_size) / 2; + child_allocation.width = child_size; + + if (allocation->x + side[0] > child_allocation.x) + child_allocation.x = allocation->x + side[0]; + else if (allocation->x + allocation->width - side[1] < child_allocation.x + child_allocation.width) + child_allocation.x = allocation->x + allocation->width - side[1] - child_allocation.width; + + if (direction == GTK_TEXT_DIR_RTL) + child_allocation.x = allocation->x + allocation->width - (child_allocation.x - allocation->x) - child_allocation.width; + + if (priv->custom_title) + gtk_widget_size_allocate (priv->custom_title, &child_allocation); + else + gtk_widget_size_allocate (priv->labels_box, &child_allocation); +} + +/** + * gd_header_bar_set_title: + * @bar: a #GdHeaderBar + * @title: (allow-none): a title + * + * Sets the title of the #GdHeaderBar. The title should help a user + * identify the current view. A good title should not include the + * application name. + * + **/ +void +gd_header_bar_set_title (GdHeaderBar *bar, + const gchar *title) +{ + GdHeaderBarPrivate *priv; + char *new_title; + + g_return_if_fail (GD_IS_HEADER_BAR (bar)); + + priv = bar->priv; + + new_title = g_strdup (title); + g_free (priv->title); + priv->title = new_title; + + gtk_label_set_label (GTK_LABEL (priv->title_label), priv->title); + gtk_widget_queue_resize (GTK_WIDGET (bar)); + + g_object_notify (G_OBJECT (bar), "title"); +} + +/** + * gd_header_bar_get_title: + * @bar: a #GdHeaderBar + * + * Retrieves the title of the header. See gd_header_bar_set_title(). + * + * Return value: the title of the header, or %NULL if none has + * been set explicitely. The returned string is owned by the widget + * and must not be modified or freed. + **/ +const gchar * +gd_header_bar_get_title (GdHeaderBar *bar) +{ + g_return_val_if_fail (GD_IS_HEADER_BAR (bar), NULL); + + return bar->priv->title; +} + +/** + * gd_header_bar_set_subtitle: + * @bar: a #GdHeaderBar + * @subtitle: (allow-none): a subtitle + * + * Sets the subtitle of the #GdHeaderBar. The subtitle should give a user + * an additional detail to help him identify the current view. + * + **/ +void +gd_header_bar_set_subtitle (GdHeaderBar *bar, + const gchar *subtitle) +{ + GdHeaderBarPrivate *priv; + char *new_subtitle; + + g_return_if_fail (GD_IS_HEADER_BAR (bar)); + + priv = bar->priv; + + new_subtitle = g_strdup (subtitle); + g_free (priv->subtitle); + priv->subtitle = new_subtitle; + + gtk_label_set_label (GTK_LABEL (priv->subtitle_label), priv->subtitle); + gtk_widget_set_visible (priv->subtitle_label, (priv->subtitle != NULL)); + + gtk_widget_queue_resize (GTK_WIDGET (bar)); + + g_object_notify (G_OBJECT (bar), "subtitle"); +} + +/** + * gd_header_bar_get_subtitle: + * @bar: a #GdHeaderBar + * + * Retrieves the subtitle of the header. See gd_header_bar_set_subtitle(). + * + * Return value: the subtitle of the header, or %NULL if none has + * been set explicitely. The returned string is owned by the widget + * and must not be modified or freed. + **/ +const gchar * +gd_header_bar_get_subtitle (GdHeaderBar *bar) +{ + g_return_val_if_fail (GD_IS_HEADER_BAR (bar), NULL); + + return bar->priv->subtitle; +} + +/** + * gd_header_bar_set_custom_title: + * @bar: a #GdHeaderBar + * @title_widget: (allow-none): a custom widget to use for a title + * + * Sets a custom title for the #GdHeaderBar. The title should help a + * user identify the current view. This supercedes any title set by + * gd_header_bar_set_title(). You should set the custom title to %NULL, + * for the header title label to be visible again. + * + **/ +void +gd_header_bar_set_custom_title (GdHeaderBar *bar, + GtkWidget *title_widget) +{ + GdHeaderBarPrivate *priv; + + g_return_if_fail (GD_IS_HEADER_BAR (bar)); + if (title_widget) + g_return_if_fail (GTK_IS_WIDGET (title_widget)); + + priv = bar->priv; + + /* No need to do anything if the custom widget stays the same */ + if (priv->custom_title == title_widget) + return; + + if (priv->custom_title) + { + GtkWidget *custom = priv->custom_title; + + priv->custom_title = NULL; + gtk_widget_unparent (custom); + g_object_unref (custom); + } + + if (title_widget) + { + priv->custom_title = g_object_ref (title_widget); + + gtk_widget_hide (priv->labels_box); + + gtk_widget_set_parent (priv->custom_title, GTK_WIDGET (bar)); + gtk_widget_set_valign (priv->custom_title, GTK_ALIGN_CENTER); + + gtk_widget_show (title_widget); + } + else + { + gtk_widget_show (priv->labels_box); + } + + gtk_widget_queue_resize (GTK_WIDGET (bar)); + + g_object_notify (G_OBJECT (bar), "custom-title"); +} + +/** + * gd_header_bar_get_custom_title: + * @bar: a #GdHeaderBar + * + * Retrieves the custom title widget of the header. See + * gd_header_bar_set_custom_title(). + * + * Return value: (transfer none): the custom title widget of the header, or %NULL if + * none has been set explicitely. + **/ +GtkWidget * +gd_header_bar_get_custom_title (GdHeaderBar *bar) +{ + g_return_val_if_fail (GD_IS_HEADER_BAR (bar), NULL); + + return bar->priv->custom_title; +} + +static void +gd_header_bar_finalize (GObject *object) +{ + GdHeaderBar *bar = GD_HEADER_BAR (object); + GdHeaderBarPrivate *priv = bar->priv; + + g_free (priv->title); + g_free (priv->subtitle); + + g_list_free (priv->children); + + G_OBJECT_CLASS (gd_header_bar_parent_class)->finalize (object); +} + +static void +gd_header_bar_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GdHeaderBar *bar = GD_HEADER_BAR (object); + GdHeaderBarPrivate *priv = bar->priv; + + switch (prop_id) + { + case PROP_TITLE: + g_value_set_string (value, priv->title); + break; + + case PROP_SUBTITLE: + g_value_set_string (value, priv->subtitle); + break; + + case PROP_CUSTOM_TITLE: + g_value_set_object (value, priv->custom_title); + break; + + case PROP_SPACING: + g_value_set_int (value, priv->spacing); + break; + + case PROP_HPADDING: + g_value_set_int (value, priv->hpadding); + break; + + case PROP_VPADDING: + g_value_set_int (value, priv->vpadding); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gd_header_bar_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GdHeaderBar *bar = GD_HEADER_BAR (object); + GdHeaderBarPrivate *priv = bar->priv; + + switch (prop_id) + { + case PROP_TITLE: + gd_header_bar_set_title (bar, g_value_get_string (value)); + break; + + case PROP_SUBTITLE: + gd_header_bar_set_subtitle (bar, g_value_get_string (value)); + break; + + case PROP_CUSTOM_TITLE: + gd_header_bar_set_custom_title (bar, g_value_get_object (value)); + break; + + case PROP_SPACING: + priv->spacing = g_value_get_int (value); + gtk_widget_queue_resize (GTK_WIDGET (bar)); + break; + + case PROP_HPADDING: + priv->hpadding = g_value_get_int (value); + gtk_widget_queue_resize (GTK_WIDGET (bar)); + break; + + case PROP_VPADDING: + priv->vpadding = g_value_get_int (value); + gtk_widget_queue_resize (GTK_WIDGET (bar)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gd_header_bar_pack (GdHeaderBar *bar, + GtkWidget *widget, + GtkPackType pack_type) +{ + Child *child; + + g_return_if_fail (gtk_widget_get_parent (widget) == NULL); + + child = g_new (Child, 1); + child->widget = widget; + child->pack_type = pack_type; + + bar->priv->children = g_list_append (bar->priv->children, child); + + gtk_widget_freeze_child_notify (widget); + gtk_widget_set_parent (widget, GTK_WIDGET (bar)); + gtk_widget_child_notify (widget, "pack-type"); + gtk_widget_child_notify (widget, "position"); + gtk_widget_thaw_child_notify (widget); +} + +static void +gd_header_bar_add (GtkContainer *container, + GtkWidget *child) +{ + gd_header_bar_pack (GD_HEADER_BAR (container), child, GTK_PACK_START); +} + +static GList * +find_child_link (GdHeaderBar *bar, + GtkWidget *widget) +{ + GList *l; + Child *child; + + for (l = bar->priv->children; l; l = l->next) + { + child = l->data; + if (child->widget == widget) + return l; + } + + return NULL; +} + +static void +gd_header_bar_remove (GtkContainer *container, + GtkWidget *widget) +{ + GdHeaderBar *bar = GD_HEADER_BAR (container); + GList *l; + Child *child; + + l = find_child_link (bar, widget); + if (l) + { + child = l->data; + gtk_widget_unparent (child->widget); + bar->priv->children = g_list_remove_link (bar->priv->children, l); + g_free (child); + gtk_widget_queue_resize (GTK_WIDGET (container)); + } +} + +static void +gd_header_bar_forall (GtkContainer *container, + gboolean include_internals, + GtkCallback callback, + gpointer callback_data) +{ + GdHeaderBar *bar = GD_HEADER_BAR (container); + GdHeaderBarPrivate *priv = bar->priv; + Child *child; + GList *children; + + children = priv->children; + while (children) + { + child = children->data; + children = children->next; + if (child->pack_type == GTK_PACK_START) + (* callback) (child->widget, callback_data); + } + + if (include_internals) + { + if (priv->custom_title) + (* callback) (priv->custom_title, callback_data); + else + (* callback) (priv->labels_box, callback_data); + } + + children = g_list_last (priv->children); + while (children) + { + child = children->data; + children = children->prev; + if (child->pack_type == GTK_PACK_END) + (* callback) (child->widget, callback_data); + } +} + +static GType +gd_header_bar_child_type (GtkContainer *container) +{ + return GTK_TYPE_WIDGET; +} + +static void +gd_header_bar_get_child_property (GtkContainer *container, + GtkWidget *widget, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GList *l; + Child *child; + + l = find_child_link (GD_HEADER_BAR (container), widget); + child = l->data; + + switch (property_id) + { + case CHILD_PROP_PACK_TYPE: + g_value_set_enum (value, child->pack_type); + break; + + case CHILD_PROP_POSITION: + g_value_set_int (value, g_list_position (GD_HEADER_BAR (container)->priv->children, l)); + break; + + default: + GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec); + break; + } +} + +static void +gd_header_bar_set_child_property (GtkContainer *container, + GtkWidget *widget, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + GList *l; + Child *child; + + l = find_child_link (GD_HEADER_BAR (container), widget); + child = l->data; + + switch (property_id) + { + case CHILD_PROP_PACK_TYPE: + child->pack_type = g_value_get_enum (value); + break; + default: + GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec); + break; + } +} + +static gboolean +gd_header_bar_button_press (GtkWidget *toolbar, + GdkEventButton *event) +{ + GtkWidget *window; + + if (gdk_event_triggers_context_menu ((GdkEvent *) event)) + { + + /* FIXME menu ? */ + + return FALSE; + } + + if (event->type != GDK_BUTTON_PRESS) + return FALSE; + + window = gtk_widget_get_toplevel (toolbar); + + if (window) + { + gtk_window_begin_move_drag (GTK_WINDOW (window), + event->button, + event->x_root, + event->y_root, + event->time); + + return TRUE; + } + + return FALSE; +} + +static void +gd_header_bar_realize (GtkWidget *widget) +{ + GdHeaderBar *bar = GD_HEADER_BAR (widget); + GdHeaderBarPrivate *priv = bar->priv; + GtkAllocation allocation; + GdkWindow *window; + GdkWindowAttr attributes; + gint attributes_mask; + + gtk_widget_get_allocation (widget, &allocation); + gtk_widget_set_realized (widget, TRUE); + + attributes.window_type = GDK_WINDOW_CHILD; + attributes.x = allocation.x; + attributes.y = allocation.y; + attributes.width = allocation.width; + attributes.height = allocation.height; + attributes.wclass = GDK_INPUT_ONLY; + attributes.event_mask = gtk_widget_get_events (widget); + attributes.event_mask |= (GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK | + GDK_TOUCH_MASK); + attributes_mask = GDK_WA_X | GDK_WA_Y; + + window = gtk_widget_get_parent_window (widget); + gtk_widget_set_window (widget, window); + g_object_ref (window); + + priv->event_window = gdk_window_new (window, + &attributes, attributes_mask); + gdk_window_set_user_data (priv->event_window, widget); +} +static void +gd_header_bar_unrealize (GtkWidget *widget) +{ + GdHeaderBar *bar = GD_HEADER_BAR (widget); + GdHeaderBarPrivate *priv = bar->priv; + + if (priv->event_window) + { + gdk_window_set_user_data (priv->event_window, NULL); + gdk_window_destroy (priv->event_window); + priv->event_window = NULL; + } + + GTK_WIDGET_CLASS (gd_header_bar_parent_class)->unrealize (widget); +} + +static void +gd_header_bar_map (GtkWidget *widget) +{ + GdHeaderBar *bar = GD_HEADER_BAR (widget); + GdHeaderBarPrivate *priv = bar->priv; + + GTK_WIDGET_CLASS (gd_header_bar_parent_class)->map (widget); + + if (priv->event_window) + gdk_window_show_unraised (priv->event_window); +} + +static void +gd_header_bar_unmap (GtkWidget *widget) +{ + GdHeaderBar *bar = GD_HEADER_BAR (widget); + GdHeaderBarPrivate *priv = bar->priv; + + if (priv->event_window) + gdk_window_hide (priv->event_window); + + GTK_WIDGET_CLASS (gd_header_bar_parent_class)->unmap (widget); +} + +static gint +gd_header_bar_draw (GtkWidget *widget, + cairo_t *cr) +{ + GtkStyleContext *context; + + context = gtk_widget_get_style_context (widget); + + gtk_render_background (context, cr, 0, 0, + gtk_widget_get_allocated_width (widget), + gtk_widget_get_allocated_height (widget)); + gtk_render_frame (context, cr, 0, 0, + gtk_widget_get_allocated_width (widget), + gtk_widget_get_allocated_height (widget)); + + + GTK_WIDGET_CLASS (gd_header_bar_parent_class)->draw (widget, cr); + + return TRUE; +} + +static void +gd_header_bar_class_init (GdHeaderBarClass *class) +{ + GObjectClass *object_class = G_OBJECT_CLASS (class); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); + GtkContainerClass *container_class = GTK_CONTAINER_CLASS (class); + + object_class->get_property = gd_header_bar_get_property; + object_class->set_property = gd_header_bar_set_property; + object_class->finalize = gd_header_bar_finalize; + + widget_class->size_allocate = gd_header_bar_size_allocate; + widget_class->get_preferred_width = gd_header_bar_get_preferred_width; + widget_class->get_preferred_height = gd_header_bar_get_preferred_height; + widget_class->get_preferred_height_for_width = gd_header_bar_get_preferred_height_for_width; + widget_class->get_preferred_width_for_height = gd_header_bar_get_preferred_width_for_height; + widget_class->button_press_event = gd_header_bar_button_press; + widget_class->realize = gd_header_bar_realize; + widget_class->unrealize = gd_header_bar_unrealize; + widget_class->map = gd_header_bar_map; + widget_class->unmap = gd_header_bar_unmap; + widget_class->draw = gd_header_bar_draw; + + container_class->add = gd_header_bar_add; + container_class->remove = gd_header_bar_remove; + container_class->forall = gd_header_bar_forall; + container_class->child_type = gd_header_bar_child_type; + container_class->set_child_property = gd_header_bar_set_child_property; + container_class->get_child_property = gd_header_bar_get_child_property; + gtk_container_class_handle_border_width (container_class); + + gtk_container_class_install_child_property (container_class, + CHILD_PROP_PACK_TYPE, + g_param_spec_enum ("pack-type", + "Pack type", + "A GtkPackType indicating whether the child is packed with reference to the start or end of the parent", + GTK_TYPE_PACK_TYPE, GTK_PACK_START, + G_PARAM_READWRITE)); + gtk_container_class_install_child_property (container_class, + CHILD_PROP_POSITION, + g_param_spec_int ("position", + "Position", + "The index of the child in the parent", + -1, G_MAXINT, 0, + G_PARAM_READABLE)); + + g_object_class_install_property (object_class, + PROP_TITLE, + g_param_spec_string ("title", + "Title", + "The title to display", + NULL, + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, + PROP_SUBTITLE, + g_param_spec_string ("subtitle", + "Subtitle", + "The subtitle to display", + NULL, + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, + PROP_CUSTOM_TITLE, + g_param_spec_object ("custom-title", + "Custom Title", + "Custom title widget to display", + GTK_TYPE_WIDGET, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT | + G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (object_class, + PROP_SPACING, + g_param_spec_int ("spacing", + "Spacing", + "The amount of space between children", + 0, G_MAXINT, + DEFAULT_SPACING, + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, + PROP_HPADDING, + g_param_spec_int ("hpadding", + "Horizontal padding", + "The amount of space to the left and right of children", + 0, G_MAXINT, + DEFAULT_HPADDING, + G_PARAM_READWRITE)); + + g_object_class_install_property (object_class, + PROP_VPADDING, + g_param_spec_int ("vpadding", + "Vertical padding", + "The amount of space to the above and below children", + 0, G_MAXINT, + DEFAULT_VPADDING, + G_PARAM_READWRITE)); + + g_type_class_add_private (object_class, sizeof (GdHeaderBarPrivate)); +} + +static void +gd_header_buildable_add_child (GtkBuildable *buildable, + GtkBuilder *builder, + GObject *child, + const gchar *type) +{ + if (type && strcmp (type, "title") == 0) + gd_header_bar_set_custom_title (GD_HEADER_BAR (buildable), GTK_WIDGET (child)); + else if (!type) + gtk_container_add (GTK_CONTAINER (buildable), GTK_WIDGET (child)); + else + GTK_BUILDER_WARN_INVALID_CHILD_TYPE (GD_HEADER_BAR (buildable), type); +} + +static void +gd_header_buildable_init (GtkBuildableIface *iface) +{ + iface->add_child = gd_header_buildable_add_child; +} + +void +gd_header_bar_pack_start (GdHeaderBar *bar, + GtkWidget *child) +{ + gd_header_bar_pack (bar, child, GTK_PACK_START); +} + +void +gd_header_bar_pack_end (GdHeaderBar *bar, + GtkWidget *child) +{ + gd_header_bar_pack (bar, child, GTK_PACK_END); +} + +GtkWidget * +gd_header_bar_new (void) +{ + return GTK_WIDGET (g_object_new (GD_TYPE_HEADER_BAR, NULL)); +} diff -Nru devhelp-3.8.0/libgd/libgd/gd-header-bar.h devhelp-3.8.2/libgd/libgd/gd-header-bar.h --- devhelp-3.8.0/libgd/libgd/gd-header-bar.h 1970-01-01 00:00:00.000000000 +0000 +++ devhelp-3.8.2/libgd/libgd/gd-header-bar.h 2013-04-17 07:27:09.000000000 +0000 @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __GD_HEADER_BAR_H__ +#define __GD_HEADER_BAR_H__ + +#include + +G_BEGIN_DECLS + +#define GD_TYPE_HEADER_BAR (gd_header_bar_get_type ()) +#define GD_HEADER_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GD_TYPE_HEADER_BAR, GdHeaderBar)) +#define GD_HEADER_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GD_TYPE_HEADER_BAR, GdHeaderBarClass)) +#define GD_IS_HEADER_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GD_TYPE_HEADER_BAR)) +#define GD_IS_HEADER_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GD_TYPE_HEADER_BAR)) +#define GD_HEADER_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GD_TYPE_HEADER_BAR, GdHeaderBarClass)) + +typedef struct _GdHeaderBar GdHeaderBar; +typedef struct _GdHeaderBarPrivate GdHeaderBarPrivate; +typedef struct _GdHeaderBarClass GdHeaderBarClass; + +struct _GdHeaderBar +{ + GtkContainer container; + + /*< private >*/ + GdHeaderBarPrivate *priv; +}; + +struct _GdHeaderBarClass +{ + GtkContainerClass parent_class; + + /* Padding for future expansion */ + void (*_gd_reserved1) (void); + void (*_gd_reserved2) (void); + void (*_gd_reserved3) (void); + void (*_gd_reserved4) (void); +}; + +GType gd_header_bar_get_type (void) G_GNUC_CONST; +GtkWidget *gd_header_bar_new (void); +void gd_header_bar_set_title (GdHeaderBar *bar, + const char *title); +const char * gd_header_bar_get_title (GdHeaderBar *bar); +void gd_header_bar_set_subtitle (GdHeaderBar *bar, + const gchar *subtitle); +const gchar *gd_header_bar_get_subtitle (GdHeaderBar *bar); +void gd_header_bar_set_custom_title (GdHeaderBar *bar, + GtkWidget *title_widget); +GtkWidget * gd_header_bar_get_custom_title (GdHeaderBar *bar); +void gd_header_bar_pack_start (GdHeaderBar *bar, + GtkWidget *child); +void gd_header_bar_pack_end (GdHeaderBar *bar, + GtkWidget *child); + +G_END_DECLS + +#endif /* __GD_HEADER_BAR_H__ */ diff -Nru devhelp-3.8.0/libgd/libgd/gd-header-button.c devhelp-3.8.2/libgd/libgd/gd-header-button.c --- devhelp-3.8.0/libgd/libgd/gd-header-button.c 1970-01-01 00:00:00.000000000 +0000 +++ devhelp-3.8.2/libgd/libgd/gd-header-button.c 2013-04-17 07:27:09.000000000 +0000 @@ -0,0 +1,488 @@ +/* + * Copyright (c) 2013 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "gd-header-button.h" + +typedef GTypeInterface GdHeaderButtonIface; +typedef GdHeaderButtonIface GdHeaderButtonInterface; +#define GD_HEADER_BUTTON_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GD_TYPE_HEADER_BUTTON, GdHeaderButtonIface)) + +G_DEFINE_INTERFACE (GdHeaderButton, gd_header_button, GTK_TYPE_BUTTON) + +enum { + PROP_0, + PROP_LABEL, + PROP_USE_MARKUP, + PROP_SYMBOLIC_ICON_NAME +}; + +static void +gd_header_button_default_init (GdHeaderButtonIface *iface) +{ + GParamSpec *pspec; + + /** + * GdHeaderButton:label: + * + * The label of the #GdHeaderButton object. + */ + pspec = g_param_spec_string ("label", + "Text label", + "Label displayed by the button", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS); + g_object_interface_install_property (iface, pspec); + + /** + * GdHeaderButton:use-markup: + * + * Whether the label of the #GdHeaderButton object should use markup. + */ + pspec = g_param_spec_boolean ("use-markup", + "Use markup", + "Whether the label should use markup", + FALSE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS); + g_object_interface_install_property (iface, pspec); + + /** + * GdHeaderButton:symbolic-icon-name: + * + * The symbolic icon name of the #GdHeaderButton object. + */ + pspec = g_param_spec_string ("symbolic-icon-name", + "Symbolic icon name", + "The name of the symbolic icon displayed by the button", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS); + g_object_interface_install_property (iface, pspec); +} + +/** + * gd_header_button_get_label: + * @self: + * + * Returns: (transfer full): + */ +gchar * +gd_header_button_get_label (GdHeaderButton *self) +{ + gchar *label; + g_object_get (self, "label", &label, NULL); + + return label; +} + +/** + * gd_header_button_set_label: + * @self: + * @label: (allow-none): + * + */ +void +gd_header_button_set_label (GdHeaderButton *self, + const gchar *label) +{ + g_object_set (self, "label", label, NULL); +} + +/** + * gd_header_button_get_symbolic_icon_name: + * @self: + * + * Returns: (transfer full): + */ +gchar * +gd_header_button_get_symbolic_icon_name (GdHeaderButton *self) +{ + gchar *symbolic_icon_name; + g_object_get (self, "symbolic-icon-name", &symbolic_icon_name, NULL); + + return symbolic_icon_name; +} + +/** + * gd_header_button_set_symbolic_icon_name: + * @self: + * @symbolic_icon_name: (allow-none): + * + */ +void +gd_header_button_set_symbolic_icon_name (GdHeaderButton *self, + const gchar *symbolic_icon_name) +{ + if (symbolic_icon_name != NULL && + !g_str_has_suffix (symbolic_icon_name, "-symbolic")) + { + g_warning ("gd_header_button_set_symbolic_icon_name was called with " + "a non-symbolic name."); + return; + } + + g_object_set (self, "symbolic-icon-name", symbolic_icon_name, NULL); +} + +/** + * gd_header_button_get_use_markup: + * @self: + * + * Returns: + */ +gboolean +gd_header_button_get_use_markup (GdHeaderButton *self) +{ + gboolean use_markup; + + g_object_get (self, "use-markup", &use_markup, NULL); + return use_markup; +} + +/** + * gd_header_button_set_use_markup: + * @self: + * @use_markup: + * + */ +void +gd_header_button_set_use_markup (GdHeaderButton *self, + gboolean use_markup) +{ + g_object_set (self, "use-markup", use_markup, NULL); +} + +/* generic implementation for all private subclasses */ +typedef struct _GdHeaderButtonPrivate GdHeaderButtonPrivate; +struct _GdHeaderButtonPrivate { + gchar *label; + gchar *symbolic_icon_name; + + gboolean use_markup; +}; + +#define GET_PRIVATE(inst) G_TYPE_INSTANCE_GET_PRIVATE (inst, G_OBJECT_TYPE (inst), GdHeaderButtonPrivate) +#define GET_PARENT_CLASS(inst) g_type_class_peek_parent (G_OBJECT_GET_CLASS (inst)) + +static void +rebuild_child (GdHeaderButton *self) +{ + GdHeaderButtonPrivate *priv = GET_PRIVATE (self); + GtkStyleContext *context; + GtkWidget *button_child, *label; + + gtk_widget_set_valign (GTK_WIDGET (self), GTK_ALIGN_CENTER); + + button_child = gtk_bin_get_child (GTK_BIN (self)); + if (button_child != NULL) + gtk_widget_destroy (button_child); + + button_child = NULL; + context = gtk_widget_get_style_context (GTK_WIDGET (self)); + + if (priv->symbolic_icon_name != NULL) + { + button_child = gtk_image_new_from_icon_name (priv->symbolic_icon_name, GTK_ICON_SIZE_MENU); + if (priv->label != NULL) + gtk_widget_set_tooltip_text (GTK_WIDGET (self), priv->label); + + gtk_style_context_remove_class (context, "text-button"); + gtk_style_context_add_class (context, "image-button"); + } + else if (priv->label != NULL) + { + label = gtk_label_new (priv->label); + gtk_label_set_use_markup (GTK_LABEL (label), priv->use_markup); + + if (GTK_IS_MENU_BUTTON (self)) + { + GtkWidget *arrow; + + button_child = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_container_add (GTK_CONTAINER (button_child), label); + + arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE); + gtk_container_add (GTK_CONTAINER (button_child), arrow); + } + else + { + button_child = label; + } + + gtk_style_context_remove_class (context, "image-button"); + gtk_style_context_add_class (context, "text-button"); + } + + if (button_child) + { + gtk_widget_show_all (button_child); + gtk_container_add (GTK_CONTAINER (self), button_child); + } +} + +static void +button_set_label (GdHeaderButton *self, + const gchar *label) +{ + GdHeaderButtonPrivate *priv = GET_PRIVATE (self); + + if (g_strcmp0 (priv->label, label) != 0) + { + g_free (priv->label); + priv->label = g_strdup (label); + + rebuild_child (self); + g_object_notify (G_OBJECT (self), "label"); + } +} + +static void +button_set_use_markup (GdHeaderButton *self, + gboolean use_markup) +{ + GdHeaderButtonPrivate *priv = GET_PRIVATE (self); + + if (priv->use_markup != use_markup) + { + priv->use_markup = use_markup; + + rebuild_child (self); + g_object_notify (G_OBJECT (self), "use-markup"); + } +} + +static void +button_set_symbolic_icon_name (GdHeaderButton *self, + const gchar *symbolic_icon_name) +{ + GdHeaderButtonPrivate *priv = GET_PRIVATE (self); + + if (g_strcmp0 (priv->symbolic_icon_name, symbolic_icon_name) != 0) + { + g_free (priv->symbolic_icon_name); + priv->symbolic_icon_name = g_strdup (symbolic_icon_name); + + rebuild_child (self); + g_object_notify (G_OBJECT (self), "symbolic-icon-name"); + } +} + +static void +gd_header_button_generic_finalize (GObject *object) +{ + GdHeaderButton *self = GD_HEADER_BUTTON (object); + GdHeaderButtonPrivate *priv = GET_PRIVATE (self); + + g_free (priv->label); + g_free (priv->symbolic_icon_name); + + G_OBJECT_CLASS (GET_PARENT_CLASS (object))->finalize (object); +} + +static void +gd_header_button_generic_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + GdHeaderButton *self = GD_HEADER_BUTTON (object); + + switch (prop_id) + { + case PROP_LABEL: + button_set_label (self, g_value_get_string (value)); + break; + case PROP_USE_MARKUP: + button_set_use_markup (self, g_value_get_boolean (value)); + break; + case PROP_SYMBOLIC_ICON_NAME: + button_set_symbolic_icon_name (self, g_value_get_string (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gd_header_button_generic_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GdHeaderButton *self = GD_HEADER_BUTTON (object); + GdHeaderButtonPrivate *priv = GET_PRIVATE (self); + + switch (prop_id) + { + case PROP_LABEL: + g_value_set_string (value, priv->label); + break; + case PROP_USE_MARKUP: + g_value_set_boolean (value, priv->use_markup); + break; + case PROP_SYMBOLIC_ICON_NAME: + g_value_set_string (value, priv->symbolic_icon_name); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +gd_header_button_generic_iface_init (GdHeaderButtonIface *iface) +{ +} + +static void +gd_header_button_generic_class_init (gpointer klass) +{ + GObjectClass *oclass = G_OBJECT_CLASS (klass); + + oclass->get_property = gd_header_button_generic_get_property; + oclass->set_property = gd_header_button_generic_set_property; + oclass->finalize = gd_header_button_generic_finalize; + + g_object_class_override_property (oclass, PROP_LABEL, "label"); + g_object_class_override_property (oclass, PROP_USE_MARKUP, "use-markup"); + g_object_class_override_property (oclass, PROP_SYMBOLIC_ICON_NAME, "symbolic-icon-name"); + + g_type_class_add_private (klass, sizeof (GdHeaderButtonPrivate)); +} + +/* private subclasses */ +typedef GtkButtonClass GdHeaderSimpleButtonClass; +G_DEFINE_TYPE_WITH_CODE (GdHeaderSimpleButton, gd_header_simple_button, GTK_TYPE_BUTTON, + G_IMPLEMENT_INTERFACE (GD_TYPE_HEADER_BUTTON, gd_header_button_generic_iface_init)) + +static void +gd_header_simple_button_class_init (GdHeaderSimpleButtonClass *klass) +{ + gd_header_button_generic_class_init (klass); +} + +static void +gd_header_simple_button_init (GdHeaderSimpleButton *self) +{ +} + +typedef GtkToggleButtonClass GdHeaderToggleButtonClass; +G_DEFINE_TYPE_WITH_CODE (GdHeaderToggleButton, gd_header_toggle_button, GTK_TYPE_TOGGLE_BUTTON, + G_IMPLEMENT_INTERFACE (GD_TYPE_HEADER_BUTTON, gd_header_button_generic_iface_init)) + +static void +gd_header_toggle_button_class_init (GdHeaderToggleButtonClass *klass) +{ + gd_header_button_generic_class_init (klass); +} + +static void +gd_header_toggle_button_init (GdHeaderToggleButton *self) +{ +} + +typedef GtkMenuButtonClass GdHeaderMenuButtonClass; +G_DEFINE_TYPE_WITH_CODE (GdHeaderMenuButton, gd_header_menu_button, GTK_TYPE_MENU_BUTTON, + G_IMPLEMENT_INTERFACE (GD_TYPE_HEADER_BUTTON, gd_header_button_generic_iface_init)) + +static void +gd_header_menu_button_class_init (GdHeaderMenuButtonClass *klass) +{ + gd_header_button_generic_class_init (klass); +} + +static void +gd_header_menu_button_init (GdHeaderMenuButton *self) +{ +} + +typedef GtkRadioButtonClass GdHeaderRadioButtonClass; +G_DEFINE_TYPE_WITH_CODE (GdHeaderRadioButton, gd_header_radio_button, GTK_TYPE_RADIO_BUTTON, + G_IMPLEMENT_INTERFACE (GD_TYPE_HEADER_BUTTON, gd_header_button_generic_iface_init)) + +static void +gd_header_radio_button_constructed (GObject *object) +{ + GdHeaderRadioButton *self = (GdHeaderRadioButton *) (object); + + G_OBJECT_CLASS (GET_PARENT_CLASS (object))->constructed (object); + + gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (self), FALSE); +} + +static void +gd_header_radio_button_class_init (GdHeaderRadioButtonClass *klass) +{ + GObjectClass *oclass = G_OBJECT_CLASS (klass); + + oclass->constructed = gd_header_radio_button_constructed; + + gd_header_button_generic_class_init (klass); +} + +static void +gd_header_radio_button_init (GdHeaderRadioButton *self) +{ +} + +/** + * gd_header_simple_button_new: + * + * Returns: (transfer none): + */ +GtkWidget * +gd_header_simple_button_new (void) +{ + return g_object_new (GD_TYPE_HEADER_SIMPLE_BUTTON, NULL); +} + +/** + * gd_header_toggle_button_new: + * + * Returns: (transfer none): + */ +GtkWidget * +gd_header_toggle_button_new (void) +{ + return g_object_new (GD_TYPE_HEADER_TOGGLE_BUTTON, NULL); +} + +/** + * gd_header_radio_button_new: + * + * Returns: (transfer none): + */ +GtkWidget * +gd_header_radio_button_new (void) +{ + return g_object_new (GD_TYPE_HEADER_RADIO_BUTTON, NULL); +} + +/** + * gd_header_menu_button_new: + * + * Returns: (transfer none): + */ +GtkWidget * +gd_header_menu_button_new (void) +{ + return g_object_new (GD_TYPE_HEADER_MENU_BUTTON, NULL); +} diff -Nru devhelp-3.8.0/libgd/libgd/gd-header-button.h devhelp-3.8.2/libgd/libgd/gd-header-button.h --- devhelp-3.8.0/libgd/libgd/gd-header-button.h 1970-01-01 00:00:00.000000000 +0000 +++ devhelp-3.8.2/libgd/libgd/gd-header-button.h 2013-04-17 07:27:09.000000000 +0000 @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2013 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __GD_HEADER_BUTTON_H__ +#define __GD_HEADER_BUTTON_H__ + +#include + +G_BEGIN_DECLS + +#define GD_TYPE_HEADER_BUTTON (gd_header_button_get_type ()) +#define GD_HEADER_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GD_TYPE_HEADER_BUTTON, GdHeaderButton)) +#define GD_IS_HEADER_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GD_TYPE_HEADER_BUTTON)) + +typedef struct _GdHeaderButton GdHeaderButton; + +GType gd_header_button_get_type (void) G_GNUC_CONST; + +void gd_header_button_set_label (GdHeaderButton *self, + const gchar *label); +void gd_header_button_set_symbolic_icon_name (GdHeaderButton *self, + const gchar *symbolic_icon_name); +gchar * gd_header_button_get_label (GdHeaderButton *self); +gchar * gd_header_button_get_symbolic_icon_name (GdHeaderButton *self); + +#define GD_TYPE_HEADER_SIMPLE_BUTTON (gd_header_simple_button_get_type ()) +typedef GtkButton GdHeaderSimpleButton; +GType gd_header_simple_button_get_type (void) G_GNUC_CONST; +GtkWidget * gd_header_simple_button_new (void); + +#define GD_TYPE_HEADER_TOGGLE_BUTTON (gd_header_toggle_button_get_type ()) +typedef GtkToggleButton GdHeaderToggleButton; +GType gd_header_toggle_button_get_type (void) G_GNUC_CONST; +GtkWidget * gd_header_toggle_button_new (void); + +#define GD_TYPE_HEADER_RADIO_BUTTON (gd_header_radio_button_get_type ()) +typedef GtkRadioButton GdHeaderRadioButton; +GType gd_header_radio_button_get_type (void) G_GNUC_CONST; +GtkWidget * gd_header_radio_button_new (void); + +#define GD_TYPE_HEADER_MENU_BUTTON (gd_header_menu_button_get_type ()) +typedef GtkMenuButton GdHeaderMenuButton; +GType gd_header_menu_button_get_type (void) G_GNUC_CONST; +GtkWidget * gd_header_menu_button_new (void); + +G_END_DECLS + +#endif /* __GD_HEADER_BUTTON_H__ */ diff -Nru devhelp-3.8.0/libgd/libgd/gd-main-toolbar.c devhelp-3.8.2/libgd/libgd/gd-main-toolbar.c --- devhelp-3.8.0/libgd/libgd/gd-main-toolbar.c 2013-03-25 14:35:45.000000000 +0000 +++ devhelp-3.8.2/libgd/libgd/gd-main-toolbar.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,559 +0,0 @@ -/* - * Copyright (c) 2011, 2012 Red Hat, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Author: Cosimo Cecchi - * - */ - -#include "gd-main-toolbar.h" - -#include -#include - -G_DEFINE_TYPE (GdMainToolbar, gd_main_toolbar, GTK_TYPE_TOOLBAR) - -typedef enum { - CHILD_NORMAL = 0, - CHILD_TOGGLE = 1, - CHILD_MENU = 2, -} ChildType; - -struct _GdMainToolbarPrivate { - GtkSizeGroup *size_group; - GtkSizeGroup *vertical_size_group; - - GtkToolItem *left_group; - GtkToolItem *center_group; - GtkToolItem *right_group; - - GtkWidget *left_grid; - GtkWidget *center_grid; - - GtkWidget *labels_grid; - GtkWidget *title_label; - GtkWidget *detail_label; - - GtkWidget *modes_box; - - GtkWidget *center_menu; - GtkWidget *center_menu_child; - - GtkWidget *right_grid; - - gboolean show_modes; -}; - -static void -gd_main_toolbar_dispose (GObject *obj) -{ - GdMainToolbar *self = GD_MAIN_TOOLBAR (obj); - - g_clear_object (&self->priv->size_group); - g_clear_object (&self->priv->vertical_size_group); - - G_OBJECT_CLASS (gd_main_toolbar_parent_class)->dispose (obj); -} - -static GtkWidget * -get_empty_button (ChildType type) -{ - GtkWidget *button; - - switch (type) - { - case CHILD_MENU: - button = gtk_menu_button_new (); - break; - case CHILD_TOGGLE: - button = gtk_toggle_button_new (); - break; - case CHILD_NORMAL: - default: - button = gtk_button_new (); - break; - } - - return button; -} - -static GtkWidget * -get_symbolic_button (const gchar *icon_name, - ChildType type) -{ - GtkWidget *button, *w; - - switch (type) - { - case CHILD_MENU: - button = gtk_menu_button_new (); - gtk_widget_destroy (gtk_bin_get_child (GTK_BIN (button))); - break; - case CHILD_TOGGLE: - button = gtk_toggle_button_new (); - break; - case CHILD_NORMAL: - default: - button = gtk_button_new (); - break; - } - - gtk_style_context_add_class (gtk_widget_get_style_context (button), "raised"); - gtk_style_context_add_class (gtk_widget_get_style_context (button), "image-button"); - - w = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU); - gtk_widget_show (w); - gtk_container_add (GTK_CONTAINER (button), w); - - return button; -} - -static GtkWidget * -get_text_button (const gchar *label, - ChildType type) -{ - GtkWidget *button, *w; - - switch (type) - { - case CHILD_MENU: - button = gtk_menu_button_new (); - gtk_widget_destroy (gtk_bin_get_child (GTK_BIN (button))); - - w = gtk_label_new (label); - gtk_widget_show (w); - gtk_container_add (GTK_CONTAINER (button), w); - break; - case CHILD_TOGGLE: - button = gtk_toggle_button_new_with_label (label); - break; - case CHILD_NORMAL: - default: - button = gtk_button_new_with_label (label); - break; - } - - gtk_widget_set_vexpand (button, TRUE); - gtk_style_context_add_class (gtk_widget_get_style_context (button), "raised"); - gtk_style_context_add_class (gtk_widget_get_style_context (button), "text-button"); - - return button; -} - -static GtkSizeGroup * -get_vertical_size_group (GdMainToolbar *self) -{ - GtkSizeGroup *retval; - GtkWidget *dummy; - GtkToolItem *container; - - dummy = get_text_button ("Dummy", CHILD_NORMAL); - container = gtk_tool_item_new (); - gtk_widget_set_no_show_all (GTK_WIDGET (container), TRUE); - gtk_container_add (GTK_CONTAINER (container), dummy); - gtk_toolbar_insert (GTK_TOOLBAR (self), container, -1); - - retval = gtk_size_group_new (GTK_SIZE_GROUP_VERTICAL); - gtk_size_group_add_widget (retval, dummy); - - return retval; -} - -static void -gd_main_toolbar_constructed (GObject *obj) -{ - GdMainToolbar *self = GD_MAIN_TOOLBAR (obj); - GtkToolbar *tb = GTK_TOOLBAR (obj); - GtkWidget *grid; - - G_OBJECT_CLASS (gd_main_toolbar_parent_class)->constructed (obj); - - self->priv->vertical_size_group = get_vertical_size_group (self); - - /* left section */ - self->priv->left_group = gtk_tool_item_new (); - gtk_widget_set_margin_right (GTK_WIDGET (self->priv->left_group), 12); - gtk_toolbar_insert (tb, self->priv->left_group, -1); - gtk_size_group_add_widget (self->priv->vertical_size_group, - GTK_WIDGET (self->priv->left_group)); - - /* left button group */ - self->priv->left_grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (self->priv->left_grid), 12); - gtk_container_add (GTK_CONTAINER (self->priv->left_group), self->priv->left_grid); - gtk_widget_set_halign (self->priv->left_grid, GTK_ALIGN_START); - - /* center section */ - self->priv->center_group = gtk_tool_item_new (); - gtk_tool_item_set_expand (self->priv->center_group, TRUE); - gtk_toolbar_insert (tb, self->priv->center_group, -1); - self->priv->center_grid = gtk_grid_new (); - gtk_widget_set_halign (self->priv->center_grid, GTK_ALIGN_CENTER); - gtk_widget_set_valign (self->priv->center_grid, GTK_ALIGN_CENTER); - gtk_container_add (GTK_CONTAINER (self->priv->center_group), self->priv->center_grid); - gtk_size_group_add_widget (self->priv->vertical_size_group, - GTK_WIDGET (self->priv->center_group)); - - /* centered label group */ - self->priv->labels_grid = grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 12); - gtk_container_add (GTK_CONTAINER (self->priv->center_grid), grid); - - self->priv->title_label = gtk_label_new (NULL); - gtk_label_set_ellipsize (GTK_LABEL (self->priv->title_label), PANGO_ELLIPSIZE_END); - gtk_container_add (GTK_CONTAINER (grid), self->priv->title_label); - - self->priv->detail_label = gtk_label_new (NULL); - gtk_label_set_ellipsize (GTK_LABEL (self->priv->detail_label), PANGO_ELLIPSIZE_END); - gtk_widget_set_no_show_all (self->priv->detail_label, TRUE); - gtk_style_context_add_class (gtk_widget_get_style_context (self->priv->detail_label), "dim-label"); - gtk_container_add (GTK_CONTAINER (grid), self->priv->detail_label); - - /* centered mode group */ - self->priv->modes_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); - gtk_box_set_homogeneous (GTK_BOX (self->priv->modes_box), TRUE); - gtk_widget_set_no_show_all (self->priv->modes_box, TRUE); - gtk_style_context_add_class (gtk_widget_get_style_context (self->priv->modes_box), "linked"); - gtk_container_add (GTK_CONTAINER (self->priv->center_grid), self->priv->modes_box); - - /* right section */ - self->priv->right_group = gtk_tool_item_new (); - gtk_widget_set_margin_left (GTK_WIDGET (self->priv->right_group), 12); - gtk_toolbar_insert (tb, self->priv->right_group, -1); - gtk_size_group_add_widget (self->priv->vertical_size_group, - GTK_WIDGET (self->priv->right_group)); - - self->priv->right_grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (self->priv->right_grid), 12); - gtk_container_add (GTK_CONTAINER (self->priv->right_group), self->priv->right_grid); - gtk_widget_set_halign (self->priv->right_grid, GTK_ALIGN_END); - - self->priv->size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - gtk_size_group_add_widget (self->priv->size_group, GTK_WIDGET (self->priv->left_group)); - gtk_size_group_add_widget (self->priv->size_group, GTK_WIDGET (self->priv->right_group)); -} - -static void -gd_main_toolbar_init (GdMainToolbar *self) -{ - self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GD_TYPE_MAIN_TOOLBAR, GdMainToolbarPrivate); -} - -static void -gd_main_toolbar_class_init (GdMainToolbarClass *klass) -{ - GObjectClass *oclass; - - oclass = G_OBJECT_CLASS (klass); - oclass->constructed = gd_main_toolbar_constructed; - oclass->dispose = gd_main_toolbar_dispose; - - g_type_class_add_private (klass, sizeof (GdMainToolbarPrivate)); -} - -void -gd_main_toolbar_clear (GdMainToolbar *self) -{ - /* reset labels */ - gtk_label_set_text (GTK_LABEL (self->priv->title_label), ""); - gtk_label_set_text (GTK_LABEL (self->priv->detail_label), ""); - - /* clear all added buttons */ - gtk_container_foreach (GTK_CONTAINER (self->priv->left_grid), - (GtkCallback) gtk_widget_destroy, self); - gtk_container_foreach (GTK_CONTAINER (self->priv->modes_box), - (GtkCallback) gtk_widget_destroy, self); - gtk_container_foreach (GTK_CONTAINER (self->priv->right_grid), - (GtkCallback) gtk_widget_destroy, self); -} - -/** - * gd_main_toolbar_set_labels: - * @self: - * @primary: (allow-none): - * @detail: (allow-none): - * - */ -void -gd_main_toolbar_set_labels (GdMainToolbar *self, - const gchar *primary, - const gchar *detail) -{ - gchar *real_primary = NULL; - - if (primary != NULL) - real_primary = g_markup_printf_escaped ("%s", primary); - - if (real_primary == NULL) - { - gtk_label_set_markup (GTK_LABEL (self->priv->title_label), ""); - gtk_widget_hide (self->priv->title_label); - } - else - { - gtk_label_set_markup (GTK_LABEL (self->priv->title_label), real_primary); - gtk_widget_show (self->priv->title_label); - } - - if (detail == NULL) - { - gtk_label_set_text (GTK_LABEL (self->priv->detail_label), ""); - gtk_widget_hide (self->priv->detail_label); - } - else - { - gtk_label_set_text (GTK_LABEL (self->priv->detail_label), detail); - gtk_widget_show (self->priv->detail_label); - } - - g_free (real_primary); -} - -GtkWidget * -gd_main_toolbar_new (void) -{ - return g_object_new (GD_TYPE_MAIN_TOOLBAR, NULL); -} - -static GtkWidget * -add_button_internal (GdMainToolbar *self, - const gchar *icon_name, - const gchar *label, - gboolean pack_start, - ChildType type) -{ - GtkWidget *button; - - if (icon_name != NULL) - { - button = get_symbolic_button (icon_name, type); - if (label != NULL) - gtk_widget_set_tooltip_text (button, label); - } - else if (label != NULL) - { - button = get_text_button (label, type); - } - else - { - button = get_empty_button (type); - } - - gd_main_toolbar_add_widget (self, button, pack_start); - - gtk_widget_show_all (button); - - return button; -} - -/** - * gd_main_toolbar_set_labels_menu: - * @self: - * @menu: (allow-none): - * - */ -void -gd_main_toolbar_set_labels_menu (GdMainToolbar *self, - GMenuModel *menu) -{ - GtkWidget *button, *grid, *w; - - if (menu == NULL && - ((gtk_widget_get_parent (self->priv->labels_grid) == self->priv->center_grid) || - self->priv->center_menu_child == NULL)) - return; - - if (menu != NULL) - { - g_object_ref (self->priv->labels_grid); - gtk_container_remove (GTK_CONTAINER (self->priv->center_grid), - self->priv->labels_grid); - - self->priv->center_menu_child = grid = gtk_grid_new (); - gtk_grid_set_column_spacing (GTK_GRID (grid), 6); - gtk_container_add (GTK_CONTAINER (grid), self->priv->labels_grid); - g_object_unref (self->priv->labels_grid); - - w = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE); - gtk_container_add (GTK_CONTAINER (grid), w); - - self->priv->center_menu = button = gtk_menu_button_new (); - gtk_style_context_add_class (gtk_widget_get_style_context (self->priv->center_menu), - "selection-menu"); - gtk_widget_destroy (gtk_bin_get_child (GTK_BIN (button))); - gtk_widget_set_halign (button, GTK_ALIGN_CENTER); - gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (button), menu); - gtk_container_add (GTK_CONTAINER (self->priv->center_menu), grid); - - gtk_container_add (GTK_CONTAINER (self->priv->center_grid), button); - } - else - { - g_object_ref (self->priv->labels_grid); - gtk_container_remove (GTK_CONTAINER (self->priv->center_menu_child), - self->priv->labels_grid); - gtk_widget_destroy (self->priv->center_menu); - - self->priv->center_menu = NULL; - self->priv->center_menu_child = NULL; - - gtk_container_add (GTK_CONTAINER (self->priv->center_grid), - self->priv->labels_grid); - g_object_unref (self->priv->labels_grid); - } - - gtk_widget_show_all (self->priv->center_grid); -} - -/** - * gd_main_toolbar_add_mode: - * @self: - * @label: - * - * Returns: (transfer none): - */ -GtkWidget * -gd_main_toolbar_add_mode (GdMainToolbar *self, - const gchar *label) -{ - GtkWidget *button; - GList *group; - - button = gtk_radio_button_new_with_label (NULL, label); - gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE); - gtk_widget_set_size_request (button, 100, -1); - gtk_widget_set_vexpand (button, TRUE); - gtk_style_context_add_class (gtk_widget_get_style_context (button), "raised"); - gtk_style_context_add_class (gtk_widget_get_style_context (button), "text-button"); - - group = gtk_container_get_children (GTK_CONTAINER (self->priv->modes_box)); - if (group != NULL) - { - gtk_radio_button_join_group (GTK_RADIO_BUTTON (button), GTK_RADIO_BUTTON (group->data)); - g_list_free (group); - } - - gtk_container_add (GTK_CONTAINER (self->priv->modes_box), button); - gtk_widget_show (button); - - return button; -} - -/** - * gd_main_toolbar_add_button: - * @self: - * @icon_name: (allow-none): - * @label: (allow-none): - * @pack_start: - * - * Returns: (transfer none): - */ -GtkWidget * -gd_main_toolbar_add_button (GdMainToolbar *self, - const gchar *icon_name, - const gchar *label, - gboolean pack_start) -{ - return add_button_internal (self, icon_name, label, pack_start, CHILD_NORMAL); -} - -/** - * gd_main_toolbar_add_menu: - * @self: - * @icon_name: (allow-none): - * @label: (allow-none): - * @pack_start: - * - * Returns: (transfer none): - */ -GtkWidget * -gd_main_toolbar_add_menu (GdMainToolbar *self, - const gchar *icon_name, - const gchar *label, - gboolean pack_start) -{ - return add_button_internal (self, icon_name, label, pack_start, CHILD_MENU); -} - -/** - * gd_main_toolbar_add_toggle: - * @self: - * @icon_name: (allow-none): - * @label: (allow-none): - * @pack_start: - * - * Returns: (transfer none): - */ -GtkWidget * -gd_main_toolbar_add_toggle (GdMainToolbar *self, - const gchar *icon_name, - const gchar *label, - gboolean pack_start) -{ - return add_button_internal (self, icon_name, label, pack_start, CHILD_TOGGLE); -} - -/** - * gd_main_toolbar_add_widget: - * @self: - * @widget: - * @pack_start: - * - */ -void -gd_main_toolbar_add_widget (GdMainToolbar *self, - GtkWidget *widget, - gboolean pack_start) -{ - if (pack_start) - gtk_container_add (GTK_CONTAINER (self->priv->left_grid), widget); - else - gtk_container_add (GTK_CONTAINER (self->priv->right_grid), widget); -} - -gboolean -gd_main_toolbar_get_show_modes (GdMainToolbar *self) -{ - return self->priv->show_modes; -} - -void -gd_main_toolbar_set_show_modes (GdMainToolbar *self, - gboolean show_modes) -{ - if (self->priv->show_modes == show_modes) - return; - - self->priv->show_modes = show_modes; - if (self->priv->show_modes) - { - gtk_widget_set_no_show_all (self->priv->labels_grid, TRUE); - gtk_widget_hide (self->priv->labels_grid); - - gtk_widget_set_valign (self->priv->center_grid, GTK_ALIGN_FILL); - gtk_widget_set_no_show_all (self->priv->modes_box, FALSE); - gtk_widget_show_all (self->priv->modes_box); - } - else - { - gtk_widget_set_no_show_all (self->priv->modes_box, TRUE); - gtk_widget_hide (self->priv->modes_box); - - gtk_widget_set_valign (self->priv->center_grid, GTK_ALIGN_CENTER); - gtk_widget_set_no_show_all (self->priv->labels_grid, FALSE); - gtk_widget_show_all (self->priv->labels_grid); - } -} diff -Nru devhelp-3.8.0/libgd/libgd/gd-main-toolbar.h devhelp-3.8.2/libgd/libgd/gd-main-toolbar.h --- devhelp-3.8.0/libgd/libgd/gd-main-toolbar.h 2013-03-25 14:35:45.000000000 +0000 +++ devhelp-3.8.2/libgd/libgd/gd-main-toolbar.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2011, 2012 Red Hat, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - * Author: Cosimo Cecchi - * - */ - -#ifndef __GD_MAIN_TOOLBAR_H__ -#define __GD_MAIN_TOOLBAR_H__ - -#include - -#include - -G_BEGIN_DECLS - -#define GD_TYPE_MAIN_TOOLBAR gd_main_toolbar_get_type() - -#define GD_MAIN_TOOLBAR(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ - GD_TYPE_MAIN_TOOLBAR, GdMainToolbar)) - -#define GD_MAIN_TOOLBAR_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), \ - GD_TYPE_MAIN_TOOLBAR, GdMainToolbarClass)) - -#define GD_IS_MAIN_TOOLBAR(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \ - GD_TYPE_MAIN_TOOLBAR)) - -#define GD_IS_MAIN_TOOLBAR_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), \ - GD_TYPE_MAIN_TOOLBAR)) - -#define GD_MAIN_TOOLBAR_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - GD_TYPE_MAIN_TOOLBAR, GdMainToolbarClass)) - -typedef struct _GdMainToolbar GdMainToolbar; -typedef struct _GdMainToolbarClass GdMainToolbarClass; -typedef struct _GdMainToolbarPrivate GdMainToolbarPrivate; - -struct _GdMainToolbar -{ - GtkToolbar parent; - - GdMainToolbarPrivate *priv; -}; - -struct _GdMainToolbarClass -{ - GtkToolbarClass parent_class; -}; - -GType gd_main_toolbar_get_type (void) G_GNUC_CONST; - -GtkWidget *gd_main_toolbar_new (void); - -void gd_main_toolbar_set_labels (GdMainToolbar *self, - const gchar *primary, - const gchar *detail); - -void gd_main_toolbar_set_labels_menu (GdMainToolbar *self, - GMenuModel *menu); - -GtkWidget * gd_main_toolbar_add_mode (GdMainToolbar *self, - const gchar *label); - -void gd_main_toolbar_clear (GdMainToolbar *self); - -GtkWidget * gd_main_toolbar_add_button (GdMainToolbar *self, - const gchar *icon_name, - const gchar *label, - gboolean pack_start); - -GtkWidget * gd_main_toolbar_add_toggle (GdMainToolbar *self, - const gchar *icon_name, - const gchar *label, - gboolean pack_start); - -GtkWidget * gd_main_toolbar_add_menu (GdMainToolbar *self, - const gchar *icon_name, - const gchar *label, - gboolean pack_start); - -void gd_main_toolbar_add_widget (GdMainToolbar *self, - GtkWidget *widget, - gboolean pack_start); - -gboolean gd_main_view_get_show_modes (GdMainToolbar *self); - -void gd_main_view_set_show_modes (GdMainToolbar *self, - gboolean show_modes); - -G_END_DECLS - -#endif /* __GD_MAIN_TOOLBAR_H__ */ diff -Nru devhelp-3.8.0/libgd/libgd/gd.h devhelp-3.8.2/libgd/libgd/gd.h --- devhelp-3.8.0/libgd/libgd/gd.h 2013-03-25 14:35:45.000000000 +0000 +++ devhelp-3.8.2/libgd/libgd/gd.h 2013-04-17 07:27:09.000000000 +0000 @@ -44,6 +44,10 @@ # include #endif +#ifdef LIBGD_MAIN_LIST_VIEW +# include +#endif + #ifdef LIBGD_MAIN_VIEW # include #endif @@ -52,6 +56,14 @@ # include #endif +#ifdef LIBGD_HEADER_BAR +# include +#endif + +#ifdef LIBGD__HEADER_BUTTON +# include +#endif + #ifdef LIBGD_MARGIN_CONTAINER # include #endif @@ -64,6 +76,15 @@ # include #endif +#ifdef LIBGD_REVEALER +# include +#endif + +#ifdef LIBGD_STACK +# include +# include +#endif + G_END_DECLS #endif /* __GD_H__ */ diff -Nru devhelp-3.8.0/libgd/libgd.m4 devhelp-3.8.2/libgd/libgd.m4 --- devhelp-3.8.0/libgd/libgd.m4 2013-03-25 14:35:45.000000000 +0000 +++ devhelp-3.8.2/libgd/libgd.m4 2013-04-17 07:27:09.000000000 +0000 @@ -38,7 +38,7 @@ AC_REQUIRE([LT_INIT]) AC_REQUIRE([AC_CHECK_LIBM]) AC_SUBST(LIBM) - LIBGD_MODULES="gtk+-3.0 >= 3.6" + LIBGD_MODULES="gtk+-3.0 >= 3.7.10" LIBGD_GIR_INCLUDES="Gtk-3.0" LIBGD_SOURCES="" @@ -72,18 +72,20 @@ AC_DEFINE([LIBGD_MAIN_LIST_VIEW], [1], [Description]) ]) - # _view-common: - AM_CONDITIONAL([LIBGD__VIEW_COMMON],[_LIBGD_IF_OPTION_SET([_view-common],[true],[false])]) - _LIBGD_IF_OPTION_SET([_view-common],[ - AC_DEFINE([LIBGD__VIEW_COMMON], [1], [Description]) - ]) - # main-toolbar: AM_CONDITIONAL([LIBGD_MAIN_TOOLBAR],[_LIBGD_IF_OPTION_SET([main-toolbar],[true],[false])]) _LIBGD_IF_OPTION_SET([main-toolbar],[ + _LIBGD_SET_OPTION([_header-button]) AC_DEFINE([LIBGD_MAIN_TOOLBAR], [1], [Description]) ]) + # header-bar: + AM_CONDITIONAL([LIBGD_HEADER_BAR],[_LIBGD_IF_OPTION_SET([header-bar],[true],[false])]) + _LIBGD_IF_OPTION_SET([header-bar],[ + _LIBGD_SET_OPTION([_header-button]) + AC_DEFINE([LIBGD_HEADER_BAR], [1], [Description]) + ]) + # margin-container: AM_CONDITIONAL([LIBGD_MARGIN_CONTAINER],[_LIBGD_IF_OPTION_SET([margin-container],[true],[false])]) _LIBGD_IF_OPTION_SET([margin-container],[ @@ -96,6 +98,19 @@ AC_DEFINE([LIBGD_NOTIFICATION], [1], [Description]) ]) + # revealer: + AM_CONDITIONAL([LIBGD_REVEALER],[_LIBGD_IF_OPTION_SET([revealer],[true],[false])]) + _LIBGD_IF_OPTION_SET([revealer],[ + AC_DEFINE([LIBGD_REVEALER], [1], [Description]) + ]) + + # stack: + AM_CONDITIONAL([LIBGD_STACK],[_LIBGD_IF_OPTION_SET([stack],[true],[false])]) + _LIBGD_IF_OPTION_SET([stack],[ + _LIBGD_SET_OPTION([_header-button]) + AC_DEFINE([LIBGD_STACK], [1], [Description]) + ]) + # tagged-entry: Gtk+ widget AM_CONDITIONAL([LIBGD_TAGGED_ENTRY],[_LIBGD_IF_OPTION_SET([tagged-entry],[true],[false])]) _LIBGD_IF_OPTION_SET([tagged-entry],[ @@ -118,6 +133,18 @@ GOBJECT_INTROSPECTION_REQUIRE([0.9.6]) ]) + # _header-button: + AM_CONDITIONAL([LIBGD__HEADER_BUTTON],[_LIBGD_IF_OPTION_SET([_header-button],[true],[false])]) + _LIBGD_IF_OPTION_SET([_header-button],[ + AC_DEFINE([LIBGD__HEADER_BUTTON], [1], [Description]) + ]) + + # _view-common: + AM_CONDITIONAL([LIBGD__VIEW_COMMON],[_LIBGD_IF_OPTION_SET([_view-common],[true],[false])]) + _LIBGD_IF_OPTION_SET([_view-common],[ + AC_DEFINE([LIBGD__VIEW_COMMON], [1], [Description]) + ]) + PKG_CHECK_MODULES(LIBGD, [ $LIBGD_MODULES ]) AC_SUBST(LIBGD_GIR_INCLUDES) AC_SUBST(LIBGD_SOURCES) diff -Nru devhelp-3.8.0/libgd/test-header-bar.c devhelp-3.8.2/libgd/test-header-bar.c --- devhelp-3.8.0/libgd/test-header-bar.c 1970-01-01 00:00:00.000000000 +0000 +++ devhelp-3.8.2/libgd/test-header-bar.c 2013-04-17 07:27:09.000000000 +0000 @@ -0,0 +1,71 @@ +#include +#include + +static void +on_switch_clicked (GtkWidget *button, + GdHeaderBar *bar) +{ + GtkWidget *image = NULL; + static gboolean use_custom = TRUE; + + if (use_custom) + { + image = gtk_image_new_from_icon_name ("face-wink-symbolic", GTK_ICON_SIZE_MENU); + use_custom = FALSE; + } + else + { + use_custom = TRUE; + } + + gd_header_bar_set_custom_title (bar, image); +} + +gint +main (gint argc, + gchar ** argv) +{ + GtkWidget *window, *bar, *box, *button; + + gtk_init (&argc, &argv); + + if (g_getenv ("RTL")) + gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL); + else + gtk_widget_set_default_direction (GTK_TEXT_DIR_LTR); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (window, 300, 300); + + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_container_add (GTK_CONTAINER (window), box); + + bar = gd_header_bar_new (); + gtk_box_pack_start (GTK_BOX (box), bar, FALSE, TRUE, 0); + + gd_header_bar_set_title (GD_HEADER_BAR (bar), "Title Title Title Title Title Title"); + gd_header_bar_set_subtitle (GD_HEADER_BAR (bar), "Subtitle Subtitle Subtitle Subtitle Subtitle Subtitle"); + button = gtk_button_new_with_label ("Switch"); + gtk_widget_set_valign (button, GTK_ALIGN_CENTER); + gtk_style_context_add_class (gtk_widget_get_style_context (button), GTK_STYLE_CLASS_RAISED); + gd_header_bar_pack_start (GD_HEADER_BAR (bar), button); + g_signal_connect (button, "clicked", G_CALLBACK (on_switch_clicked), bar); + + button = gtk_button_new_with_label ("Done"); + gtk_widget_set_valign (button, GTK_ALIGN_CENTER); + gtk_style_context_add_class (gtk_widget_get_style_context (button), "suggested-action"); + + gd_header_bar_pack_end (GD_HEADER_BAR (bar), button); + + button = gtk_button_new_with_label ("Almost"); + gtk_widget_set_valign (button, GTK_ALIGN_CENTER); + gtk_style_context_add_class (gtk_widget_get_style_context (button), GTK_STYLE_CLASS_RAISED); + gd_header_bar_pack_end (GD_HEADER_BAR (bar), button); + + gtk_widget_show_all (window); + gtk_main (); + + gtk_widget_destroy (window); + + return 0; +} diff -Nru devhelp-3.8.0/libgd/test-revealer.c devhelp-3.8.2/libgd/test-revealer.c --- devhelp-3.8.0/libgd/test-revealer.c 1970-01-01 00:00:00.000000000 +0000 +++ devhelp-3.8.2/libgd/test-revealer.c 2013-04-17 07:27:09.000000000 +0000 @@ -0,0 +1,33 @@ +#include +#include + +gint +main (gint argc, + gchar ** argv) +{ + GtkWidget *window, *revealer, *box, *widget, *entry; + + gtk_init (&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (window, 300, 300); + + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + widget = gtk_toggle_button_new_with_label ("Revealed"); + gtk_container_add (GTK_CONTAINER (box), widget); + gtk_container_add (GTK_CONTAINER (window), box); + + revealer = gd_revealer_new (); + entry = gtk_entry_new (); + gtk_container_add (GTK_CONTAINER (revealer), entry); + gtk_container_add (GTK_CONTAINER (box), revealer); + + g_object_bind_property (widget, "active", revealer, "reveal-child", 0); + + gtk_widget_show_all (window); + gtk_main (); + + gtk_widget_destroy (window); + + return 0; +} diff -Nru devhelp-3.8.0/libgd/test-stack.c devhelp-3.8.2/libgd/test-stack.c --- devhelp-3.8.0/libgd/test-stack.c 1970-01-01 00:00:00.000000000 +0000 +++ devhelp-3.8.2/libgd/test-stack.c 2013-04-17 07:27:09.000000000 +0000 @@ -0,0 +1,177 @@ +#include +#include +#include + +GtkWidget *stack; +GtkWidget *switcher; +GtkWidget *w1; + +static void +set_visible_child (GtkWidget *button, gpointer data) +{ + gd_stack_set_visible_child (GD_STACK (stack), GTK_WIDGET (data)); +} + +static void +set_visible_child_name (GtkWidget *button, gpointer data) +{ + gd_stack_set_visible_child_name (GD_STACK (stack), (const char *)data); +} + +static void +toggle_homogeneous (GtkWidget *button, gpointer data) +{ + gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); + gd_stack_set_homogeneous (GD_STACK (stack), active); +} + +static void +toggle_icon_name (GtkWidget *button, gpointer data) +{ + gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); + gtk_container_child_set (GTK_CONTAINER (stack), w1, + "symbolic-icon-name", active ? "edit-find-symbolic" : NULL, + NULL); +} + +static void +toggle_transitions (GtkWidget *combo, gpointer data) +{ + int id = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); + gd_stack_set_transition_type (GD_STACK (stack), id); +} + +gint +main (gint argc, + gchar ** argv) +{ + GtkWidget *window, *box, *button, *hbox, *combo; + GtkWidget *w2, *w3; + GtkListStore* store; + GtkWidget *tree_view; + GtkTreeViewColumn *column; + GtkCellRenderer *renderer; + GtkWidget *scrolled_win; + int i; + GtkTreeIter iter; + + gtk_init (&argc, &argv); + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_widget_set_size_request (window, 300, 300); + + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_container_add (GTK_CONTAINER (window), box); + + switcher = gd_stack_switcher_new (); + gtk_box_pack_start (GTK_BOX (box), switcher, FALSE, FALSE, 0); + + stack = gd_stack_new (); + + /* Make transitions longer so we can see that they work */ + gd_stack_set_transition_duration (GD_STACK (stack), 500); + + gtk_widget_set_halign (stack, GTK_ALIGN_START); + gtk_container_add (GTK_CONTAINER (box), stack); + + gd_stack_switcher_set_stack (GD_STACK_SWITCHER (switcher), GD_STACK (stack)); + + w1 = gtk_text_view_new (); + gtk_text_buffer_set_text (gtk_text_view_get_buffer (GTK_TEXT_VIEW (w1)), + "This is a\nTest\nBalh!", -1); + + gtk_container_add_with_properties (GTK_CONTAINER (stack), w1, + "name", "1", + "title", "1", + NULL); + + w2 = gtk_button_new_with_label ("Gazoooooooooooooooonk"); + gtk_container_add (GTK_CONTAINER (stack), w2); + gtk_container_child_set (GTK_CONTAINER (stack), w2, + "name", "2", + "title", "2", + NULL); + + + scrolled_win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_widget_set_size_request (scrolled_win, 100, 200); + + + store = gtk_list_store_new (1, G_TYPE_STRING); + + for (i = 0; i < 40; i++) + gtk_list_store_insert_with_values (store, &iter, i, 0, "Testvalule", -1); + + tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); + + gtk_container_add (GTK_CONTAINER (scrolled_win), tree_view); + w3 = scrolled_win; + + renderer = gtk_cell_renderer_text_new (); + column = gtk_tree_view_column_new_with_attributes ("Target", renderer, + "text", 0, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); + + gd_stack_add_titled (GD_STACK (stack), w3, "3", "3"); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_container_add (GTK_CONTAINER (box), hbox); + + button = gtk_button_new_with_label ("1"); + gtk_container_add (GTK_CONTAINER (hbox), button); + g_signal_connect (button, "clicked", (GCallback) set_visible_child, w1); + + button = gtk_button_new_with_label ("2"); + gtk_container_add (GTK_CONTAINER (hbox), button); + g_signal_connect (button, "clicked", (GCallback) set_visible_child, w2); + + button = gtk_button_new_with_label ("3"); + gtk_container_add (GTK_CONTAINER (hbox), button); + g_signal_connect (button, "clicked", (GCallback) set_visible_child, w3); + + button = gtk_button_new_with_label ("1"); + gtk_container_add (GTK_CONTAINER (hbox), button); + g_signal_connect (button, "clicked", (GCallback) set_visible_child_name, (gpointer) "1"); + + button = gtk_button_new_with_label ("2"); + gtk_container_add (GTK_CONTAINER (hbox), button); + g_signal_connect (button, "clicked", (GCallback) set_visible_child_name, (gpointer) "2"); + + button = gtk_button_new_with_label ("3"); + gtk_container_add (GTK_CONTAINER (hbox), button); + g_signal_connect (button, "clicked", (GCallback) set_visible_child_name, (gpointer) "3"); + + button = gtk_check_button_new_with_label ("homogeneous"); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), + gd_stack_get_homogeneous (GD_STACK (stack))); + gtk_container_add (GTK_CONTAINER (hbox), button); + g_signal_connect (button, "clicked", (GCallback) toggle_homogeneous, NULL); + + button = gtk_toggle_button_new_with_label ("Add symbolic icon"); + g_signal_connect (button, "toggled", (GCallback) toggle_icon_name, NULL); + gtk_container_add (GTK_CONTAINER (hbox), button); + + combo = gtk_combo_box_text_new (); + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), + "NONE"); + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), + "CROSSFADE"); + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), + "SLIDE_RIGHT"); + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), + "SLIDE_LEFT"); + gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); + + gtk_container_add (GTK_CONTAINER (hbox), combo); + g_signal_connect (combo, "changed", (GCallback) toggle_transitions, NULL); + + gtk_widget_show_all (window); + gtk_main (); + + gtk_widget_destroy (window); + + return 0; +} diff -Nru devhelp-3.8.0/po/ru.po devhelp-3.8.2/po/ru.po --- devhelp-3.8.0/po/ru.po 2012-12-19 09:49:53.000000000 +0000 +++ devhelp-3.8.2/po/ru.po 2013-05-15 11:05:25.000000000 +0000 @@ -12,9 +12,9 @@ "Project-Id-Version: ru\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=devhelp&keywords=I18N+L10N&component=general\n" -"POT-Creation-Date: 2012-12-16 20:01+0000\n" -"PO-Revision-Date: 2012-12-18 09:55+0400\n" -"Last-Translator: Aleksej Kabanov \n" +"POT-Creation-Date: 2013-04-17 07:37+0000\n" +"PO-Revision-Date: 2013-04-10 10:23+0600\n" +"Last-Translator: Dmitriy S. Seregin \n" "Language-Team: русский \n" "Language: ru\n" "MIME-Version: 1.0\n" @@ -22,12 +22,12 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.5.5\n" #. i18n: Please don't translate "Devhelp" (it's marked as translatable #. * for transliteration only) -#: ../data/devhelp.desktop.in.in.h:1 ../src/dh-app.c:167 ../src/dh-app.c:350 -#: ../src/dh-window.c:958 ../src/dh-window.c:1857 +#: ../data/devhelp.desktop.in.in.h:1 ../src/dh-app.c:162 ../src/dh-app.c:347 +#: ../src/dh-window.c:655 msgid "Devhelp" msgstr "Devhelp" @@ -43,319 +43,251 @@ msgid "documentation;information;manual;developer;api;" msgstr "документация;информация;руководство;разработчик;api;" -#: ../data/devhelp.schemas.in.h:1 +#: ../data/org.gnome.devhelp.gschema.xml.h:1 msgid "Main window maximized state" msgstr "Главное окно в развёрнутом состоянии" -#: ../data/devhelp.schemas.in.h:2 +#: ../data/org.gnome.devhelp.gschema.xml.h:2 msgid "Whether the main window should start maximized." msgstr "Разворачивать ли главное окно при запуске." -#: ../data/devhelp.schemas.in.h:3 +#: ../data/org.gnome.devhelp.gschema.xml.h:3 msgid "Width of the main window" msgstr "Ширина главного окна" -#: ../data/devhelp.schemas.in.h:4 +#: ../data/org.gnome.devhelp.gschema.xml.h:4 msgid "The width of the main window." msgstr "Ширина главного окна." -#: ../data/devhelp.schemas.in.h:5 +#: ../data/org.gnome.devhelp.gschema.xml.h:5 msgid "Height of main window" msgstr "Высота главного окна" -#: ../data/devhelp.schemas.in.h:6 +#: ../data/org.gnome.devhelp.gschema.xml.h:6 msgid "The height of the main window." msgstr "Высота главного окна." -#: ../data/devhelp.schemas.in.h:7 +#: ../data/org.gnome.devhelp.gschema.xml.h:7 msgid "X position of main window" msgstr "Положение главного окна по оси X" -#: ../data/devhelp.schemas.in.h:8 +#: ../data/org.gnome.devhelp.gschema.xml.h:8 msgid "The X position of the main window." msgstr "Положение главного окна по оси X." -#: ../data/devhelp.schemas.in.h:9 +#: ../data/org.gnome.devhelp.gschema.xml.h:9 msgid "Y position of main window" msgstr "Положение главного окна по оси Y" -#: ../data/devhelp.schemas.in.h:10 +#: ../data/org.gnome.devhelp.gschema.xml.h:10 msgid "The Y position of the main window." msgstr "Положение главного окна по оси Y." -#: ../data/devhelp.schemas.in.h:11 -msgid "Width of the assistant window" -msgstr "Ширина окна помощника" - -#: ../data/devhelp.schemas.in.h:12 -msgid "The width of the assistant window." -msgstr "Ширина главного окна." - -#: ../data/devhelp.schemas.in.h:13 -msgid "Height of assistant window" -msgstr "Высота окна помощника" - -#: ../data/devhelp.schemas.in.h:14 -msgid "The height of the assistant window." -msgstr "Высота окна помощника." - -#: ../data/devhelp.schemas.in.h:15 -msgid "X position of assistant window" -msgstr "Положение окна помощника по оси X" - -#: ../data/devhelp.schemas.in.h:16 -msgid "The X position of the assistant window." -msgstr "Положение окна помощника по оси X." - -#: ../data/devhelp.schemas.in.h:17 -msgid "Y position of assistant window" -msgstr "Положение окна помощника по оси Y" - -#: ../data/devhelp.schemas.in.h:18 -msgid "The Y position of the assistant window." -msgstr "Положение окна помощника по оси Y." - -#: ../data/devhelp.schemas.in.h:19 +#: ../data/org.gnome.devhelp.gschema.xml.h:11 msgid "Width of the index and search pane" msgstr "Ширина панели содержания и поиска" -#: ../data/devhelp.schemas.in.h:20 +#: ../data/org.gnome.devhelp.gschema.xml.h:12 msgid "The width of the index and search pane." msgstr "Ширина панели содержания и поиска." -#: ../data/devhelp.schemas.in.h:21 +#: ../data/org.gnome.devhelp.gschema.xml.h:13 msgid "Selected tab: \"content\" or \"search\"" msgstr "Выбранная вкладка: «содержание» или «поиск»" -#: ../data/devhelp.schemas.in.h:22 +#: ../data/org.gnome.devhelp.gschema.xml.h:14 msgid "Which of the tabs is selected: \"content\" or \"search\"." msgstr "Какая из вкладок выбрана: «содержание» или «поиск»." -#: ../data/devhelp.schemas.in.h:23 +#: ../data/org.gnome.devhelp.gschema.xml.h:15 msgid "Books disabled" msgstr "Выключенные книги" -#: ../data/devhelp.schemas.in.h:24 +#: ../data/org.gnome.devhelp.gschema.xml.h:16 msgid "List of books disabled by the user." msgstr "Список книг, выключенных пользователем." -#: ../data/devhelp.schemas.in.h:25 +#: ../data/org.gnome.devhelp.gschema.xml.h:17 msgid "Group by language" msgstr "Группировать по языкам" -#: ../data/devhelp.schemas.in.h:26 +#: ../data/org.gnome.devhelp.gschema.xml.h:18 msgid "Whether books should be grouped by language in the UI" msgstr "Должны ли книги быть сгруппированы в интерфейсе по языкам" -#: ../data/devhelp.schemas.in.h:27 +#: ../data/org.gnome.devhelp.gschema.xml.h:19 +msgid "Width of the assistant window" +msgstr "Ширина окна помощника" + +#: ../data/org.gnome.devhelp.gschema.xml.h:20 +msgid "The width of the assistant window." +msgstr "Ширина главного окна." + +#: ../data/org.gnome.devhelp.gschema.xml.h:21 +msgid "Height of assistant window" +msgstr "Высота окна помощника" + +#: ../data/org.gnome.devhelp.gschema.xml.h:22 +msgid "The height of the assistant window." +msgstr "Высота окна помощника." + +#: ../data/org.gnome.devhelp.gschema.xml.h:23 +msgid "X position of assistant window" +msgstr "Положение окна помощника по оси X" + +#: ../data/org.gnome.devhelp.gschema.xml.h:24 +msgid "The X position of the assistant window." +msgstr "Положение окна помощника по оси X." + +#: ../data/org.gnome.devhelp.gschema.xml.h:25 +msgid "Y position of assistant window" +msgstr "Положение окна помощника по оси Y" + +#: ../data/org.gnome.devhelp.gschema.xml.h:26 +msgid "The Y position of the assistant window." +msgstr "Положение окна помощника по оси Y." + +#: ../data/org.gnome.devhelp.gschema.xml.h:27 msgid "Use system fonts" msgstr "Использовать системные шрифты" -#: ../data/devhelp.schemas.in.h:28 +#: ../data/org.gnome.devhelp.gschema.xml.h:28 msgid "Use the system default fonts." msgstr "Использовать системные шрифты по умолчанию." -#: ../data/devhelp.schemas.in.h:29 +#: ../data/org.gnome.devhelp.gschema.xml.h:29 msgid "Font for text" msgstr "Шрифт для текста" -#: ../data/devhelp.schemas.in.h:30 +#: ../data/org.gnome.devhelp.gschema.xml.h:30 msgid "Font for text with variable width." msgstr "Шрифт для текста с переменной шириной." -#: ../data/devhelp.schemas.in.h:31 +#: ../data/org.gnome.devhelp.gschema.xml.h:31 msgid "Font for fixed width text" msgstr "Шрифт для текста фиксированной ширины" -#: ../data/devhelp.schemas.in.h:32 +#: ../data/org.gnome.devhelp.gschema.xml.h:32 msgid "Font for text with fixed width, such as code examples." msgstr "Шрифт для текста с фиксированной шириной, например, фрагментов кода." -#: ../data/ui/devhelp.builder.h:1 +#: ../misc/gedit-plugin/devhelp.desktop.in.h:1 +msgid "Devhelp support" +msgstr "Поддержка Devhelp" + +#: ../misc/gedit-plugin/devhelp.desktop.in.h:2 +msgid "Makes F2 bring up Devhelp for the word at the cursor" +msgstr "Вызывать Devhelp по нажатию F2 для слова под курсором" + +#: ../misc/gedit-plugin/devhelp.py:69 +msgid "Show API Documentation" +msgstr "Показать документацию по API" + +#: ../misc/gedit-plugin/devhelp.py:71 +msgid "Show API Documentation for the word at the cursor" +msgstr "Показать документацию по API для слова под курсором" + +#: ../src/devhelp.ui.h:1 msgid "New window" msgstr "Новое окно" -#: ../data/ui/devhelp.builder.h:2 +#: ../src/devhelp.ui.h:2 msgid "Preferences" msgstr "Параметры" -#: ../data/ui/devhelp.builder.h:3 +#: ../src/devhelp.ui.h:3 msgid "About Devhelp" msgstr "О программе Devhelp" -#: ../data/ui/devhelp.builder.h:4 +#: ../src/devhelp.ui.h:4 msgid "Quit" msgstr "Закончить" -#: ../data/ui/devhelp.builder.h:5 -msgid "_Window" -msgstr "_Окно" - -#: ../data/ui/devhelp.builder.h:6 +#: ../src/devhelp.ui.h:5 msgid "New _Tab" msgstr "Новая _вкладка" -#: ../data/ui/devhelp.builder.h:7 +#: ../src/devhelp.ui.h:6 msgid "_Print" msgstr "_Печать" -#: ../data/ui/devhelp.builder.h:8 -msgid "_Close" -msgstr "_Закрыть" - -#: ../data/ui/devhelp.builder.h:9 -msgid "_Edit" -msgstr "_Правка" - -#: ../data/ui/devhelp.builder.h:10 -msgid "_Copy" -msgstr "_Копировать" - -#: ../data/ui/devhelp.builder.h:11 +#: ../src/devhelp.ui.h:7 msgid "_Find" msgstr "_Найти" -#: ../data/ui/devhelp.builder.h:12 -msgid "Find _Next" -msgstr "Найти _следующее" - -#: ../data/ui/devhelp.builder.h:13 -msgid "Find _Previous" -msgstr "Найти _предыдущее" - -#: ../data/ui/devhelp.builder.h:14 -msgid "_View" -msgstr "_Вид" - -#: ../data/ui/devhelp.builder.h:15 +#: ../src/devhelp.ui.h:8 msgid "_Larger text" msgstr "У_величить текст" -#: ../data/ui/devhelp.builder.h:16 +#: ../src/devhelp.ui.h:9 msgid "S_maller text" msgstr "У_меньшить текст" -#: ../data/ui/devhelp.builder.h:17 +#: ../src/devhelp.ui.h:10 msgid "_Normal size" msgstr "_Обычный размер" -#: ../data/ui/devhelp.builder.h:18 -msgid "Fullscreen" -msgstr "На полный экран" - -#: ../data/ui/devhelp.builder.h:19 -msgid "_Go" -msgstr "_Перейти" - -#: ../data/ui/devhelp.builder.h:20 -msgid "_Back" -msgstr "_Назад" - -#: ../data/ui/devhelp.builder.h:21 -msgid "_Forward" -msgstr "_Вперёд" - -#: ../data/ui/devhelp.builder.h:22 -msgid "_Search Tab" -msgstr "П_оиск" - -#: ../data/ui/devhelp.builder.h:23 -msgid "_Contents Tab" -msgstr "Сод_ержание" - -#: ../data/ui/devhelp.builder.h:24 -msgid "Go to the previous page" -msgstr "Перейти на предыдущую страницу" - -#: ../data/ui/devhelp.builder.h:25 -msgid "Go to the next page" -msgstr "Перейти на следующую страницу" - -#: ../data/ui/devhelp.builder.h:26 -msgid "Decrease the text size" -msgstr "Уменьшить размер текста" - -#: ../data/ui/devhelp.builder.h:27 -msgid "Increase the text size" -msgstr "Увеличить размер текста" - -#: ../data/ui/devhelp.builder.h:28 +#: ../src/devhelp.ui.h:11 msgid "_Group by language" msgstr "_Группировать по языкам" -#: ../data/ui/devhelp.builder.h:29 +#: ../src/devhelp.ui.h:12 msgid "Enabled" msgstr "Включено" -#: ../data/ui/devhelp.builder.h:30 +#: ../src/devhelp.ui.h:13 msgid "Title" msgstr "Заголовок" -#: ../data/ui/devhelp.builder.h:31 +#: ../src/devhelp.ui.h:14 msgid "Book Shelf" msgstr "Книжная полка" -#: ../data/ui/devhelp.builder.h:32 +#: ../src/devhelp.ui.h:15 msgid "_Use system fonts" msgstr "_Использовать системные шрифты" -#: ../data/ui/devhelp.builder.h:33 +#: ../src/devhelp.ui.h:16 msgid "_Variable width: " msgstr "_Переменная ширина:" -#: ../data/ui/devhelp.builder.h:34 +#: ../src/devhelp.ui.h:17 msgid "_Fixed width:" msgstr "_Постоянная ширина:" -#: ../data/ui/devhelp.builder.h:35 +#: ../src/devhelp.ui.h:18 msgid "Fonts" msgstr "Шрифты" -#: ../misc/gedit-plugin/devhelp.desktop.in.h:1 -msgid "Devhelp support" -msgstr "Поддержка Devhelp" - -#: ../misc/gedit-plugin/devhelp.desktop.in.h:2 -msgid "Makes F2 bring up Devhelp for the word at the cursor" -msgstr "Вызывать Devhelp по нажатию F2 для слова под курсором" - -#: ../misc/gedit-plugin/devhelp.py:69 -msgid "Show API Documentation" -msgstr "Показать документацию по API" - -#: ../misc/gedit-plugin/devhelp.py:71 -msgid "Show API Documentation for the word at the cursor" -msgstr "Показать документацию по API для слова под курсором" - -#: ../src/dh-app.c:162 +#: ../src/dh-app.c:157 msgid "translator_credits" msgstr "" "Валек Филиппов \n" "Сергей Сафонов " -#: ../src/dh-app.c:169 +#: ../src/dh-app.c:164 msgid "A developers' help browser for GNOME" msgstr "Программа просмотра справки GNOME для разработчиков" -#: ../src/dh-app.c:177 +#: ../src/dh-app.c:172 msgid "DevHelp Website" msgstr "Веб-сайт Devhelp" #. i18n: Please don't translate "Devhelp". -#: ../src/dh-assistant.c:76 +#: ../src/dh-assistant.c:121 msgid "Devhelp — Assistant" msgstr "Devhelp — Помощник" -#: ../src/dh-assistant-view.c:395 +#: ../src/dh-assistant-view.c:403 msgid "Book:" msgstr "Книга:" -#: ../src/dh-book.c:252 +#: ../src/dh-book.c:255 #, c-format msgid "Language: %s" msgstr "Язык: %s" -#: ../src/dh-book.c:253 +#: ../src/dh-book.c:256 msgid "Language: Undefined" msgstr "Язык: не определён" @@ -410,31 +342,27 @@ msgid "Type" msgstr "Тип" -#: ../src/dh-main.c:48 +#: ../src/dh-main.c:43 msgid "Opens a new Devhelp window" msgstr "Открывает новое окно Devhelp" -#: ../src/dh-main.c:53 -msgid "Focus the Devhelp window with the search field active" -msgstr "Переводить фокус на окно Devhelp и активировать поле поиска" - -#: ../src/dh-main.c:58 +#: ../src/dh-main.c:48 msgid "Search for a keyword" msgstr "Поиск по ключевому слову" -#: ../src/dh-main.c:59 ../src/dh-main.c:64 +#: ../src/dh-main.c:49 ../src/dh-main.c:54 msgid "KEYWORD" msgstr "КЛЮЧЕВОЕ СЛОВО" -#: ../src/dh-main.c:63 +#: ../src/dh-main.c:53 msgid "Search and display any hit in the assistant window" msgstr "Поиск и отображение любого совпадения в окне помощника" -#: ../src/dh-main.c:68 +#: ../src/dh-main.c:58 msgid "Display the version and exit" msgstr "Показать версию и выйти" -#: ../src/dh-main.c:73 +#: ../src/dh-main.c:63 msgid "Quit any running Devhelp" msgstr "Выйти из Devhelp" @@ -478,63 +406,64 @@ msgid "Cannot uncompress book '%s': %s" msgstr "Не удалось распаковать книгу «%s»: %s" -#: ../src/dh-search.c:492 -msgid "All books" -msgstr "Все книги" +#. Setup the Current/All Files selector +#: ../src/dh-sidebar.c:478 +msgid "Current" +msgstr "Текущий" -#: ../src/dh-search.c:1110 -msgid "Search in:" -msgstr "Искать в:" +#: ../src/dh-sidebar.c:481 +msgid "All Books" +msgstr "Все книги" -#: ../src/dh-window.c:100 +#: ../src/dh-window.c:86 msgid "50%" msgstr "50%" -#: ../src/dh-window.c:101 +#: ../src/dh-window.c:87 msgid "75%" msgstr "75%" -#: ../src/dh-window.c:102 +#: ../src/dh-window.c:88 msgid "100%" msgstr "100%" -#: ../src/dh-window.c:103 +#: ../src/dh-window.c:89 msgid "125%" msgstr "125%" -#: ../src/dh-window.c:104 +#: ../src/dh-window.c:90 msgid "150%" msgstr "150%" -#: ../src/dh-window.c:105 +#: ../src/dh-window.c:91 msgid "175%" msgstr "175%" -#: ../src/dh-window.c:106 +#: ../src/dh-window.c:92 msgid "200%" msgstr "200%" -#: ../src/dh-window.c:107 +#: ../src/dh-window.c:93 msgid "300%" msgstr "300%" -#: ../src/dh-window.c:108 +#: ../src/dh-window.c:94 msgid "400%" msgstr "400%" -#: ../src/dh-window.c:1046 -msgid "Contents" -msgstr "Содержание" - -#: ../src/dh-window.c:1056 -msgid "Search" -msgstr "Поиск" +#: ../src/dh-window.c:688 +msgid "Back" +msgstr "Назад" + +#: ../src/dh-window.c:695 +msgid "Forward" +msgstr "Вперёд" -#: ../src/dh-window.c:1266 +#: ../src/dh-window.c:967 msgid "Error opening the requested link." msgstr "Ошибка при открытии запрошенной ссылки." -#: ../src/dh-window.c:1638 ../src/dh-window.c:1885 +#: ../src/dh-window.c:1317 ../src/dh-window.c:1503 msgid "Empty Page" msgstr "Пустая страница" @@ -565,3 +494,60 @@ #: ../src/eggfindbar.c:362 ../src/eggfindbar.c:365 msgid "Toggle case sensitive search" msgstr "Включить поиск, чувствительный к регистру" + +#~ msgid "_Window" +#~ msgstr "_Окно" + +#~ msgid "_Close" +#~ msgstr "_Закрыть" + +#~ msgid "_Edit" +#~ msgstr "_Правка" + +#~ msgid "_Copy" +#~ msgstr "_Копировать" + +#~ msgid "Find _Next" +#~ msgstr "Найти _следующее" + +#~ msgid "Find _Previous" +#~ msgstr "Найти _предыдущее" + +#~ msgid "_View" +#~ msgstr "_Вид" + +#~ msgid "Fullscreen" +#~ msgstr "На полный экран" + +#~ msgid "_Go" +#~ msgstr "_Перейти" + +#~ msgid "_Search Tab" +#~ msgstr "П_оиск" + +#~ msgid "_Contents Tab" +#~ msgstr "Сод_ержание" + +#~ msgid "Go to the previous page" +#~ msgstr "Перейти на предыдущую страницу" + +#~ msgid "Go to the next page" +#~ msgstr "Перейти на следующую страницу" + +#~ msgid "Decrease the text size" +#~ msgstr "Уменьшить размер текста" + +#~ msgid "Increase the text size" +#~ msgstr "Увеличить размер текста" + +#~ msgid "Focus the Devhelp window with the search field active" +#~ msgstr "Переводить фокус на окно Devhelp и активировать поле поиска" + +#~ msgid "Search in:" +#~ msgstr "Искать в:" + +#~ msgid "Contents" +#~ msgstr "Содержание" + +#~ msgid "Search" +#~ msgstr "Поиск" diff -Nru devhelp-3.8.0/src/dh-book-tree.c devhelp-3.8.2/src/dh-book-tree.c --- devhelp-3.8.0/src/dh-book-tree.c 2013-03-05 15:02:30.000000000 +0000 +++ devhelp-3.8.2/src/dh-book-tree.c 2013-04-17 07:26:15.000000000 +0000 @@ -40,6 +40,13 @@ GtkTreeStore *store; DhBookManager *book_manager; DhLink *selected_link; + + /* Signals */ + guint book_created_id; + guint book_deleted_id; + guint book_enabled_id; + guint book_disabled_id; + guint group_by_language_id; } DhBookTreePriv; static void dh_book_tree_class_init (DhBookTreeClass *klass); @@ -77,9 +84,21 @@ static void book_tree_finalize (GObject *object) { - DhBookTreePriv *priv = GET_PRIVATE (object); + DhBookTreePriv *priv = GET_PRIVATE (object); + + /* Disconnect signals */ + if (g_signal_handler_is_connected (priv->book_manager, priv->book_created_id)) + g_signal_handler_disconnect (priv->book_manager, priv->book_created_id); + if (g_signal_handler_is_connected (priv->book_manager, priv->book_deleted_id)) + g_signal_handler_disconnect (priv->book_manager, priv->book_deleted_id); + if (g_signal_handler_is_connected (priv->book_manager, priv->book_enabled_id)) + g_signal_handler_disconnect (priv->book_manager, priv->book_enabled_id); + if (g_signal_handler_is_connected (priv->book_manager, priv->book_disabled_id)) + g_signal_handler_disconnect (priv->book_manager, priv->book_disabled_id); + if (g_signal_handler_is_connected (priv->book_manager, priv->group_by_language_id)) + g_signal_handler_disconnect (priv->book_manager, priv->group_by_language_id); - g_object_unref (priv->store); + g_object_unref (priv->store); g_object_unref (priv->book_manager); G_OBJECT_CLASS (dh_book_tree_parent_class)->finalize (object); @@ -674,26 +693,26 @@ priv->book_manager = g_object_ref (book_manager); - g_signal_connect (priv->book_manager, - "book-created", - G_CALLBACK (book_tree_book_created_or_enabled_cb), - tree); - g_signal_connect (priv->book_manager, - "book-deleted", - G_CALLBACK (book_tree_book_deleted_or_disabled_cb), - tree); - g_signal_connect (priv->book_manager, - "book-enabled", - G_CALLBACK (book_tree_book_created_or_enabled_cb), - tree); - g_signal_connect (priv->book_manager, - "book-disabled", - G_CALLBACK (book_tree_book_deleted_or_disabled_cb), - tree); - g_signal_connect (priv->book_manager, - "notify::group-by-language", - G_CALLBACK (book_tree_group_by_language_cb), - tree); + priv->book_created_id = g_signal_connect (priv->book_manager, + "book-created", + G_CALLBACK (book_tree_book_created_or_enabled_cb), + tree); + priv->book_deleted_id = g_signal_connect (priv->book_manager, + "book-deleted", + G_CALLBACK (book_tree_book_deleted_or_disabled_cb), + tree); + priv->book_enabled_id = g_signal_connect (priv->book_manager, + "book-enabled", + G_CALLBACK (book_tree_book_created_or_enabled_cb), + tree); + priv->book_disabled_id = g_signal_connect (priv->book_manager, + "book-disabled", + G_CALLBACK (book_tree_book_deleted_or_disabled_cb), + tree); + priv->group_by_language_id = g_signal_connect (priv->book_manager, + "notify::group-by-language", + G_CALLBACK (book_tree_group_by_language_cb), + tree); book_tree_populate_tree (tree); diff -Nru devhelp-3.8.0/src/dh-preferences.c devhelp-3.8.2/src/dh-preferences.c --- devhelp-3.8.0/src/dh-preferences.c 2012-12-19 09:50:03.000000000 +0000 +++ devhelp-3.8.2/src/dh-preferences.c 2013-05-15 11:05:25.000000000 +0000 @@ -33,6 +33,11 @@ DhBookManager *book_manager; DhSettings *settings; + /* signals */ + gulong book_created_id; + gulong book_deleted_id; + gulong group_by_language_id; + /* Fonts tab */ GtkWidget *system_fonts_button; GtkWidget *fonts_table; @@ -105,18 +110,18 @@ prefs = g_new0 (DhPreferences, 1); prefs->settings = dh_settings_get (); prefs->book_manager = g_object_ref (dh_app_peek_book_manager (DH_APP (app))); - g_signal_connect (prefs->book_manager, - "book-created", - G_CALLBACK (preferences_bookshelf_book_created_cb), - NULL); - g_signal_connect (prefs->book_manager, - "book-deleted", - G_CALLBACK (preferences_bookshelf_book_deleted_cb), - NULL); - g_signal_connect (prefs->book_manager, - "notify::group-by-language", - G_CALLBACK (preferences_bookshelf_group_by_language_cb), - NULL); + prefs->book_created_id = g_signal_connect (prefs->book_manager, + "book-created", + G_CALLBACK (preferences_bookshelf_book_created_cb), + NULL); + prefs->book_deleted_id = g_signal_connect (prefs->book_manager, + "book-deleted", + G_CALLBACK (preferences_bookshelf_book_deleted_cb), + NULL); + prefs->group_by_language_id = g_signal_connect (prefs->book_manager, + "notify::group-by-language", + G_CALLBACK (preferences_bookshelf_group_by_language_cb), + NULL); } static void @@ -127,7 +132,12 @@ } g_clear_object (&prefs->settings); + + g_signal_handler_disconnect (prefs->book_manager, prefs->book_created_id); + g_signal_handler_disconnect (prefs->book_manager, prefs->book_deleted_id); + g_signal_handler_disconnect (prefs->book_manager, prefs->group_by_language_id); g_clear_object (&prefs->book_manager); + gtk_list_store_clear (prefs->bookshelf_store); gtk_widget_destroy (GTK_WIDGET (prefs->dialog)); diff -Nru devhelp-3.8.0/src/dh-util.c devhelp-3.8.2/src/dh-util.c --- devhelp-3.8.0/src/dh-util.c 2013-02-01 13:07:04.000000000 +0000 +++ devhelp-3.8.2/src/dh-util.c 2013-05-15 11:05:20.000000000 +0000 @@ -240,6 +240,43 @@ return uri; } +#ifdef HAVE_WEBKIT2 +static gdouble +get_screen_dpi (GdkScreen *screen) +{ + gdouble dpi; + gdouble dp, di; + + dpi = gdk_screen_get_resolution (screen); + if (dpi != -1) + return dpi; + + dp = hypot (gdk_screen_get_width (screen), gdk_screen_get_height (screen)); + di = hypot (gdk_screen_get_width_mm (screen), gdk_screen_get_height_mm (screen)) / 25.4; + + return dp / di; +} +#endif + +static guint +convert_font_size_to_pixels (GtkWidget *widget, + gdouble font_size) +{ +#ifdef HAVE_WEBKIT2 + /* WebKit2 uses font sizes in pixels */ + GdkScreen *screen; + gdouble dpi; + + screen = gtk_widget_has_screen (widget) ? + gtk_widget_get_screen (widget) : gdk_screen_get_default (); + dpi = screen ? get_screen_dpi (screen) : 96; + + return font_size / 72.0 * dpi; +#else + return font_size; +#endif +} + /* set the given fonts on the given view */ void dh_util_view_set_font (WebKitWebView *view, const gchar *font_name_fixed, const gchar *font_name_variable) @@ -247,30 +284,26 @@ /* get the font size */ PangoFontDescription *font_desc_fixed = pango_font_description_from_string (font_name_fixed); PangoFontDescription *font_desc_variable = pango_font_description_from_string (font_name_variable); - gint font_size_fixed = PANGO_PIXELS (pango_font_description_get_size (font_desc_fixed)); - gint font_size_variable = PANGO_PIXELS (pango_font_description_get_size (font_desc_variable)); + gdouble font_size_fixed = (double)pango_font_description_get_size (font_desc_fixed) / PANGO_SCALE; + gdouble font_size_variable = (double)pango_font_description_get_size (font_desc_variable) / PANGO_SCALE; + guint font_size_fixed_px = convert_font_size_to_pixels (GTK_WIDGET (view), font_size_fixed); + guint font_size_variable_px = convert_font_size_to_pixels (GTK_WIDGET (view), font_size_variable); + pango_font_description_free (font_desc_fixed); pango_font_description_free (font_desc_variable); - /* get the settings from the view */ - #ifdef HAVE_WEBKIT2 - WebKitSettings *settings; -#else - WebKitWebSettings *settings; -#endif - settings = webkit_web_view_get_settings (view); - /* set the fonts */ - g_object_set (settings, + /* set the fonts */ + g_object_set (webkit_web_view_get_settings (view), #ifdef HAVE_WEBKIT2 - "zoom-text-only", TRUE, + "zoom-text-only", TRUE, #endif - "monospace-font-family", font_name_fixed, - "default-monospace-font-size", font_size_fixed, - "serif-font-family", font_name_variable, - "default-font-size", font_size_variable, - NULL); + "monospace-font-family", font_name_fixed, + "default-monospace-font-size", font_size_fixed_px, + "serif-font-family", font_name_variable, + "default-font-size", font_size_variable_px, + NULL); g_debug ("Set font-fixed to '%s' (%i) and font-variable to '%s' (%i).", - font_name_fixed, font_size_fixed, font_name_variable, font_size_variable); + font_name_fixed, font_size_fixed_px, font_name_variable, font_size_variable_px); } void diff -Nru devhelp-3.8.0/src/dh-window.c devhelp-3.8.2/src/dh-window.c --- devhelp-3.8.0/src/dh-window.c 2013-03-25 14:34:54.000000000 +0000 +++ devhelp-3.8.2/src/dh-window.c 2013-05-15 11:05:20.000000000 +0000 @@ -50,7 +50,7 @@ GtkWidget *hpaned; GtkWidget *sidebar; GtkWidget *notebook; - GtkWidget *toolbar; + GtkWidget *header_bar; GtkWidget *vbox; GtkWidget *findbar; @@ -60,6 +60,7 @@ DhLink *selected_search_link; guint find_source_id; DhSettings *settings; + guint fonts_changed_id; }; enum { @@ -533,10 +534,10 @@ /* handle settings */ priv->settings = dh_settings_get (); - g_signal_connect (priv->settings, - "fonts-changed", - G_CALLBACK (settings_fonts_changed_cb), - window); + priv->fonts_changed_id = g_signal_connect (priv->settings, + "fonts-changed", + G_CALLBACK (settings_fonts_changed_cb), + window); /* Setup builder */ priv->builder = gtk_builder_new (); @@ -577,6 +578,13 @@ dispose (GObject *object) { DhWindow *self = DH_WINDOW (object); + + if (self->priv->fonts_changed_id) { + if (self->priv->settings && g_signal_handler_is_connected (self->priv->settings, self->priv->fonts_changed_id)) + g_signal_handler_disconnect (self->priv->settings, self->priv->fonts_changed_id); + self->priv->fonts_changed_id = 0; + } + g_clear_object (&self->priv->settings); g_clear_object (&self->priv->builder); @@ -672,34 +680,41 @@ priv = window->priv; book_manager = dh_app_peek_book_manager (DH_APP (gtk_window_get_application (GTK_WINDOW (window)))); - priv->toolbar = gd_main_toolbar_new (); - back = gd_main_toolbar_add_button (GD_MAIN_TOOLBAR (priv->toolbar), - "go-previous-symbolic", - _("Back"), - TRUE); - gtk_actionable_set_action_name ( GTK_ACTIONABLE (back), "win.go-back"); - forward = gd_main_toolbar_add_button (GD_MAIN_TOOLBAR (priv->toolbar), - "go-next-symbolic", - _("Forward"), - TRUE); - gtk_actionable_set_action_name ( GTK_ACTIONABLE (forward), "win.go-forward"); + // TODO: port to GtkHeaderBar in the future + priv->header_bar = gd_header_bar_new (); + + back = gd_header_simple_button_new (); + gd_header_button_set_label (GD_HEADER_BUTTON (back), + _("Back")); + gd_header_button_set_symbolic_icon_name (GD_HEADER_BUTTON (back), + "go-previous-symbolic"); + gtk_actionable_set_action_name (GTK_ACTIONABLE (back), "win.go-back"); + + forward = gd_header_simple_button_new (); + gd_header_button_set_label (GD_HEADER_BUTTON (forward), + _("Forward")); + gd_header_button_set_symbolic_icon_name (GD_HEADER_BUTTON (forward), + "go-next-symbolic"); + gtk_actionable_set_action_name (GTK_ACTIONABLE (forward), "win.go-forward"); + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_style_context_add_class (gtk_widget_get_style_context (box), "linked"); - gtk_widget_reparent (back, box); - gtk_widget_reparent (forward, box); - - gd_main_toolbar_add_widget (GD_MAIN_TOOLBAR (priv->toolbar), box, TRUE); - menu_button = gd_main_toolbar_add_menu (GD_MAIN_TOOLBAR (priv->toolbar), - "emblem-system-symbolic", - "", - FALSE); + gtk_box_pack_start (GTK_BOX (box), back, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (box), forward, FALSE, FALSE, 0); + gd_header_bar_pack_start (GD_HEADER_BAR (priv->header_bar), box); + + menu_button = gd_header_menu_button_new (); + gd_header_button_set_symbolic_icon_name (GD_HEADER_BUTTON (menu_button), + "emblem-system-symbolic"); gtk_actionable_set_action_name (GTK_ACTIONABLE (menu_button), "win.gear-menu"); + gd_header_bar_pack_end (GD_HEADER_BAR (priv->header_bar), menu_button); + menu = gtk_builder_get_object (priv->builder, "window-menu"); gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (menu_button), G_MENU_MODEL (menu)); /* Add toolbar to main box */ - gtk_box_pack_start (GTK_BOX (priv->main_box), priv->toolbar, + gtk_box_pack_start (GTK_BOX (priv->main_box), priv->header_bar, FALSE, FALSE, 0); priv->hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); @@ -1466,8 +1481,8 @@ web_view_title = NULL; } - gd_main_toolbar_set_labels (GD_MAIN_TOOLBAR (priv->toolbar), - web_view_title, NULL); + gd_header_bar_set_title (GD_HEADER_BAR (priv->header_bar), + web_view_title); } static void