Compare commits

..

65 Commits

Author SHA1 Message Date
Juan Pablo Ugarte
61098aea34 Rolling 3.18.3 2014-05-12 15:38:26 -03:00
Juan Pablo Ugarte
73b1137903 GladeEditorProperty: re grab focus on load_common() if property is construct-only.
If the property is construct-only, then glade_widget_rebuild() will be called
which means the object will be removed from the project/selection and
a new one will be added, which makes the eprop loose its focus.
2014-05-12 15:07:19 -03:00
Carles Ferrando
fd791c4cd7 [l10n] Updated Catalan (Valencian) translation 2014-05-11 00:24:49 +02:00
Gil Forcada
74763ed8ce [l10n] Update Catalan translation 2014-05-11 00:24:41 +02:00
Carles Ferrando
4aac66d1e5 [l10n] Updated Catalan (Valencian) translation 2014-05-11 00:19:41 +02:00
Pau Iranzo
56b19685ff [l10n] Update Catalan translation 2014-05-11 00:19:30 +02:00
Juan Pablo Ugarte
df062dbeac GladePreviewWindow: force infobar to show a close button and make label selectable 2014-05-09 14:30:35 -03:00
Juan Pablo Ugarte
2656b6fa8f GladePreviewer: ignore signal connections to avoid warnings about missing symbols. 2014-05-07 15:44:47 -03:00
Juan Pablo Ugarte
f9d19530f1 GladePreviewer: Fixed bug previewing templates.
XML text data was not escaped when generating the template XML.
2014-05-07 15:44:44 -03:00
Juan Pablo Ugarte
d27d1dd8d4 GladeWidgetAdaptor: Fixed glade_widget_adaptor_object_get_children() for internal widgets.
Internal widgets are defined in Glade in the adaptor class that introduced them.
So in order to get internal widgets that are descendant of another internal widget
we need to walk up the adaptor hierarchy to find where internal widgets are defined.

I included this patch in the stable version because without it glade can not access
GtkDialog internal action_area if compiled with gtk master (version 3.13)
2014-05-05 19:49:21 -03:00
Christian Kirbach
43bdd064dc Updated German translation 2014-05-05 15:03:17 +00:00
Dirgita
4719cb76c7 Updated Indonesian translation 2014-04-23 09:43:03 +00:00
Juan Pablo Ugarte
feea43d655 Fixed Bug 727914 "Logo is not shown in About-dialog"
Made GtkAboutDialog logo and logo-icon-name properties optional since they
are mutually exclusive.
The editor is responsible for enabling then accordingly.
2014-04-22 19:34:57 -03:00
Juan Pablo Ugarte
6b022595cb Fixed toolbar icon size.
Use GTK_ICON_SIZE_LARGE_TOOLBAR and GTK_ICON_SIZE_SMALL_TOOLBAR instead of
GTK_ICON_SIZE_MENU and GTK_ICON_SIZE_BUTTON
2014-04-22 19:34:57 -03:00
Yuri Myasoedov
256f1a458c Fixed Russian translation 2014-04-20 15:46:39 +04:00
Tom Tryfonidis
e466e5b283 Updated Greek translation 2014-04-18 21:51:13 +00:00
Juan Pablo Ugarte
8fa35da340 Fixed cursor glitch while moving the poiner across multiple placeholders.
The glitch was because we where updating the cursor on motion event only
so when the pointer enters a new placeholder the cursor is set back to
default and then changed again when the motion notify is finally triggered.
2014-04-17 00:51:11 -03:00
Juan Pablo Ugarte
5b1f00ac57 Fixed Bug 353002 "wrong cursor over widgets" 2014-04-17 00:50:31 -03:00
Juan Pablo Ugarte
35dcc715ac Convert every object to use G_DEFINE_TYPE_WITH_CODE() or G_ADD_PRIVATE() macros
Fixed function prototype identation and spacing.
2014-04-17 00:29:45 -03:00
David Shea
3ad52c12b0 Check use-underline for whether mnemonic-widget can be set 2014-04-16 21:43:28 -03:00
David Shea
83cc9dbe28 Allow 3 decimal digits for the text scale value. 2014-04-16 21:43:26 -03:00
Juan Pablo Ugarte
21eb9583b7 Marked glade_http_request_send_async() as a G_GNUC_PRINTF() function.
Fixed compile warning.
2014-04-16 20:49:30 -03:00
TingPing
f3f4420e98 Save palette appearance setting 2014-04-16 18:07:26 -04:00
Daniel Mustieles
d3a7de0b06 Updated Spanish translation 2014-04-15 14:22:34 +02:00
Juan Pablo Ugarte
465a3b8e7c Rolling 3.18.2 2014-04-14 20:07:21 -03:00
Juan Pablo Ugarte
8edcfd7f02 Fixed bug 364064 "Property Editor / Common tab: width & height request checkboxes have no effect"
Reset runtime value to default when an optional property is disabled.
2014-04-14 18:59:43 -03:00
Juan Pablo Ugarte
73eca7af22 Set license type "other" as the default one in the propject properties dialog 2014-04-14 18:56:36 -03:00
Мирослав Николић
5a13050a0a Updated Serbian translation 2014-04-14 19:26:42 +02:00
Ask H. Larsen
2c5f5a673b Updated Danish translation 2014-04-13 22:00:37 +02:00
Balázs Úr
0b864c2419 Updated Hungarian translation 2014-04-13 16:17:46 +00:00
Juan Pablo Ugarte
5fa17441d6 Ignore widgets that are not part of the project when generating edges
of directed graph used to sort objects by topological order.

Fixes bug 727992 "Editing UI and saving does not remove deleted Combo with Entry"
2014-04-12 16:28:57 -03:00
Rūdolfs Mazurs
1773be56f6 Updated Latvian translation 2014-04-12 12:41:41 +03:00
Claudio Arseni
73199ffa80 [l10n] Updated Italian translation. 2014-04-03 09:03:36 +02:00
Yuri Myasoedov
e1f5032da2 Updated Russian translation 2014-04-01 22:39:09 +04:00
Yuri Myasoedov
56294cdaa5 Updated Russian translation 2014-04-01 22:06:11 +04:00
Fran Diéguez
181bb241a5 Updated Galician translations 2014-03-31 23:38:35 +02:00
Alexandre Franke
16684ca773 Updated French translation 2014-03-31 16:18:38 +00:00
Marek Černocký
06aab361ea Updated Czech translation 2014-03-31 10:49:52 +02:00
Rafael Ferreira
0c62058e9c Updated Brazilian Portuguese translation 2014-03-31 01:00:03 +00:00
Juan Pablo Ugarte
d85c3679d1 Added few comments for translators 2014-03-30 17:53:37 -03:00
Aurimas Černius
359c377299 Updated Lithuanian translation 2014-03-30 23:06:27 +03:00
Sphinx Jiang
e2cb676b19 update zh_CN translation 2014-03-30 17:02:16 +08:00
Andika Triwidada
0027406c9b Updated Indonesian translation 2014-03-28 15:20:05 +00:00
Juan Pablo Ugarte
ebd048e49f Update Spanish translation 2014-03-28 11:49:38 -03:00
Piotr Drąg
b0dfcc8da6 Updated Polish translation 2014-03-28 15:05:29 +01:00
Juan Pablo Ugarte
38ddeb8d9e Add dialog to advertise user survey 2014-03-27 16:09:26 -03:00
Juan Pablo Ugarte
ddd9980fdc Rolling 3.18.1 2014-03-26 17:34:06 -03:00
Juan Pablo Ugarte
9f3c2b79c4 Restored widgets classes that do not fail anymore in gtk 3.12 2014-03-26 17:10:39 -03:00
Juan Pablo Ugarte
5f10a02793 Fixed bug in numeric property editors 2014-03-26 17:10:39 -03:00
Juan Pablo Ugarte
281b920eb1 Bumped gtk dependancy to 3.12 2014-03-26 17:10:39 -03:00
Juan Pablo Ugarte
92589d52a0 GtkDialog: disabled use-header-bar property untill Glade supports GtkHeaderBar
GtkAboutDialog: ignore construct only use-header-bar property to force it to False in the runtime.
2014-03-26 17:10:39 -03:00
YunQiang Su
a36133ebad update zh_CN translation 2014-03-26 10:48:07 +08:00
Juan Pablo Ugarte
376e7ed394 Fixed Bug 727014 "32 bit builds fail with -Werror=format-security" 2014-03-25 12:39:08 -03:00
Juan Pablo Ugarte
6ceed22a33 Rolling 3.18
Glade registration, point to production url.
2014-03-24 19:51:01 -03:00
Juan Pablo Ugarte
62096b62b9 Fixed distcheck errors
Fixed create-widgets test GtkMessageDialog error and skip creating GtkAboutDialog
2014-03-24 19:50:58 -03:00
Claudio Arseni
11cd71c0ad Updated Italian translation 2014-03-24 16:38:22 -03:00
Matej Urbančič
cd57b60c0b Updated Slovenian translation 2014-03-24 16:38:22 -03:00
Marek Černocký
3f48f9c7b4 Fixed domain name 2014-03-24 16:38:22 -03:00
Marek Černocký
0d1e99aa3c Fixed domain name 2014-03-24 16:38:22 -03:00
Kristjan SCHMIDT
7d6240e965 Updated Esperanto translation 2014-03-24 16:38:20 -03:00
Rūdolfs Mazurs
72aea73c9a Updated Latvian translation 2014-03-24 16:38:19 -03:00
Andika Triwidada
62d184b322 Updated Indonesian translation 2014-03-24 12:58:13 +00:00
Ask H. Larsen
e7608f15d6 Updated Danish translation 2014-03-23 19:09:53 +01:00
Мирослав Николић
8ef021987d Updated Serbian translation 2014-03-23 15:14:59 +01:00
Gábor Kelemen
ea20456c8f Updated Hungarian translation 2014-03-23 14:10:17 +00:00
632 changed files with 162925 additions and 277286 deletions

54
.gitignore vendored
View File

@ -1 +1,53 @@
_build
*.o
*.a
*.lo
*.la
*.stamp
*.bak
*.tmp
.tm*
~*
*~
*.gir
*.typelib
*.pc
.libs
.deps
ABOUT-NLS
Makefile
Makefile.in
/configure.lineno
/aclocal.m4
/autom4te.cache
/config.*
/configure
/depcomp
/stamp*
/compile
/*.tar.gz
/junk
/install-sh
/intltool-*
/libtool
/ltmain.sh
/missing
/mkinstalldirs
/gtk-doc.make
/gnome-doc-utils.make
/doc/gladeui-overrides.txt
/gladeui/gladeui-enum-types.c
/gladeui/gladeui-enum-types.h
/gladeui/gladeui-resources.c
/gladeui/gladeui-resources.h
/plugins/gtk+/glade-gtk-resources.c
/plugins/gtk+/glade-gtk-resources.h
/tests/add-child
/tests/create-widgets

View File

@ -1,15 +0,0 @@
include: 'https://gitlab.gnome.org/GNOME/citemplates/raw/master/flatpak/flatpak_ci_initiative.yml'
flatpak:
extends: '.flatpak'
variables:
MANIFEST_PATH: "org.gnome.Glade.json"
RUNTIME_REPO: "https://nightly.gnome.org/gnome-nightly.flatpakrepo"
FLATPAK_MODULE: "glade"
APP_ID: "org.gnome.Glade"
BUNDLE: "glade-git.flatpak"
nightly:
extends: '.publish_nightly'
dependencies: ['flatpak']
needs: ['flatpak']

14
AUTHORS
View File

@ -1,9 +1,7 @@
Chema Celorio <chema@ximian.com>
Joaquin Cuenca Abela <e98cuenc@yahoo.com>
Paolo Borelli <pborelli@katamail.com>
Archit Baweja <bighead@users.sourceforge.net>
Shane Butler <shane_b@operamail.com>
Tristan Van Berkom <tvb@gnome.org>
Ivan Wong <email@ivanwong.info>
Juan Pablo Ugarte <juanpablougarte@gmail.com>
Vincent Geddes <vincent.geddes@gmail.com>
Thanks to :
Michal Palczewski <mpalczew@u.washington.edu> - Widget tree window
Archit Baweja <bighead@users.sourceforge.net> - New widgets, _get_type
Shane Butler <shane_b@operamail.com> - Glade Widget signals editor
Tristan Van Berkom <tvb@gnome.org> - Non widget support.

0
BUGS Normal file
View File

View File

@ -1,8 +1,8 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License

View File

@ -2,7 +2,7 @@
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.

View File

@ -1,61 +1,55 @@
Glade official git repository is hosted by the GNOME foundation at
gitlab.gnome.org
Maintainer
============
Glade is looking for a new maintainer, if you are interested please contact us
on gitlab.
Mailing List
~~~~~~~~~~~~
Glade discussion takes place on glade-devel@lists.ximian.com
To subscribe or to consult archives visit
http://lists.ximian.com/mailman/listinfo/glade-devel
GitLab
========
Glade bugs are tracked at
https://gitlab.gnome.org/GNOME/glade
Bugzilla
~~~~~~~~
Glade bugs are tracked in the glade module of
http://bugzilla.gnome.org
GIT
===
You can browse the source code at https://gitlab.gnome.org/GNOME/glade
To check out a copy of Glade you can use the following command:
~~~
The Glade repository is hosted at git.gnome.org
git clone https://gitlab.gnome.org/GNOME/glade.git
You can browse the source code at https://git.gnome.org/browse/glade
To check out a copy of Glade-3 you can use the following commands:
git clone git://git.gnome.org/glade
Patches
=======
~~~~~~~
Patches must be in the unified format (diff -u) and must include a
ChangeLog entry. Please send all patches to bugzilla.
It is better to use git format-patch command
```
git format-patch HEAD^
```
Coding Style
============
Code in Glade should follow the GNU style of GNOME Programming Guidelines
(https://developer.gnome.org/programming-guidelines/stable/c-coding-style.html.en),
basically this means being consistent with the surrounding code.
~~~~~~~~~~~~
Code in Glade should follow the GNOME Programming Guidelines
(http://developer.gnome.org/doc/guides/programming-guidelines/),
basically this means being consistent with the sorrounding code.
The only exception is that we prefer having braces always on a new line
e.g.:
```
if (...)
{
...
}
```
Note however that a lot of the current codebase still uses the following
style:
```
if (...) {
...
}
```
Over time we'll migrate to the preferred form.
@ -63,11 +57,11 @@ Naming conventions:
- function names should be lowercase and prefixed with the
file name (or, if the function is static and the name too long,
with an abbreviation), e.g:
`glade_project_window_my_function ()`
`gpw_my_loooooooooong_named_fuction ()`
glade_project_window_my_function ()
gpw_my_loooooooooong_named_fuction ()
- variable names should be lowercase and be short but self explanatory;
if you need more than one word use an underscore, e.g:
`my_variable`
my_variable
Also try to order your functions so that prototypes are not needed.

236
INSTALL Normal file
View File

@ -0,0 +1,236 @@
Installation Instructions
*************************
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. (Caching is
disabled by default to prevent problems with accidental use of stale
cache files.)
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You only need
`configure.ac' if you want to change it or regenerate `configure' using
a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
*Note Defining Variables::, for more details.
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not support the `VPATH'
variable, you have to compile the package for one architecture at a
time in the source code directory. After you have installed the
package for one architecture, use `make distclean' before reconfiguring
for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
where SYSTEM can have one of these forms:
OS KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`--help'
`-h'
Print a summary of the options to `configure', and exit.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.

View File

@ -1,22 +1,22 @@
Glade internals
~~~~~~~~~~~~~~~
Glade3 internals
~~~~~~~~~~~~~~~~
about this document
===================
This is a short description of the designs goals and of the
implementation choices of Glade. It isn't complete, but
implementation choices of Glade3. It isn't complete, but
I hope that it may be useful.
* Note: not only I'm not the original author/designer of
glade, but also I have not touched glade for many months.
glade3, but also I have not touched glade3 for many months.
The only reason why I'm writing this doc is that glade development
The only reason why I'm writing this doc is that glade3 development
has been stagnating for a long time... now it seems that there are some
developers interested in resuming work on it, so I thought that it was
right to put down some notes on what I remember to ease their way
through the glade codebase.
through the glade3 codebase.
Everyone who spots errors and inaccuracies in this doc, or who wants to
add informations to it, should feel free to improve it!
@ -35,8 +35,8 @@ the description of a Gtk+ GUI to an xml file.
* glade is a tool to create and edit the desired interface in an easy
way and then automatically serialize it to the xml file.
Glade is a complete rewrite of the original glade and takes advantage
of the introspection properties of the GTK toolkit.
Glade3 is a complete rewrite of the original glade and takes advantage
of the introspection properties of the GTK+2 toolkit.

View File

@ -5,7 +5,3 @@ Userid: tvb
Juan Pablo Ugarte
E-mail: juanpablougarte@gmail.com
Userid: jpu
Alberto Fanjul
E-mail: albfan@gnome.org
Userid: albfan

35
Makefile.am Normal file
View File

@ -0,0 +1,35 @@
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
SUBDIRS = po data gladeui src plugins tests doc help
if BUILD_MAN_PAGES
SUBDIRS += man
endif
DIST_SUBDIRS = po data gladeui src plugins tests doc help man
EXTRA_DIST = \
autogen.sh \
COPYING.GPL \
COPYING.LGPL \
intltool-extract.in \
intltool-merge.in \
intltool-update.in
DISTCLEANFILES = intltool-extract \
intltool-merge \
intltool-update
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-introspection --enable-man-pages
dist-hook:
@if test -d "$(srcdir)/.git"; \
then \
echo Creating ChangeLog && \
( cd "$(top_srcdir)" && \
echo '# Generated by Makefile. Do not edit.'; echo; \
$(top_srcdir)/missing --run git log --stat ) > ChangeLog.tmp \
&& mv -f ChangeLog.tmp $(distdir)/ChangeLog \
|| ( rm -f ChangeLog.tmp ; \
echo Failed to generate ChangeLog >&2 ); \
else \
echo A git clone is required to generate a ChangeLog >&2; \
fi

364
NEWS
View File

@ -1,366 +1,3 @@
============
Glade 3.40.0
============
- Remove survey
- Add user manual menu item (Sabri Ünal)
- 'Clear' action in "Setup Text Attributes" dialog now clears only selected attributes (crvi)
- Fix issue #502 sync draw-indicator on setting xalign (Caolán McNamara)
- Fix issue #499 and #509 "Drop overzealous check using only the first child"
- Fix Segfault in gnome-builder when widget doesn't have a name (Peter Maatman)
- Fix issue #373 "Move separator in hamburger menu one up, to be consistent with other GNOME applications"
- Fix build against Python 3.9
- Fix issue #484 "Crash with GtkRecentChooserDialog"
- Fix issue #194 "Using List Store can result in program crash."
- Fix issue #53 "Can't choose a FileChooserDialog for a FileChooserButton"
- Fix issue #98 #491
- Fix issue #355 "Make notification text selectable"
- Fix windows build on msys
- Fix issue #360 "No examples in documentation on using custom catalogues with gtkBuilder"
- Fix issue #406 "AtkObject::accessible-role should not be translatable"
- Fix issue #479 "Glade 3.36.0 segfaults when opening a file"
- Fix issue #471 "XML not updated after adding element"
- Fix issue #474 "GtkLabel: setup text attribute issues"
- Fix issue #480 "version field not always updated in XML"
- Fix issue pasing widget with ctrl+v in GtkGrid
- Fix issue #470 "Widgets of type need placeholders to add children"
- Fix issue #472 "gnome-nightly: About dialog should display git commit rev"
============
Glade 3.38.0
============
- Load template files as new GTypes and add them to "User templates" widget group automatically without the need of a catalog
- Added JavaScript widget support
- Use version data from gir to improve deprecation/target tests
- Implement survey using new backend at surveys.gnome.org
- Keep survey state in config file
- Associate with application/x-gtk-builder (Caolán McNamara)
- Project properties dialog improvements. (Use headerbar, stack and stach switcher, add warnings textview)
- Improve toolkit target version selection in project properties dialog
- Improve treemodel char data type handling
- Remove autotools (Iñigo Martínez)
- New gjs-1.0 1.64 dependency
- Bump Gtk dependency to 3.24
- Bump webkit2gtk dependency to 2.28
- Fixed all compiler/gir warnings
- Issue #385: GtkCellRendererText causes deprecated warnings for ghost properties
- Issue #444: show-emoji-icon is missing "minimum version"/since constraint
- Issue #367: Glade removes double/triple slashes from URLs
- Issue #452: GtkComboBox cell renderers editor is too hard to discover
- Issue #363: Toplevel windows are leaked when closing a project
- Issue #462: Crash when creating a new GtkAssistant and pressing it
- Issue #463: Specify file on command line
- Issue #461: Glade resets number of rows and columns in GtkGrid
- Issue #460: 3.37.0: test suite fails because glade uses incorrectly asserts in test units
- Issue #412: Fix inconsistent "top-level", "top level", "toplevel" spelling in translatable strings
- Issue #281: GladeProperty: Do not replace - with _
- Issue #389: GladeProject: show message on invalid GtkBuilder file
- Issue #446: GladeGtkListBox: fix size request issue
- Issue #432: GladeStandarStock, GladeStandarStockImage: fix get_type() functions for introspection
- Issue #447: GladeGtkWindow: Fix CSD support
- Issue #456: Utils: use g_param_spec_uchar() for uchar types
- Issue #459: Gtk catalog: add GtkRecentChooserMenu to Display group
- Issue #433: Implement survey using new backend at surveys.gnome.org
- Build: use gtk-mac-integration only when creating bundle (Tom Schoonjans)
- Ignore locale when saving numeric values (Alberto Fanjul)
- Remove config for external builds (Alberto Fanjul)
- Python plugin: fix linking error
- Tests: add python and javascript test case
- gtk: Add GtkScrolledWindow propagate-natural-width property (Corentin Noël)
- GladeScrolledWindowEditor: Squeeze width/height properties in two columns
- Gtk plugin: add missing displayable values
- Webkit2gtk plugin: add missing displayable values and sandbox web view
- dtd: Make init-function an element, not an attribute (Adrien Plazas)
Added/updated translations
- ca, courtesy of Gil Forcada
- ca, courtesy of Miquel-Àngel Burgos i Fradeja
- cs, courtesy of Marek Černocký
- da, courtesy of Ask Hjorth Larsen
- da, courtesy of Last-Translator: scootergrisen
- de, courtesy of Tim Sabsch
- en_GB, courtesy of Bruce Cowan
- es, courtesy of Daniel Mustieles
- eu, courtesy of Asier Sarasua Garmendia
- fr, courtesy of Thibault Martin
- gl, courtesy of Fran Dieguez
- hi, courtesy of Last-Translator:Sunny Sharma
- hu, courtesy of Balázs Úr
- id, courtesy of Kukuh Syafaat
- kk, courtesy of Baurzhan Muftakhidinov
- ko, courtesy of Changwoo Ryu
- lt, courtesy of Aurimas Černius
- pl, courtesy of Piotr Drąg
- pt_BR, courtesy of Rafael Fontenelle
- ro, courtesy of Florentina Mușat
- sl, courtesy of Matej Urbančič
- sv, courtesy of Anders Jonsson
- tr, courtesy of Emin Tufan Çetin
- uk, courtesy of Yuri Chornoivan
- zh_CN, courtesy of Mandy Wang
============
Glade 3.36.0
============
- widget: canonicalize support-warning property name
- tests: Include back GtkTreeViewColumn
- gtk+: properly cast to avoid warnings
- gtk+: workaround truncation warning by being safer
- gladeui: remove unused type_func variable
- gladeui: Ensure that we write the "type-func" property when a get-type-function is defined in the catalog
- Allow to specify placeholder to GtkListBox
- gtk+: Allow to use GtkResponseType with GtkDialog and GtkInfobar buttons
- gladeui: Change the boolean parsing logic to be the same as Gtk
- Appdata: update app-id
- Update FSF address
- gladeui: Modernize GladeSignalEditor codebase
- RDNN appdata & desktop file
- gtk+: Add homogeneous property to GtkStackSwitcher
- gladeui: Fix wrong pointer convertion in GladeDesignView
- gtk+: Provide Gtk 3.22 properties for GtkScrolledWindow
- gtk+: Add missing 3.22 enum/flag values
- gladeui: Modernize GladeWidgetAdaptor definition
- gtk+: Keep internationalization context in Atk properties
- gladeui: Plug tiny leak on Drag & Drop
- gladeui: Fix crash on drag-n-drop
- gladeui: fix several tiny memory leaks found with valgrind
- Make it easier to track GladeXML elements and be GObject Introspection friendly by registering boxed types
- gladeui: Replace the last occurences of GladeWidgetClass with GladeWidgetAdaptor in the comments
- gladeui: Use G_DECLARE_FINAL_TYPE for GladeObjectStub
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeNamedIconChooserDialog
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeInspector
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeEditorProperty
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeEditor
- gladeui: Use G_DECLARE_INTERFACE for GladeEditable
- gladeui: Use G_DECLARE_INTERFACE for GladeDrag
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeDesignView
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeDesignLayout
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeCommand
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeClipboard
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeCellRendererIcon
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeBaseEditor
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeApp
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeAdaptorChooserWidget
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeEditorSkeleton
- gladeui: Use G_DECLARE_DERIVABLE_TYPE for GladeEditorTable
- dnd: Enable Drag&Drop on wayland
- gladeui: remove implicit cast in assignment
- build: remove G_CONST_RETURN usage
- gladeui: ignore various GParameter deprecations
- Fix on debug traces after rename GladePropertyClass to GladePropertyDef
- meson: Activate enable-debug variables
- Prevent dragging an ancestor inside a child
- GladePopup: Clear add item when adding as toplevel
- GtkImage: Fix icon size being reset
- build: Fix OSX support in meson
- build: Do not use a system variable only for Windows
- Fix loading dylibs on OSX
- Set the "About Dialogue" as modal
- Fix split sentense in GladeProject
- Adding "Glade" to "About" section.
- Respect the Glade namespace for macros and defines
- Rename *Klass to *Class as there are no name collision anymore
- Fix two memory leaks discovered with valgrind
- GladeSignalDef: fix documentation for glade_signal_def_set_deprecated
- Rename GWActionClass to GladeWidgetActionDef to use the right namespace
- Rename GladePropertyClass to GladePropertyDef and declare it as boxed
- Rename GladeSignalClass to GladeSignalDef and declare it as boxed
- Create GladeSettings to hold the settings instead of using a Gtk widget for holding it
- Add GDK_VERSION_MIN_REQUIRED
- Utils: get the absolute path but avoid accessing it
- Fix several compiler warnings
- Replace some functions by Gtk 3.22 ones
- GladeSignalClass: rename glade_signal_class_get_type
- Allow to use GtkFileChooserNative
- GladeProperty: Keep the bind-source, bind-property and bind-flags elements
- Couple of fixes for memory leaks found with valgrind
- GtkLinkButton: allow to edit the label
- gladeui: Fix several memory leaks with GladeWidgetAdaptor
- gladeui: Fix leak of create_type in GladePropertyClass
- gladeui: fix memory leak in GWActionClass
- introspection: Add many annotations to sources
- No wide handles in `center_paned` and `left_paned`
- flatpak: Set meson as buildsystem
- build: Port to meson build system
- gtk+: Add deprecated flag to GtkButton and GtkImage stock properties
- doc: remove missing xml files
- doc: Modernize the documentation
- docs: Make some changes to fix warnings with the documentation
- Add metadata information about releases
- i18n: Do not use input file for not translated files
- Fix xgettext string extraction for catalogs
- snap: update for icon filename changes
- Add translator comments to the .desktop file
- gladeui-2.0.pc: Data paths relative to datadir
- icon: update app icon
- GladeProject: escape markup in parser errors
- Use autoreconf instead deprecated gnome-common
- Stop defaulting missing images to deprecated stock icons
- Migrate from intltool to gettext
- gladeui: Fix GIR package reference and add c-include
- dtd: Add several new elements
- Add initial implementation of Automatic Templates
- GladeIntro: fix regresion in find_widget_forall()
- GladeProject: add handler signals
- GladeEditor: expose signal editor widget as a property
- GladeIntro: use name and buildable name to find widgets
- GladeWindow: simplify pointer mode actions
- GladeWindow: move actions to GtkApplication
- GladeEPropAttrs: use sane adjustment values for size and scale attrs
- GtkActionable: add action-target property
- Fix tab/space identation
- GladeWidgetAdaptor: add glade_widget_adaptor_get_display_name()
- GladeWindow: port to GtkApplication
- Remove GladeInstantiable prefix from UI
- GladeGtkBin: add initial support for GtkBin abstract class
- GladeWidget: add support for abstract classes
- widget-editor: Replace margin right/left for end/start
- GladeModelButton: improve editor
- GladeEditorProperty, GladePropertyClass, GladeWidgetAdaptor:
- GladeModelButton: enable icon/iconic properties
- Gtk plugin: add support for GFileIcon
- Add initial support for GFile type properties
- Bump Gtk required version to 3.22
- GladeGtkBox: improve children sort function
- GladeGtkHeaderBar: Improve position packing property handling
- Add OARS tags
- Gtk catalog: mark GtkImageMenuItem as deprecated since 3.10
- GladeWidgetAdaptor: added deprecated-since metadata
- GladeImageItemEditor: use display name for commands names
- GladeCommand: ensure widget name on object properties
- GladeGtkAdjustment: add digits virtual property
- GladeEPropNumeric: bind precision property to spin button
- GladeProperty: add precision property
- GladePropertyClass: round floating point values to epsilon
- ui/widget: Make template ver# warning more useful
- GladeCommand: ignore special child types placeholders in add command. GladeGtkWindow: mark titlebar placeholder as special child type.
- Gtk Catalog: add back GtkStatusbar
- GladeGtkHeaderBar: mark title and subtitle as translatable
- GladeGtkDialog: chain up post_create() method
- GladeGtkWindow: remove get_children() method
- GladeAdaptorChooser: add missing translation domain
- GladeGtkWidget: save accessible-role atk property
- GladeGtkWindow: fix regression in csd handling
============
Glade 3.22.0
============
- Fix bug 774994 "in treeview columns editor contextual menu does nothing"
- Simplified GladeBaseEditor
- Fix formatting / layout of project verification details (Daniel P. Berrange)
- Widget chooser: activate treeview with single click and enable Drag & Drop
- Fix Design view selected state
- Fixes bug 793036 "GtkCellRenderer Properties not loaded from glade file" (peter Onion)
- Fix bug in action widgets response-id parsing on 32bits system
- Fix bug 772485 "File Name property of GtkImage is copied to all other GtkImage"
- GladeProject: always treat resource properties as relative
- Fix bug 793652 "Crash when deleting a list"
- Fix bug 793757 "Gtk-CRITICAL **: _gtk_window_add_popover: assertion '_gtk_widget_get_parent (popover) == NULL' failed"
- Add GDK_SUPER_MASK accelerator handling (Sebastian Stang)
- Fix bug #778537 "ActionBar need placeholder"
- Fix bug #794141 - Gtk.IconView disappeared from glade (Albfan)
============
Glade 3.21.0
============
- Main window UI overhaul
- An enhanced enum integer editor based on patch contributed by Lukas K
- Added GtkGLArea object to gtk+ catalog
- Initial support for WebKit2GTK+ library
- Add GtkStackSidebar to control and display widget group
- Bug 767812 "Please don't list 'Taiwan' as 'Taiwan, Province of China' in the country list"
- Bug 763188 - Use correct tag when referring to Palette (Sebastian Rasmussen)
- Fix typo in translatable string; fixing old bug 746531 (Tristan)
- Fix markup typos (Andre Klapper)
============
Glade 3.20.2
============
- Fix bug 763624 "Glade interface designer eating ram & cpu" (Arnaud Rebillout)
- Install appstream metadata to non-deprecated location (Jeremy Bicha)
- Fix bug 790452 "Glade saves invalid GtkBuilder XML"
- Fix bug 782645 "GtkLabel xalign and halign appeared in GTK+ 3.16 and are not deprecated" (Arnaud Rebillout)
- Fix bug 773669 "add background class to GladeDesignLayout children" (Lukas K)
============
Glade 3.20.1
============
- Fixed glib g_ptr_array_find() name clash
- Fixed survey css matching error on CSD
- Fixed bug #773997 "GLADE 3.20: crash on changing ToolItem type"
- Fixes bug #765562 "Using Spacebar to change menu selction causes crash"
- Fixed "format not a string literal" warnings (Bastien Nocera)
- Fixed bug #765885 "client side decoration, no space to add header bar"
- Fixed bug #589306 - Clicking in ... swap order of accelerators (Roberto Guido)
- Fixed bug #761651 "[Wayland] glade previewer is resizing windows until it crashes gnome-shell"
============
Glade 3.20.0
============
- Workspace layout: render frame and selection box with CSS
- GtkWindow: don't set the same titlebar multiple times (Ben Iofel)
- Fixed bug 761839: Fix 'glade' command name in user manual (Anders Jonsson)
- Fixed bug 536840 - Save palette small icon preference (Tristan)
- Fixed bug 430445 - null string default title for GtkFileChooserButton (Tristan)
- Integrate new properties in editor for GtkLabel, GtkTextView, GtkPopover, GtkStackSwitcher (Tristan)
- Fixed bug 750985 - GtkMisc property deprecations (Tristan)
- Fixed bug 759872 - Show popovers hidden by model buttons (Tristan)
- Fixed bug 751234 - Ignore tearoff-state property in the workspace (Tristan)
- Fixed bug 759455 - Avoid showing window decorations in Glade's workspace (Tristan)
- Fixed bug 759395 - Ignore ESC key press from popovers (Tristan)
- Fixed bug 760610: Disable scroll events on property editor widgets (Tristan)
- Support id-less builder files (DX hackfest)
- Added missing tags to the AppData file (Richard Hughes)
- Fixed bug 759847 "Don't crash when popover menu children have no visible-submenu set" Руслан Ижбулатов
- Added support for GtkActionBar and GtkFlowBox (Matthias Clasen)
- Main UI frontend: Use wide paned handles (Tristan)
- Fixed warning about imbalanced children in GtkNotebook support (Tristan)
- Added support for GtkPopoverMenu and GtkModelButton (Matthias Clasen)
- Added support for GtkPopover bug 740104 (Matthias Clasen)
- Fixed bug 754131 "Avoid crashes when loading boxes with center-child children"
- Added <kudos> section to app data as requested by Richard Hughes.
- Added missing displayable values bugs 758290, 758289, 758288, 758287 (Matthias Clasen)
- Deprecate GtkAction, GtkActivatable, and friends bug 757609 (Ben Iofel)
- Avoid GTK+ style context warnings bugs 758296, 758297, 758299, 758300 (Matthias Clasen)
- Drop deprecated style properties in GladeCloseButton bug 758280 (Matthias Clasen)
- Replace use of deprecated gdk_cursor_new (Ben Iofel)
- Add "Stack" to "Add parent" menu bug 754030 (Florian Richter)
- Fixed bug 741923 "build: Add dependency on libm for floor() and ceil()" (Philip Withnall)
============
Glade 3.19.0
============
- Bug 732328 "New: add python3 support" (Bohuslav "Slavek" Kabrda)
- Added new symbolic variant of the app icon (747024 - Jakub Steiner)
- Bug #741165 "Previewer crashes when taking PNG screenshot"
- Added GtkSidebarWidget support (Matthias Clasen)
- Added GtkStack and GtkStackSwitcher support (738480 - Matthias Clasen)
- Added GtkHeaderBar support (bug 700914 - Matthias Clasen)
- Improved undo/redo command list handling.
- Added GtkBox center-widget support (bug 738473 - Matthias Clasen)
- Added GtkSearchBar support (bug 738493 - Matthias Clasen)
- Support CSD windows (Bug 700914 - Matthias Clasen)
- Use current gtk-mac-integration API (bug 738339 - Philip Chimento)
- Fixed bug 732575 "Changed the type hint on the "Edit Separately" window to 'utility'" (Tristan)
- Fixed bug "Missing plural form for UI string: emited %d time(s)"
- Avoid reading freed data in glade_project_read_requires (David Shea)
- Added class chooser popover to workspace. (Bug 708146 "Catalog search entry")
- Added GThemedIcon support.
- GladePreviewer: show handler information in infobar when a signal is emited.
- Migrated UI from stock icons to icon names.
- Seal needed deprecated API and replaced deprecared API.
- GladeWindow: only show found recent files.
- Added GtkLockButton support.
============
Glade 3.18.3
============
@ -1883,4 +1520,3 @@ Translators:
o Zbigniew Chyla
o Hasbullah Bin Pit
o Takeshi AIHANA

60
README Normal file
View File

@ -0,0 +1,60 @@
Glade
=====
A user interface designer for Gtk+ and GNOME
Web: http://glade.gnome.org
Mailing Lists: glade-users@ximian.com - For discussions about using
Glade to build applications.
glade-devel@ximian.com - For discussions about the
development of Glade itself.
General Information
~~~~~~~~~~~~~~~~~~~
Glade is a RAD tool to enable quick &amp; easy development of user interfaces
for the GTK+ 3 toolkit and the GNOME desktop environment.
The user interfaces designed in Glade are saved as XML and these can be loaded
by applications dynamically as needed by using GtkBuilder or used directly to
define a new GtkWidget derived object class using Gtk+ new template feature.
By using GtkBuilder, Glade XML files can be used in numerous programming
languages including C, C++, C#, Vala, Java, Perl, Python,and others.
About Glade
~~~~~~~~~~~
This version of Glade (Glade >= 3.10) targets GTK+ >= 3.0 and is parallel
installable with Glade 3.8.
If you need to work with Glade projects that target GTK+2, you need an
installation of Glade 3.8 (more information on http://blogs.gnome.org/tvb/2011/01/15/the-glade-dl/)
License
~~~~~~~
Glade is distributed under the GNU General Public License (GPL), as described
in the COPYING file.
Requirements
~~~~~~~~~~~~
o GTK+ 3.10.0 or above - http://www.gtk.org
You also need the glib, pango and atk libraries.
Make sure you have the devel packages as well, as these will contain the
header files which you will need to compile C applications.
o libxml 2.4.1 - used to parse the XML files. If you have GNOME 2 you
should already have this.
Installation
~~~~~~~~~~~~
See the file 'INSTALL'

122
README.md
View File

@ -1,122 +0,0 @@
# Glade
User interface designer for Gtk+ and GNOME
* Web - <https://glade.gnome.org>
* Git - <https://gitlab.gnome.org/GNOME/glade>
Mailing Lists:
Both users and devel mailing list have been archived, you can find the archives at
* https://mail.gnome.org/archives/glade-users-list/
* https://mail.gnome.org/archives/glade-devel-list/
## Development status
Glade is not being actively developed or maintained anymore.
If you are interested in becoming a maintainer please contact us on gitlab.
## General Information
Glade is a RAD tool to enable quick and easy development of user interfaces
for the GTK+ 3 toolkit and the GNOME desktop environment.
The user interfaces designed in Glade are saved as XML and these can be loaded
by applications dynamically as needed by using GtkBuilder or used directly to
define a new GtkWidget derived object class using Gtk+ new template feature.
By using GtkBuilder, Glade XML files can be used in numerous programming
languages including C, C++, C#, Vala, Java, Perl, Python, and others.
This version of Glade targets GTK 3
If you need to work with GTK 2, you can still use Glade 3.8
([more information](http://blogs.gnome.org/tvb/2011/01/15/the-glade-dl/))
## License
Glade is distributed under the
[GNU General Public License](https://www.gnu.org/licenses/gpl-2.0.en.html),
version 2 (GPL) and
[GNU Library General Public License](https://www.gnu.org/licenses/old-licenses/lgpl-2.0.en.html),
version 2 (LGPL) as described in the COPYING file.
## Manual instalation
Requirements
* C compiler like [gcc](https://gcc.gnu.org/)
* [Meson](http://mesonbuild.org) build system
* [GTK](http://www.gtk.org) 3.24.0 or above
* [libxml](http://xmlsoft.org/) 2.4.1 - used to parse XML files
* libgirepository1.0 - Build-time dependency
* xsltproc - for man pages generation
Optional dependencies:
* glib-networking plugins for TLS support (Needed for survey)
* libwebkit2gtk-4.0 - For Webkit plugin
* python-gi - For Python plugin
* libgjs - For JavaScript plugin
* gettext, itstool - For translation support
Download sources from git and build using meson/ninja
# Install dependencies, for example in debian
sudo apt install gcc meson libgtk-3-dev libxml2-dev libgirepository1.0-dev xsltproc gettext itstool
# Optional dependencies
sudo apt install libgjs-dev libwebkit2gtk-4.0-dev python-gi-dev glib-networking
# Clone the source repository or download tarball
git clone https://gitlab.gnome.org/GNOME/glade.git
# Create build directory and configure project
mkdir glade/build && cd glade/build
meson --prefix=~/.local
# Build and install
ninja
ninja install
To run it you might need to set up LD_LIBRARY_PATH depending on your
distribution defaults
LD_LIBRARY_PATH=~/.local/lib/x86_64-linux-gnu/ glade
## Linux
Debian
apt install glade
Fedora
yum install glade
Any distribution with Flatpak
flatpak install flathub org.gnome.Glade
[<img width='240' alt='Download on Flathub' src='https://flathub.org/assets/badges/flathub-badge-i-en.png'/>](https://flathub.org/apps/details/org.gnome.Glade)
## Windows
Available as a
[package](https://packages.msys2.org/package/mingw-w64-x86_64-glade) in
[MSYS2](https://www.msys2.org/)
pacman -S mingw-w64-x86_64-glade
## OSX
Available as a [package](https://formulae.brew.sh/formula/glade) in
[Brew](https://brew.sh/)
brew install glade

7
README.svn Normal file
View File

@ -0,0 +1,7 @@
If you are a long time gnome committer and you have a minor patch
that you are sure is correct, then go ahead and commit.
For the other great majority of the time; please ask before commiting
at glade-devel@lists.ximian.com.
All commits must have a ChangeLog entry.

34
TODO
View File

@ -9,37 +9,3 @@ should only be used for the view in the workspace.
A first step could be updating GladeProject to only use GladeWidget internally
and then we can update gladeui api to use GladeWidget instead but this means a
API/ABI break
GtkBuilder unsuported features:
==============================
* Property bindings
Unsupported object classes:
==========================
Glib
* GMenu/GMenuModel (<menu> GtkBuilder element)
Because GMenu is in Glib library it can not implement GtkBuildable iface which
is in GTK+ this lead to implementing GMenu object construction in GtkBuilder
using a custom element <menu>
Ideally we should move GtkBuilder and GtkBuildable to Glib and rename them
GBuilder and GBuildable so that we can implemet GBuildable in GMenu object
A way to avoid this would be to create a new object type in GTK that derives
from GMenu say GtkMenuObject (GtkMenu is already taken ;) and make it implement
GtkBuildable iface.
* GAction, GSimpleAction, GActionGroup
GTK+ 3.4
* GtkApplication (add buildable iface to support GMenuModel?¿)
GTK+ 3.14
* type="action" children in GtkDialog
GTK+ 3.20
* GtkShortcutsWindow

22
autogen.sh Executable file
View File

@ -0,0 +1,22 @@
#!/bin/sh
# Run this to generate all the initial makefiles, etc.
srcdir=`dirname $0`
test -z "$srcdir" && srcdir=.
PKG_NAME="glade"
(test -f $srcdir/configure.ac \
&& test -f $srcdir/autogen.sh) || {
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
echo " top-level $PKG_NAME directory"
exit 1
}
which gnome-autogen.sh || {
echo "You need to install gnome-common module and make"
echo "sure the gnome-autogen.sh script is in your \$PATH."
exit 1
}
. gnome-autogen.sh

66
build/linux/AppRun Executable file
View File

@ -0,0 +1,66 @@
#!/bin/sh
#
# Copyright (C) Tristan Van Berkom <tristan@upstairslabs.com>
#
# This library 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.1 of
# the License, or (at your option) any later version.
#
# This library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Authors:
# Tristan Van Berkom <tristan@upstairslabs.com>
#
# This is setup by PrepareAppDir.sh
INSTALL_PREFIX=@APP_DIR_ROOT@
# Base environment variables
LD_LIBRARY_PATH=${APPDIR}${INSTALL_PREFIX}/lib:${LD_LIBRARY_PATH}
PATH=${APPDIR}${INSTALL_PREFIX}/bin:${PATH}
XDG_DATA_DIRS=${APPDIR}${INSTALL_PREFIX}/share:${XDG_DATA_DIRS}
export LD_LIBRARY_PATH PATH XDG_DATA_DIRS
# D-Bus, silence fatal warnings, libdbus is in the mix but we don't need a D-Bus environment for Glade
DBUS_FATAL_WARNINGS=0
export DBUS_FATAL_WARNINGS
# Pango environment variables
PANGO_RC_FILE=${APPDIR}/pangorc
export PANGO_RC_FILE
# GTK+/GIO/GdkPixbuf environment variables
# http://askubuntu.com/questions/251712/how-can-i-install-a-gsettings-schema-without-root-privileges
GSETTINGS_SCHEMA_DIR=${APPDIR}${INSTALL_PREFIX}/share/glib-2.0/schemas/:${GSETTINGS_SCHEMA_DIR}
GDK_PIXBUF_MODULE_FILE=${APPDIR}${INSTALL_PREFIX}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
GTK_PATH=${APPDIR}${INSTALL_PREFIX}/lib/gtk-3.0
GTK_DATA_PREFIX=${APPDIR}${INSTALL_PREFIX}
GTK_THEME=Adwaita
export GSETTINGS_SCHEMA_DIR GDK_PIXBUF_MODULE_FILE GTK_PATH GTK_DATA_PREFIX GTK_THEME
# Glade environment variables
GLADE_CATALOG_SEARCH_PATH=${APPDIR}${INSTALL_PREFIX}/share/glade/catalogs
GLADE_MODULE_SEARCH_PATH=${APPDIR}${INSTALL_PREFIX}/lib/glade/modules
GLADE_PIXMAP_DIR=${APPDIR}${INSTALL_PREFIX}/share/glade/pixmaps
GLADE_BUNDLED=1
export GLADE_CATALOG_SEARCH_PATH GLADE_MODULE_SEARCH_PATH GLADE_PIXMAP_DIR GLADE_BUNDLED
# Currently we change into the APPDIR directory, this only because of gdk-pixbuf
# and pango cache files which need to specify relative paths.
cd ${APPDIR}
if test -z ${APP_IMAGE_TEST}; then
# Invoke Glade with the arguments passed
${APPDIR}${INSTALL_PREFIX}/bin/glade $*
else
# Run a shell in test mode
bash;
fi

View File

@ -0,0 +1,397 @@
/*
* Copyright (C) 2011 Jan Niklas Hasse <jhasse@gmail.com>
* Copyright (C) 2013 Upstairs Laboratories Inc.
*
* This library 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.1 of
* the License, or (at your option) any later version.
*
* This library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Authors:
* Jan Niklas Hasse <jhasse@gmail.com>
* Tristan Van Berkom <tristan@upstairslabs.com>
*/
using GLib;
static const string DEFAULT_TARGET = "2.7";
static const string DEFAULT_TARGET_HELP = "Target glibc ABI (Default 2.7)";
/***************************************************************
* Debugging Facilities *
***************************************************************/
[Flags]
public enum DF {
COLLECT,
FILTER,
VERSION_PARSE,
VERSION_COMPARE,
DUMP_FILES
}
static const GLib.DebugKey[] libcwrap_debug_keys = {
{ "collect", DF.COLLECT },
{ "filter", DF.FILTER },
{ "version-parse", DF.VERSION_PARSE },
{ "version-compare", DF.VERSION_COMPARE },
{ "dump-files", DF.DUMP_FILES }
};
private uint libcwrap_debug_mask = 0;
public delegate void DebugFunc ();
public void libcwrap_note (int domain, DebugFunc debug_func)
{
if ((libcwrap_debug_mask & domain) != 0)
debug_func ();
}
/***************************************************************
* VersionNumber class *
***************************************************************/
class VersionNumber : Object
{
private int major { get; set; } // x.0.0
private int minor { get; set; } // 0.x.0
private int revision { get; set; } // 0.0.x
private string originalString;
public VersionNumber (string version) {
originalString = version;
try {
var regex = new Regex("([[:digit:]]*)\\.([[:digit:]]*)\\.*([[:digit:]]*)");
var split = regex.split(version);
assert (split.length > 1); // TODO: Don't use assert, print a nice error message instead
major = int.parse (split[1]);
if (split.length > 2)
minor = int.parse (split[2]);
else
minor = 0;
if (split.length > 3)
revision = int.parse (split[3]);
else
revision = 0;
} catch (GLib.RegexError e) {
stdout.printf ("Error compiling regular expression: %s", e.message);
Posix.exit (-1);
}
libcwrap_note (DF.VERSION_PARSE, () =>
stdout.printf ("Version string '%s' parsed as major: %d minor: %d rev: %d\n",
originalString, major, minor, revision));
}
public bool newerThan(VersionNumber other) {
bool newerThanOther = false;
if (major > other.major) {
newerThanOther = true;
} else if (major == other.major) {
if (minor > other.minor) {
newerThanOther = true;
} else if (minor == other.minor) {
if(revision > other.revision) {
newerThanOther = true;
}
}
}
libcwrap_note (DF.VERSION_COMPARE, () =>
stdout.printf ("Version '%s' is %s than version '%s'\n",
originalString,
newerThanOther ? "newer" : "older",
other.getString()));
return newerThanOther;
}
public string getString() {
return originalString;
}
}
/***************************************************************
* Main *
***************************************************************/
public class Main : Object {
/* Command line options */
private static string? libdir = null;
private static string? output = null;
private static string? target = null;
private const GLib.OptionEntry[] options = {
{ "libdir", 'l', 0, OptionArg.FILENAME, ref libdir, "Library directory", "<DIRECTORY>" },
{ "output", 'o', 0, OptionArg.STRING, ref output, "Header to create", "<FILENAME>" },
{ "target", 't', 0, OptionArg.STRING, ref target, DEFAULT_TARGET_HELP, "<MAJOR.MINOR[.MICRO]>" },
{ null }
};
/* Local variables */
private static VersionNumber minimumVersion;
private static Gee.HashMap<string, VersionNumber>symbolMap;
private static Gee.HashSet<string>filterMap;
public static int main (string[] args) {
/* Initialize debugging */
string libcwrap_debug_env = GLib.Environment.get_variable ("LIBCWRAP_DEBUG");
libcwrap_debug_mask = GLib.parse_debug_string (libcwrap_debug_env, libcwrap_debug_keys);
/* Initialize the default here */
target = DEFAULT_TARGET;
try {
var opt_context = new OptionContext ("- Libc compatibility header generator");
opt_context.set_help_enabled (true);
opt_context.add_main_entries (options, null);
opt_context.parse (ref args);
} catch (OptionError e) {
stdout.printf ("error: %s\n", e.message);
stdout.printf ("Run '%s --help' for a list of available command line options.\n", args[0]);
return 0;
}
if (libdir == null) {
stdout.printf ("Must specify --libdir\n");
stdout.printf ("Run '%s --help' for a list of available command line options.\n", args[0]);
return 0;
}
if (output == null) {
stdout.printf ("Must specify --output\n");
stdout.printf ("Run '%s --help' for a list of available command line options.\n", args[0]);
return 0;
}
/* Initialize local resources */
minimumVersion = new VersionNumber (target);
/* All symbols, containing the newest possible version before 'minimumVersion' if possible */
symbolMap = new Gee.HashMap<string, VersionNumber>((Gee.HashDataFunc<string>)GLib.str_hash,
(Gee.EqualDataFunc<string>)GLib.str_equal);
/* All symbols which did not have any version > minimumVersion */
filterMap = new Gee.HashSet<string>((Gee.HashDataFunc<string>)GLib.str_hash,
(Gee.EqualDataFunc<string>)GLib.str_equal);
try {
stdout.printf ("Generating %s (glibc %s) from libs at '%s' .", output, minimumVersion.getString(), libdir);
parseLibraries ();
generateHeader ();
} catch (Error e) {
warning("%s", e.message);
return 1;
}
stdout.printf(" OK\n");
return 0;
}
private static void parseLibrary (Regex regex, FileInfo fileinfo) throws Error {
string commandToUse = "objdump -T";
string output, errorOutput;
int returnCode;
/* For testing on objdump files which might be collected on other systems,
* run the generator with --libdir /path/to/objdump/files/
*/
if ((libcwrap_debug_mask & DF.DUMP_FILES) != 0)
commandToUse = "cat";
Process.spawn_command_line_sync (commandToUse + " " + libdir + "/" + fileinfo.get_name(),
out output, out errorOutput, out returnCode);
if (returnCode != 0)
return;
foreach (var line in output.split ("\n")) {
if (regex.match (line) && !("PRIVATE" in line)) {
var version = new VersionNumber (regex.split (line)[3]);
var symbolName = regex.split (line)[7];
var versionInMap = symbolMap.get (symbolName);
/* Some versioning symbols exist in the objdump output, let's skip those */
if (symbolName.has_prefix ("GLIBC"))
continue;
libcwrap_note (DF.COLLECT, () =>
stdout.printf ("Selected symbol '%s' version '%s' from objdump line %s\n",
symbolName, version.getString(), line));
if (versionInMap == null) {
symbolMap.set (symbolName, version);
/* First occurance of the symbol, if it's older
* than the minimum required, put it in that table also
*/
if (minimumVersion.newerThan (version)) {
filterMap.add (symbolName);
libcwrap_note (DF.FILTER, () =>
stdout.printf ("Adding symbol '%s %s' to the filter\n",
symbolName, version.getString()));
}
} else {
/* We want the newest possible version of a symbol which is older than the
* minimum glibc version specified (or the only version of the symbol if
* it's newer than the minimum version)
*/
/* This symbol is <= minimumVersion
*/
if (!version.newerThan (minimumVersion)) {
/* What we have in the map is > minimumVersion, so we need this version */
if (versionInMap.newerThan (minimumVersion))
symbolMap.set (symbolName, version);
/* What we have in the map is already <= minimumVersion, but we want
* the most recent acceptable symbol
*/
else if (version.newerThan (versionInMap))
symbolMap.set (symbolName, version);
} else { /* This symbol is > minimumVersion */
/* If there are only versions > minimumVersion, then we want
* the lowest possible version, this is because we try to provide
* information in the linker warning about what version the symbol
* was initially introduced in.
*/
if (versionInMap.newerThan (minimumVersion) &&
versionInMap.newerThan (version))
symbolMap.set (symbolName, version);
}
/* While trucking along through the huge symbol list, remove symbols from
* the 'safe to exclude' if there is a version found which is newer
* than the minimum requirement
*/
if (version.newerThan (minimumVersion)) {
filterMap.remove(symbolName);
libcwrap_note (DF.FILTER, () =>
stdout.printf ("Removing symbol '%s' from the filter, found version '%s'\n",
symbolName, version.getString()));
}
}
} else {
libcwrap_note (DF.COLLECT, () => stdout.printf ("Rejected objdump line %s\n", line));
}
}
}
private static void parseLibraries () throws Error {
var libPath = File.new_for_path (libdir);
var enumerator = libPath.enumerate_children (FileAttribute.STANDARD_NAME, 0, null);
var regex = new Regex ("(.*)(GLIBC_)([0-9]+\\.([0-9]+\\.)*[0-9]+)(\\)?)([ ]*)(.+)");
var counter = 0;
FileInfo fileinfo;
while ((fileinfo = enumerator.next_file(null)) != null) {
if (++counter % 50 == 0) {
stdout.printf(".");
stdout.flush();
}
parseLibrary (regex, fileinfo);
}
}
private static void appendSymbols (StringBuilder headerFile, bool unavailableSymbols) {
if (unavailableSymbols)
headerFile.append("\n/* Symbols introduced in newer glibc versions, which must not be used */\n");
else
headerFile.append("\n/* Symbols redirected to earlier glibc versions */\n");
foreach (var it in symbolMap.keys) {
var version = symbolMap.get (it);
string versionToUse;
/* If the symbol only has occurrences older than the minimum required glibc version,
* then there is no need to output anything for this symbol
*/
if (filterMap.contains (it))
continue;
/* If the only available symbol is > minimumVersion, then redirect it
* to a comprehensible linker error, otherwise redirect the symbol
* to it's existing version <= minimumVersion.
*/
if (version.newerThan (minimumVersion)) {
versionToUse = "DONT_USE_THIS_VERSION_%s".printf (version.getString());
if (!unavailableSymbols)
continue;
} else {
versionToUse = version.getString ();
if (unavailableSymbols)
continue;
}
headerFile.append("__asm__(\".symver %s, %s@GLIBC_%s\");\n".printf(it, it, versionToUse));
}
}
private static void generateHeader () throws Error {
var headerFile = new StringBuilder ();
/* FIXME: Currently we do:
*
* if !defined (__OBJC__) && !defined (__ASSEMBLER__)
*
* But what we want is a clause which accepts any form of C including C++ and probably
* also including ObjC. That said, the generated header works fine for C and C++ sources.
*/
headerFile.append ("/* glibc bindings for target ABI version glibc " + minimumVersion.getString() + " */\n");
headerFile.append ("#if !defined (__LIBC_CUSTOM_BINDINGS_H__)\n");
headerFile.append ("\n");
headerFile.append ("# if !defined (__OBJC__) && !defined (__ASSEMBLER__)\n");
headerFile.append ("# if defined (__cplusplus)\n");
headerFile.append ("extern \"C\" {\n");
headerFile.append ("# endif\n");
/* First generate the available redirected symbols, then the unavailable symbols */
appendSymbols (headerFile, false);
appendSymbols (headerFile, true);
headerFile.append ("\n");
headerFile.append ("# if defined (__cplusplus)\n");
headerFile.append ("}\n");
headerFile.append ("# endif\n");
headerFile.append ("# endif /* !defined (__OBJC__) && !defined (__ASSEMBLER__) */\n");
headerFile.append ("#endif\n");
FileUtils.set_contents (output, headerFile.str);
}
}

106
build/linux/PrepareAppDir.sh Executable file
View File

@ -0,0 +1,106 @@
#!/bin/sh
#
# Used to prepare the AppDir bundle directory. -*- mode: sh -*-
#
# Written by Tristan Van Berkom <tristan@upstairslabs.com>
#
# 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
APP_DIR_ROOT=$1
BUNDLE_DIR=$2
if test -z ${APP_DIR_ROOT} || test -z ${BUNDLE_DIR}; then
echo "Usage ./PrepareAppDir.sh /path/to/AppImage/Install /path/to/glade/build/linux"
exit 0;
fi
echo -n "Removing various unwanted files from the image... "
# Remove static libraries and libtool archives
rm -f `find ${APP_DIR_ROOT} -name "*.a"`
rm -f `find ${APP_DIR_ROOT} -name "*.la"`
# Remove include directory
rm -rf ${APP_DIR_ROOT}/include
# Remove various stuff in /share
rm -rf ${APP_DIR_ROOT}/share/man
rm -rf ${APP_DIR_ROOT}/share/info
rm -rf ${APP_DIR_ROOT}/share/help
rm -rf ${APP_DIR_ROOT}/share/doc
rm -rf ${APP_DIR_ROOT}/share/gtk-doc
rm -rf ${APP_DIR_ROOT}/share/gdb
rm -rf ${APP_DIR_ROOT}/share/gdm
rm -rf ${APP_DIR_ROOT}/share/vala
rm -rf ${APP_DIR_ROOT}/share/pkgconfig
rm -rf ${APP_DIR_ROOT}/share/gnome
rm -rf ${APP_DIR_ROOT}/share/xml
rm -rf ${APP_DIR_ROOT}/share/bash-completion
rm -rf ${APP_DIR_ROOT}/share/appdata
rm -rf ${APP_DIR_ROOT}/share/dbus-1
rm -rf ${APP_DIR_ROOT}/share/glib-2.0/codegen
rm -rf ${APP_DIR_ROOT}/share/glib-2.0/gdb
rm -rf ${APP_DIR_ROOT}/share/glib-2.0/gettext
# Remove the binaries we dont need
mv ${APP_DIR_ROOT}/bin/glade ${APP_DIR_ROOT}/glade
mv ${APP_DIR_ROOT}/bin/glade-previewer ${APP_DIR_ROOT}/glade-previewer
rm -f ${APP_DIR_ROOT}/bin/*
mv ${APP_DIR_ROOT}/glade ${APP_DIR_ROOT}/bin
mv ${APP_DIR_ROOT}/glade-previewer ${APP_DIR_ROOT}/bin
rm -f ${APP_DIR_ROOT}/libexec/*
# jhbuild meta directory
rm -rf ${APP_DIR_ROOT}/_jhbuild
echo "Done."
echo -n "Removing encoded rpath from all binaries... "
chrpath -d ${APP_DIR_ROOT}/bin/glade
chrpath -d ${APP_DIR_ROOT}/bin/glade-previewer
chrpath -d `find ${APP_DIR_ROOT} -name "*.so"`
echo "Done."
echo -n "Setting up symlinks for new environment... "
WORK_DIR=`pwd`
# Create a /usr link in the install prefix, this is for AppImageKit to find the desktop icon properly
cd ${APP_DIR_ROOT}
ln -s . usr
# Create a symlink at ${APP_DIR_ROOT}${APP_DIR_ROOT} which
# links back to the root of the bundle.
#
# All our paths are relative to the jhbuild prefix, so we need
# this symlink to pretend that the build prefix is the root.
mkdir -p ${APP_DIR_ROOT}/${APP_DIR_ROOT%Install}
cd ${APP_DIR_ROOT}/${APP_DIR_ROOT%Install}
ln -s ../../.. Install
# Restore working directory
cd $WORK_DIR
echo "Done."
echo -n "Installing desktop file and runner script... "
cp ${APP_DIR_ROOT}/share/applications/glade.desktop ${APP_DIR_ROOT}
cat ${BUNDLE_DIR}/AppRun | sed -e "s|@APP_DIR_ROOT@|${APP_DIR_ROOT}|g" > ${APP_DIR_ROOT}/AppRun
chmod +x ${APP_DIR_ROOT}/AppRun
echo "Done."
echo -n "Fixing pixbuf loaders to have bundle relative paths... "
# Post process the loaders.cache file to use relative paths, we use a for loop here
# just because we're not sure the exact location, it could be in lib or lib64
for cache in `find ${APP_DIR_ROOT} -path "*gdk-pixbuf-2.0/2.10.0/loaders.cache"`; do
cat $cache | sed -e "s|${APP_DIR_ROOT}|\.${APP_DIR_ROOT}|g" > $cache.1 && mv $cache.1 $cache;
done
echo "Done."

158
build/linux/README Normal file
View File

@ -0,0 +1,158 @@
Instructions on how to build a bundle for 64bit linux systems.
System requirements
~~~~~~~~~~~~~~~~~~~
o A 64bit linux system
o AppImageKit (https://github.com/probonopd/AppImageKit)
To build AppImageKit, you will require:
- A functional cross compiler to generate 32bit binaries as well as 64bit binaries
- libfuse (if AppImageKit doesnt find it, make sure there is a symbolic link to libfuse.so
from it's actual library, this is because AppImageKit uses CMake, and CMake itself
is just not smart).
- An old glib version installed on your system, the older the glib version the better
(this system glib version will be required on target hosts which want to run the bundle).
- Some other things like python, which you will just have to deal with the CMakeLists.txt
to figure out.
o jhbuild
The bundler mechanism for Glade comes in the form of a jhbuild scripted environment, you will
need a relatively new checkout of jhbuild.
o chrpath
This will be required after your build root is complete, we use it to strip out the -rpaths which
libtool loves to embed into binaries.
o Vala compiler, we'll be using valac --pkg gee-0.8 --pkg posix --pkg glib-2.0 --pkg gio-2.0
Build Instructions
~~~~~~~~~~~~~~~~~~
Make sure you have Glade sources *first*.
We will refer to your Glade checkout or tarball directory as ${GLADE_CHECKOUT}, we expect
this to be a "/full/path/to/the/checkout/of/glade"
Build the LibcWrapGenerator
~~~~~~~~~~~~~~~~~~~~~~~~~~~
To update the libcwrap.h for your system's version of glibc, first you must build
the LibcWrapGenerator like so:
cd ${GLADE_CHECKOUT}/build/linux
valac --pkg gee-0.8 --pkg posix --pkg glib-2.0 --pkg gio-2.0 LibcWrapGenerator.vala
Note that the environment in which you choose to build and run the generator is of
absolutely no consequence, I had to build & run this from an existing jhbuild environment
because I lacked the gee-0.8, this is absolutely not a problem.
Updating libcwrap.h
~~~~~~~~~~~~~~~~~~~
The libcwrap.h header file is the magick which ensures that you target a specific
version of the glibc ABI.
To generate the libcwrap.h file, run the generator like so:
cd ${GLADE_CHECKOUT}/build/linux
./LibcWrapGenerator libcwrap.h 2.7 /path/to/libc/runtime/libraries
We recommend using 2.7 as a stable base glibc requirement, the patches
for this bundle (which are only a few) allow usage of glibc 2.7 and later.
The path to your libc runtime should be a directory containing libc.so.6
and other libc runtime libraries, some systems keep this in different
directories (i.e. /lib/x86_64-linux-gnu, /lib, /lib64 are good bets).
For a more detailed explanation of what libcwrap.h does, look into the
file header of LibcWrapGenerator.vala.
Building AppImageKit
~~~~~~~~~~~~~~~~~~~~
Fetch AppImageKit form https://github.com/probonopd/AppImageKit/
To build follow these steps:
cd AppImageKit
export CC='gcc -U_FORTIFY_SOURCE -include ${GLADE_CHECKOUT}/build/linux/libcwrap.h'
cmake .
make
unset CC
Building the stack
~~~~~~~~~~~~~~~~~~
To build the whole stack up to Glade, including Glade, issue this command:
BUNDLE_ROOT=~/GladeBundle BUNDLE_DIR=${GLADE_CHECKOUT}/build/linux jhbuild -f ${GLADE_CHECKOUT}/build/linux/jhbuildrc build
This will build everything into the ${BUNDLE_ROOT} you specified, the actual installation
will be found in ${BUNDLE_ROOT}/Install
This will not interfere with any existing jhbuild environment you may already have setup,
everything is self contained and happens inside the ${BUNDLE_ROOT} you specify.
Post processing the image directory
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Some post processing is needed on the AppDir, we intentionally keep this separate from
the jhbuild setup. To perform the needed post processing, issue this command:
${GLADE_CHECKOUT}/build/linux/PrepareAppDir.sh ${BUNDLE_ROOT}/Install ${GLADE_CHECKOUT}/build/linux
WARNING: The above script will modify the ${BUNDLE_ROOT}/Install directory in such
a way that it cannot be rebuilt (development headers and unneeded cruft is removed
from the installation directory). This is why we use a script as a separate stage from
building.
At this point, you should have a fully functional image in ${BUNDLE_ROOT}/Install
Bundling
~~~~~~~~
Build the bundle with one simple command:
/path/to/AppImageKit/AppImageAssistant ${BUNDLE_ROOT}/Install ~/glade
This will create a huge binary named 'glade' at the location of your choosing.
Running and Debugging the bundle
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can run the created bundle by simply executing it, hopefully
this will work on a large variety of 64-bit linux systems.
If things turn out badly, you can debug it by typing:
APP_IMAGE_TEST=1 ./glade
Instead of running glade, this will give you a shell inside
the mounted bundle environment.
Some checks you may want to perform include:
ldd bin/glade
This should show you which libraries are linked to the system
and which are properly pulled from the bundle. We've intentionally
left out X11 libraries, fontconfig and freetype, so these should
be pulled from somewhere in your system directories.
LD_DEBUG=all ./bin/glade > ${HOME}/bindings.log 2>&1
This will create a log of all the symbol bindings, you may want
to check here if any symbol originating in the bundle is bound
to GLIBC > 2.7, the intention with this configuration is to aim
for a low glibc dependency, if libraries inside your bundle require
a higher libc version than 2.7 then the libcwrap.h file probably
needs to be regenerated (the committed version should work for
glibc ABI versions up to 2.15).
Note that as we rely on the system's Xlib libraries, fontconfig
and freetype libraries, there will be references to GLIBC > 2.7
from those system libraries, this is not a problem at all as they
will be resolved differently on hosts with older glibc.

69
build/linux/jhbuildrc Normal file
View File

@ -0,0 +1,69 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
#
# Copyright (C) Tristan Van Berkom <tristan@upstairslabs.com>
#
# This library 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.1 of
# the License, or (at your option) any later version.
#
# This library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Authors:
# Tristan Van Berkom <tristan@upstairslabs.com>
#
use_local_modulesets = True
modulesets_dir = os.getenv('BUNDLE_DIR') + '/modulesets'
moduleset = 'bundle.modules'
# Unset autogenargs (screws with some modules like freetype)
autogenargs = ''
# This causes jhbuild to fire some sort of warning, but no problem...
build_cflags = ''
# _FORTIFY_SOURCE can be defined by default in some compilers
# we want to unset this because glibc's runtime checkers are only
# available in recent versions of glibc
build_cflags += ' -U_FORTIFY_SOURCE'
# Include the libcwrap.h before anything else for every source, this
# ensures we are targetting the right version of glibc
build_cflags += ' -include ' + os.getenv('BUNDLE_DIR') + '/libcwrap.h'
# Set the compiler flags for both C and C++ sources, overriding CC and CXX
# ensures that they come before any flags that any buildscripts might add
os.environ['CC'] = 'gcc ' + build_cflags
os.environ['CXX'] = 'g++ ' + build_cflags
# Enable our custom triggers
os.environ['JHBUILD_TRIGGERS'] = os.getenv('BUNDLE_DIR') + '/triggers'
# A list of the modules to build.
modules = [ 'glade' ]
# Where to put the tarballs, sources and install prefix
if os.environ.get('BUNDLE_ROOT') is not None:
tarballdir = os.environ.get('BUNDLE_ROOT') + '/Tarballs'
checkoutroot = os.environ.get('BUNDLE_ROOT') + '/Sources'
prefix = os.environ.get('BUNDLE_ROOT') + '/Install'
else:
tarballdir = '~/AppImages/Tarballs'
checkoutroot = '~/AppImages/Sources'
prefix = '~/AppImages/Install'
# Dont put anything into a lib64 directory, whether we build for
# 32bit linux or 64bit linux, we want a constant path for the libraries
use_lib64 = False
# Uncomment this for verbose builds
# makeargs = "V=1"

229
build/linux/libcwrap.h Normal file
View File

@ -0,0 +1,229 @@
/* glibc bindings for target ABI version glibc 2.7 */
#if !defined (__LIBC_CUSTOM_BINDINGS_H__)
# if !defined (__OBJC__) && !defined (__ASSEMBLER__)
# if defined (__cplusplus)
extern "C" {
# endif
/* Symbols redirected to earlier glibc versions */
__asm__(".symver __sched_cpualloc, __sched_cpualloc@GLIBC_2.7");
__asm__(".symver mkostemp, mkostemp@GLIBC_2.7");
__asm__(".symver eventfd, eventfd@GLIBC_2.7");
__asm__(".symver eventfd_read, eventfd_read@GLIBC_2.7");
__asm__(".symver eventfd_write, eventfd_write@GLIBC_2.7");
__asm__(".symver sys_nerr, sys_nerr@GLIBC_2.4");
__asm__(".symver __isoc99_vfwscanf, __isoc99_vfwscanf@GLIBC_2.7");
__asm__(".symver __isoc99_fwscanf, __isoc99_fwscanf@GLIBC_2.7");
__asm__(".symver mkostemp64, mkostemp64@GLIBC_2.7");
__asm__(".symver __openat_2, __openat_2@GLIBC_2.7");
__asm__(".symver memcpy, memcpy@GLIBC_2.2.5");
__asm__(".symver sys_errlist, sys_errlist@GLIBC_2.4");
__asm__(".symver __isoc99_vswscanf, __isoc99_vswscanf@GLIBC_2.7");
__asm__(".symver __fread_chk, __fread_chk@GLIBC_2.7");
__asm__(".symver __isoc99_swscanf, __isoc99_swscanf@GLIBC_2.7");
__asm__(".symver __isoc99_vscanf, __isoc99_vscanf@GLIBC_2.7");
__asm__(".symver __open64_2, __open64_2@GLIBC_2.7");
__asm__(".symver __sched_cpufree, __sched_cpufree@GLIBC_2.7");
__asm__(".symver __isoc99_vwscanf, __isoc99_vwscanf@GLIBC_2.7");
__asm__(".symver _sys_errlist, _sys_errlist@GLIBC_2.4");
__asm__(".symver __isoc99_wscanf, __isoc99_wscanf@GLIBC_2.7");
__asm__(".symver __isoc99_vsscanf, __isoc99_vsscanf@GLIBC_2.7");
__asm__(".symver posix_spawn, posix_spawn@GLIBC_2.2.5");
__asm__(".symver __fread_unlocked_chk, __fread_unlocked_chk@GLIBC_2.7");
__asm__(".symver __isoc99_vfscanf, __isoc99_vfscanf@GLIBC_2.7");
__asm__(".symver posix_spawnp, posix_spawnp@GLIBC_2.2.5");
__asm__(".symver __isoc99_sscanf, __isoc99_sscanf@GLIBC_2.7");
__asm__(".symver __isoc99_fscanf, __isoc99_fscanf@GLIBC_2.7");
__asm__(".symver signalfd, signalfd@GLIBC_2.7");
__asm__(".symver _sys_nerr, _sys_nerr@GLIBC_2.4");
__asm__(".symver __isoc99_scanf, __isoc99_scanf@GLIBC_2.7");
__asm__(".symver __mq_open_2, __mq_open_2@GLIBC_2.7");
__asm__(".symver __open_2, __open_2@GLIBC_2.7");
__asm__(".symver __openat64_2, __openat64_2@GLIBC_2.7");
/* Symbols introduced in newer glibc versions, which must not be used */
__asm__(".symver ns_name_pton, ns_name_pton@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver pthread_mutex_consistent, pthread_mutex_consistent@GLIBC_DONT_USE_THIS_VERSION_2.12");
__asm__(".symver __yn_finite, __yn_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __atan2_finite, __atan2_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __dprintf_chk, __dprintf_chk@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver setns, setns@GLIBC_DONT_USE_THIS_VERSION_2.14");
__asm__(".symver __atanhf_finite, __atanhf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_put16, ns_put16@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __gamma_r_finite, __gamma_r_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver recvmmsg, recvmmsg@GLIBC_DONT_USE_THIS_VERSION_2.12");
__asm__(".symver __y1_finite, __y1_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __ynf_finite, __ynf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __fentry__, __fentry__@GLIBC_DONT_USE_THIS_VERSION_2.13");
__asm__(".symver ns_msg_getflag, ns_msg_getflag@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __j0l_finite, __j0l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_put32, ns_put32@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __coshl_finite, __coshl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver register_printf_modifier, register_printf_modifier@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __asinl_finite, __asinl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __posix_getopt, __posix_getopt@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __fmodl_finite, __fmodl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __atan2l_finite, __atan2l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __exp2f_finite, __exp2f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __obstack_vprintf_chk, __obstack_vprintf_chk@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver __fdelt_warn, __fdelt_warn@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver prlimit64, prlimit64@GLIBC_DONT_USE_THIS_VERSION_2.13");
__asm__(".symver timerfd_gettime, timerfd_gettime@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver timerfd_settime, timerfd_settime@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver __sinhl_finite, __sinhl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __acos_finite, __acos_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __logf_finite, __logf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver sgetsgent_r, sgetsgent_r@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver ns_makecanon, ns_makecanon@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __y1l_finite, __y1l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __lgammal_r_finite, __lgammal_r_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __log_finite, __log_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver fallocate64, fallocate64@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver setsgent, setsgent@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __acosf_finite, __acosf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __longjmp_chk, __longjmp_chk@GLIBC_DONT_USE_THIS_VERSION_2.11");
__asm__(".symver __remainderf_finite, __remainderf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver scandirat64, scandirat64@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver endsgent, endsgent@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver preadv64, preadv64@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __exp10l_finite, __exp10l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver mkstemps64, mkstemps64@GLIBC_DONT_USE_THIS_VERSION_2.11");
__asm__(".symver __log10f_finite, __log10f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __hypot_finite, __hypot_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __sqrtf_finite, __sqrtf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_datetosecs, ns_datetosecs@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver mkstemps, mkstemps@GLIBC_DONT_USE_THIS_VERSION_2.11");
__asm__(".symver __gammaf_r_finite, __gammaf_r_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver inotify_init1, inotify_init1@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver putsgent, putsgent@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver timerfd_create, timerfd_create@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver __jnl_finite, __jnl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __acosh_finite, __acosh_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __powl_finite, __powl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver process_vm_writev, process_vm_writev@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_parse_ttl, ns_parse_ttl@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __vdprintf_chk, __vdprintf_chk@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver __j0f_finite, __j0f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __coshf_finite, __coshf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_format_ttl, ns_format_ttl@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver preadv, preadv@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver ns_subdomain, ns_subdomain@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __asinf_finite, __asinf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver open_by_handle_at, open_by_handle_at@GLIBC_DONT_USE_THIS_VERSION_2.14");
__asm__(".symver __j1f_finite, __j1f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __atanhl_finite, __atanhl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __remainder_finite, __remainder_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __sqrt_finite, __sqrt_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __atan2f_finite, __atan2f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_name_ntol, ns_name_ntol@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __asprintf_chk, __asprintf_chk@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver ns_name_rollback, ns_name_rollback@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver ns_name_ntop, ns_name_ntop@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __vasprintf_chk, __vasprintf_chk@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver __ynl_finite, __ynl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_samename, ns_samename@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver ns_initparse, ns_initparse@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver getsgent_r, getsgent_r@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __exp2l_finite, __exp2l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver execvpe, execvpe@GLIBC_DONT_USE_THIS_VERSION_2.11");
__asm__(".symver __j0_finite, __j0_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver pwritev, pwritev@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __jn_finite, __jn_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __logl_finite, __logl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver fallocate, fallocate@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver process_vm_readv, process_vm_readv@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __exp10f_finite, __exp10f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __j1_finite, __j1_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_sprintrrf, ns_sprintrrf@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver fgetsgent_r, fgetsgent_r@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __exp10_finite, __exp10_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_sprintrr, ns_sprintrr@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __exp2_finite, __exp2_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __acoshf_finite, __acoshf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __pow_finite, __pow_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver quick_exit, quick_exit@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __scalb_finite, __scalb_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver getsgent, getsgent@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __log2l_finite, __log2l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __lgamma_r_finite, __lgamma_r_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver getsgnam_r, getsgnam_r@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __y0l_finite, __y0l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_name_skip, ns_name_skip@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver getsgnam, getsgnam@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __jnf_finite, __jnf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver fanotify_mark, fanotify_mark@GLIBC_DONT_USE_THIS_VERSION_2.13");
__asm__(".symver __lgammaf_r_finite, __lgammaf_r_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __scalbl_finite, __scalbl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver qsort_r, qsort_r@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver pthread_getname_np, pthread_getname_np@GLIBC_DONT_USE_THIS_VERSION_2.12");
__asm__(".symver __log10l_finite, __log10l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __atanh_finite, __atanh_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver sgetsgent, sgetsgent@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver ns_parserr, ns_parserr@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __sqrtl_finite, __sqrtl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver scandirat, scandirat@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __log10_finite, __log10_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_samedomain, ns_samedomain@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver clock_adjtime, clock_adjtime@GLIBC_DONT_USE_THIS_VERSION_2.14");
__asm__(".symver accept4, accept4@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __obstack_printf_chk, __obstack_printf_chk@GLIBC_DONT_USE_THIS_VERSION_2.8");
__asm__(".symver __fdelt_chk, __fdelt_chk@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver epoll_create1, epoll_create1@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver ns_name_pack, ns_name_pack@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver register_printf_specifier, register_printf_specifier@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __log2_finite, __log2_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver malloc_info, malloc_info@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __j1l_finite, __j1l_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __fmod_finite, __fmod_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver fgetsgent, fgetsgent@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __hypotl_finite, __hypotl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver sendmmsg, sendmmsg@GLIBC_DONT_USE_THIS_VERSION_2.14");
__asm__(".symver ns_name_uncompress, ns_name_uncompress@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver register_printf_type, register_printf_type@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __expl_finite, __expl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_name_unpack, ns_name_unpack@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver mkostemps64, mkostemps64@GLIBC_DONT_USE_THIS_VERSION_2.11");
__asm__(".symver __cosh_finite, __cosh_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __fmodf_finite, __fmodf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver dup3, dup3@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver syncfs, syncfs@GLIBC_DONT_USE_THIS_VERSION_2.14");
__asm__(".symver __asin_finite, __asin_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver pwritev64, pwritev64@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver pthread_setname_np, pthread_setname_np@GLIBC_DONT_USE_THIS_VERSION_2.12");
__asm__(".symver __cxa_at_quick_exit, __cxa_at_quick_exit@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver prlimit, prlimit@GLIBC_DONT_USE_THIS_VERSION_2.13");
__asm__(".symver fanotify_init, fanotify_init@GLIBC_DONT_USE_THIS_VERSION_2.13");
__asm__(".symver __log2f_finite, __log2f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __sinhf_finite, __sinhf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver name_to_handle_at, name_to_handle_at@GLIBC_DONT_USE_THIS_VERSION_2.14");
__asm__(".symver __y0f_finite, __y0f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_get16, ns_get16@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __y1f_finite, __y1f_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __acoshl_finite, __acoshl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_get32, ns_get32@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __scalbf_finite, __scalbf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver pthread_mutexattr_setrobust, pthread_mutexattr_setrobust@GLIBC_DONT_USE_THIS_VERSION_2.12");
__asm__(".symver __gammal_r_finite, __gammal_r_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __sinh_finite, __sinh_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver psiginfo, psiginfo@GLIBC_DONT_USE_THIS_VERSION_2.10");
__asm__(".symver __exp_finite, __exp_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __acosl_finite, __acosl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ntp_gettimex, ntp_gettimex@GLIBC_DONT_USE_THIS_VERSION_2.12");
__asm__(".symver __remainderl_finite, __remainderl_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_skiprr, ns_skiprr@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver mkostemps, mkostemps@GLIBC_DONT_USE_THIS_VERSION_2.11");
__asm__(".symver pthread_sigqueue, pthread_sigqueue@GLIBC_DONT_USE_THIS_VERSION_2.11");
__asm__(".symver __hypotf_finite, __hypotf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver ns_name_compress, ns_name_compress@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver __powf_finite, __powf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver __expf_finite, __expf_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
__asm__(".symver pipe2, pipe2@GLIBC_DONT_USE_THIS_VERSION_2.9");
__asm__(".symver pthread_mutexattr_getrobust, pthread_mutexattr_getrobust@GLIBC_DONT_USE_THIS_VERSION_2.12");
__asm__(".symver __y0_finite, __y0_finite@GLIBC_DONT_USE_THIS_VERSION_2.15");
# if defined (__cplusplus)
}
# endif
# endif /* !defined (__OBJC__) && !defined (__ASSEMBLER__) */
#endif

View File

@ -0,0 +1,239 @@
<?xml version="1.0"?><!--*- mode: nxml; indent-tabs-mode: nil -*-->
<!DOCTYPE moduleset SYSTEM "moduleset.dtd">
<?xml-stylesheet type="text/xsl" href="moduleset.xsl"?>
<moduleset>
<!-- No funny business, just tarballs -->
<repository type="tarball" name="ftp.gnome.org" default="yes" href="http://ftp.gnome.org/pub/GNOME/sources/"/>
<repository type="tarball" name="sourceforge" href="http://downloads.sourceforge.net/sourceforge/"/>
<repository type="tarball" name="sourceforge-libpng" href="http://sourceforge.net/projects/libpng/files/"/>
<repository type="tarball" name="cairographics" href="http://cairographics.org/releases/"/>
<repository type="tarball" name="ftp.gnu.org" href="http://ftp.gnu.org/gnu/"/>
<repository type="tarball" name="sourceware.org" href="ftp://sourceware.org/pub/"/>
<repository type="tarball" name="jpeg" href="http://www.ijg.org/files/"/>
<repository type="tarball" name="libtiff" href="http://download.osgeo.org/"/>
<repository type="tarball" name="freedesktop" href="http://www.freedesktop.org/software/"/>
<repository type="tarball" name="icon-theme" href="http://icon-theme.freedesktop.org/releases/"/>
<repository type="tarball" name="xmlsoft.org" href="ftp://xmlsoft.org/libxml2/"/>
<repository type="tarball" name="hadess" href="http://freedesktop.org/~hadess/"/>
<repository type="tarball" name="lennart" href="http://0pointer.de/lennart/projects/"/>
<repository type="tarball" name="dbus.freedesktop.org" href="http://dbus.freedesktop.org/releases/"/>
<repository type="tarball" name="zlib" href="http://zlib.net/"/>
<!-- Just for glib/GTK+ -->
<repository type="git" name="git.gnome.org" href="git://git.gnome.org/"/>
<autotools id="libpng" autogenargs="--enable-shared" autogen-sh="configure">
<branch version="1.2.51" module="libpng12/1.2.51beta02/libpng-1.2.51beta02.tar.xz"
repo="sourceforge-libpng"/>
<dependencies>
<dep package="zlib"/>
</dependencies>
</autotools>
<autotools id="libjpeg" autogen-sh="configure">
<branch module="jpegsrc.v8d.tar.gz" version="8c" repo="jpeg" checkoutdir="jpeg-8d">
</branch>
</autotools>
<autotools id="zlib" autogen-sh="configure">
<branch repo="zlib" module="zlib-1.2.8.tar.gz" version="1.2.8"/>
</autotools>
<autotools id="libtiff" autogen-sh="configure">
<branch version="3.9.5" module="libtiff/tiff-3.9.5.tar.gz" repo="libtiff"/>
<dependencies>
<dep package="libjpeg"/>
</dependencies>
</autotools>
<autotools id="libxml2" autogen-sh="configure">
<branch version="2.9.0" module="libxml2-2.9.0.tar.gz" repo="xmlsoft.org"/>
</autotools>
<autotools id="expat" autogen-sh="configure">
<branch version="2.1.0" module="expat/expat-2.1.0.tar.gz" repo="sourceforge"/>
</autotools>
<autotools id="harfbuzz" autogen-sh="configure">
<branch repo="freedesktop" module="harfbuzz/release/harfbuzz-0.9.10.tar.bz2" version="0.9.10"/>
<dependencies>
<dep package="glib"/>
</dependencies>
</autotools>
<autotools id="freetype" autogen-sh="configure" skip-autogen="never" autogenargs="--without-bzip2">
<branch module="freetype/freetype-2.4.12.tar.gz" version="2.4.12" repo="sourceforge">
</branch>
<dependencies>
<dep package="zlib"/>
</dependencies>
</autotools>
<autotools id="fontconfig" autogen-sh="configure" autogenargs="--disable-docs">
<branch repo="freedesktop" version="2.10.95" module="fontconfig/release/fontconfig-2.10.95.tar.bz2"/>
<dependencies>
<dep package="expat"/>
<dep package="freetype"/>
</dependencies>
</autotools>
<!-- Another one that won't build in a separate directory -->
<autotools id="hicolor-icon-theme" autogen-sh="configure" supports-non-srcdir-builds="no">
<branch module="hicolor-icon-theme-0.11.tar.gz" repo="icon-theme"
version="0.11" />
</autotools>
<autotools id="shared-mime-info" autogen-sh="configure"
supports-non-srcdir-builds="no" >
<branch module="shared-mime-info-1.0.tar.xz" version="1.2"
repo="hadess">
</branch>
<dependencies>
<dep package="glib"/>
</dependencies>
</autotools>
<autotools id="gettext-runtime" autogen-sh="configure"
autogenargs="--without-emacs --disable-java --disable-native-java --disable-libasprintf --disable-csharp">
<branch repo="ftp.gnu.org" source-subdir="gettext-runtime"
module="gettext/gettext-0.18.1.1.tar.gz" version="0.18.1.1"
size="15139737" md5sum="3dd55b952826d2b32f51308f2f91aa89">
</branch>
</autotools>
<autotools id="dbus" autogen-sh='configure' autogenargs="--disable-selinux">
<branch module="dbus/dbus-1.6.18.tar.gz" version="1.6.18"
repo="dbus.freedesktop.org">
</branch>
</autotools>
<autotools id="libffi" autogen-sh="configure">
<branch module="libffi/libffi-3.0.13.tar.gz" repo="sourceware.org" version="3.0.13"/>
</autotools>
<autotools id="canberra" autogen-sh="configure">
<branch version="0.30" module="libcanberra/libcanberra-0.30.tar.xz" repo="lennart"/>
</autotools>
<autotools id="atk" autogen-sh="configure">
<branch module="atk/2.10/atk-2.10.0.tar.xz" version="2.10.0"
hash="sha256:636917a5036bc851d8491194645d284798ec118919a828be5e713b6ecc5b50b0"/>
<after>
<dep package="glib"/>
</after>
</autotools>
<autotools id="at-spi2-core" autogen-sh="configure">
<branch module="at-spi2-core/2.10/at-spi2-core-2.10.2.tar.xz" version="2.10.2"/>
</autotools>
<autotools id="at-spi2-atk" autogen-sh="configure">
<branch module="at-spi2-atk/2.10/at-spi2-atk-2.10.2.tar.xz" version="2.10.2"/>
<dependencies>
<dep package="atk"/>
<dep package="at-spi2-core"/>
<dep package="dbus"/>
</dependencies>
</autotools>
<autotools id="pixman" autogenargs="--disable-gtk" autogen-sh="configure">
<branch version="0.30.2" module="pixman-0.30.2.tar.gz"
repo="cairographics"
hash="sha1:59cc9cd91a2394b7c0aa90ffc7c141f06d75f066"/>
</autotools>
<autotools id="cairo" autogen-sh="autogen.sh">
<branch module="cairo-1.12.16.tar.xz" version="1.12.16"
repo="cairographics"
hash="sha1:4f6e337d5d3edd7ea79d1426f575331552b003ec">
<patch file="cairo-avoid-fortify-source.patch" strip="1" />
</branch>
<dependencies>
<dep package="pixman"/>
<dep package="libpng"/>
</dependencies>
</autotools>
<!--
*************************************************************
* GTK+ and high level deps *
*************************************************************
-->
<autotools id="glib" autogen-sh="autogen.sh" autogenargs="--disable-selinux">
<branch module="glib" repo="git.gnome.org"/>
<dependencies>
<dep package="libffi"/>
<dep package="gettext-runtime"/>
</dependencies>
</autotools>
<autotools id="pango" autogen-sh="autogen.sh">
<branch module="pango/1.36/pango-1.36.1.tar.xz" version="1.36">
<patch file="pango-relative-paths.patch" strip="1" />
<patch file="pango-old-fontconfig.patch" strip="1" />
</branch>
<dependencies>
<dep package="glib"/>
<dep package="cairo"/>
<dep package="harfbuzz"/>
</dependencies>
</autotools>
<autotools id="gdk-pixbuf" autogen-sh="autogen.sh">
<branch module="gdk-pixbuf" repo="git.gnome.org"/>
<dependencies>
<dep package="libpng"/>
<dep package="libjpeg"/>
<dep package="libtiff"/>
</dependencies>
</autotools>
<autotools id="rsvg" autogen-sh="autogen.sh" autogenargs="--disable-introspection">
<branch module="librsvg" repo="git.gnome.org"/>
<dependencies>
<dep package="gdk-pixbuf"/>
</dependencies>
</autotools>
<autotools id="gtk+-3.0" autogen-sh="autogen.sh">
<branch module="gtk+" repo="git.gnome.org"/>
<dependencies>
<dep package="glib"/>
<dep package="pango"/>
<dep package="atk"/>
<dep package="at-spi2-core"/>
<dep package="at-spi2-atk"/>
<dep package="gdk-pixbuf"/>
<dep package="rsvg"/>
</dependencies>
</autotools>
<autotools id="gnome-themes-standard" autogen-sh="autogen.sh" autogenargs="--disable-gtk2-engine">
<branch module="gnome-themes-standard" repo="git.gnome.org"/>
</autotools>
<metamodule id="meta-platform">
<dependencies>
<dep package="gtk+-3.0"/>
<dep package="hicolor-icon-theme"/>
<dep package="gnome-themes-standard"/>
<dep package="shared-mime-info"/>
<dep package="canberra"/>
</dependencies>
</metamodule>
<!--
*************************************************************
* Glade and it's deps *
*************************************************************
-->
<autotools id="glade" autogen-sh="autogen.sh">
<branch module="glade" repo="git.gnome.org"/>
<dependencies>
<dep package="meta-platform"/>
<dep package="libxml2"/>
</dependencies>
</autotools>
</moduleset>

View File

@ -0,0 +1,15 @@
diff -up cairo-1.12.16-orig/build/configure.ac.warnings cairo-1.12.16/build/configure.ac.warnings
--- cairo-1.12.16-orig/build/configure.ac.warnings 2013-08-27 00:07:21.000000000 +0900
+++ cairo-1.12.16/build/configure.ac.warnings 2013-12-17 17:30:15.422665322 +0900
@@ -49,7 +49,10 @@ AC_TRY_LINK([],[
MAYBE_WARN="$MAYBE_WARN -fno-strict-aliasing -fno-common"
dnl Also to turn various gcc/glibc-specific preprocessor checks
-MAYBE_WARN="$MAYBE_WARN -Wp,-D_FORTIFY_SOURCE=2"
+dnl
+dnl XXX Disable this FORTIFY enableing for the purpose of targetting
+dnl old versions of glibc
+dnl MAYBE_WARN="$MAYBE_WARN -Wp,-D_FORTIFY_SOURCE=2"
# invalidate cached value if MAYBE_WARN has changed
if test "x$cairo_cv_warn_maybe" != "x$MAYBE_WARN"; then

View File

@ -0,0 +1,13 @@
diff --git a/configure.ac b/configure.ac
index 8e85a0f..1b4a574 100644
--- a/configure.ac
+++ b/configure.ac
@@ -233,7 +233,7 @@ AM_CONDITIONAL(HAVE_HARFBUZZ, $have_harfbuzz)
#
have_fontconfig=false
if $have_harfbuzz ; then
- PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.10.91, have_fontconfig=true, AC_MSG_RESULT([no]))
+ PKG_CHECK_MODULES(FONTCONFIG, fontconfig >= 2.5.0, have_fontconfig=true, AC_MSG_RESULT([no]))
fi
#

View File

@ -0,0 +1,22 @@
diff --git a/pango/modules.c b/pango/modules.c
index ca8d488..cd00eba 100644
--- a/pango/modules.c
+++ b/pango/modules.c
@@ -450,6 +450,7 @@ process_module_file (FILE *module_file, const gchar *module_file_dir)
switch (i)
{
case 0:
+#if 0
if (!g_path_is_absolute (tmp_buf->str)
#ifdef __APPLE__
&& strncmp (tmp_buf->str, "@executable_path/", 17)
@@ -467,7 +468,9 @@ process_module_file (FILE *module_file, const gchar *module_file_dir)
g_string_assign (tmp_buf, abs_file_name);
g_free ((gpointer) abs_file_name);
}
+#endif
pair->module = find_or_create_module (tmp_buf->str);
+
break;
case 1:
pair->info.id = g_strdup (tmp_buf->str);

3
build/linux/pangorc Normal file
View File

@ -0,0 +1,3 @@
[Pango]
ModuleFiles = ./usr/etc/pango/pango.modules
ModulesPath = ./usr/lib/pango/1.8.0/modules

View File

@ -0,0 +1,30 @@
# Post-installation hook for gdk-pixbuf. -*- mode: sh -*-
# Corresponds to gdk-pixbuf/gdk-pixbuf/Makefile.am:install-data-hook
#
# Written by Colin Walters <walters@verbum.org>
#
# 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
# IfExecutable: gdk-pixbuf-query-loaders
# LiteralMatch: /gdk-pixbuf-2.0/2.10.0/loaders/
# Make sure the cache is removed before creating it, otherwise we keep prepending a '.'
# each time the trigger is run
for cache in `find ${JHBUILD_PREFIX} -path "*gdk-pixbuf-2.0/2.10.0/loaders.cache"`; do
rm -f $cache;
done
gdk-pixbuf-query-loaders --update-cache

View File

@ -0,0 +1,22 @@
# Post-installation hook for glib/gschema. -*- mode: sh -*-
#
# Written by Colin Walters <walters@verbum.org>
#
# 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
# IfExecutable: glib-compile-schemas
# LiteralMatch: /share/glib-2.0/schemas/
glib-compile-schemas $JHBUILD_PREFIX/share/glib-2.0/schemas

View File

@ -0,0 +1,26 @@
# Post-installation hook for gtk icon cache. -*- mode: sh -*-
#
# Written by Colin Walters <walters@verbum.org>
#
# 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
# IfExecutable: gtk-update-icon-cache
# LiteralMatch: /share/icons/
for dir in $JHBUILD_PREFIX/share/icons/*; do
if test -f $dir/index.theme; then
gtk-update-icon-cache --quiet $dir
fi
done

View File

@ -0,0 +1,22 @@
# Post-installation hook for shared-mime-info. -*- mode: sh -*-
#
# Written by Matthias Clasen <mclasen@redhat.com>
#
# 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
# IfExecutable: update-mime-database
# REMatch: /mime/packages/.*\.xml
update-mime-database $JHBUILD_PREFIX/share/mime

View File

@ -0,0 +1,36 @@
# Post-installation hook for pango. -*- mode: sh -*-
# Corresponds to gdk-pixbuf/gdk-pixbuf/Makefile.am:install-data-hook
#
# Written by Colin Walters <walters@verbum.org>
#
# 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
# IfExecutable: pango-querymodules
# REMatch: .*/lib.*/pango/.*/modules/.*\.so
pango-querymodules --update-cache
modules_cache=
# Post process the pango.modules file to use relative paths, we use a for loop here
# just because we're not sure the exact location, it used to be in ${prefix}/etc,
# now it goes in a versioned lib directory
for cache in `find ${JHBUILD_PREFIX} -path "*/pango/*/modules.cache"`; do
cat $cache | sed -e "s|${JHBUILD_PREFIX}|\.${JHBUILD_PREFIX}|g" > $cache.1 && mv $cache.1 $cache;
modules_cache=$cache;
done
# Setup our main pangorc in the root directory
echo "[Pango]" > ${JHBUILD_PREFIX}/pangorc
echo "ModuleFiles = .${modules_cache}" >> ${JHBUILD_PREFIX}/pangorc

1
build/mingw-w64/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/glade.nsi

19
build/mingw-w64/README Normal file
View File

@ -0,0 +1,19 @@
This script files is intended to cross compile glade for windows under linux
using the mingw-w64 toolchain download-mingw-rpm [1] script to get precompiled depencies
I develop it under Debian sid so it should also work on Ubuntu and others Debian
based distributions.
It does not really has any dependency on Debian other than it uses apt-get to
install mingw-w64, nsis and p7zip-full packages. So if you have those packages
installed on your system it should work out of the box on others linuxs and perhaps unices?
BTW it needs python3 and wget, but those are probably already installed in your
system.
If you really want to compile on windows I guess a good aproach would be
to install cygwin [2] to get a unix like env to run configure and shell scripts,
install mingw gcc package using download-mingw-rpm [1] and update the script
system env variables accordingly.
[1] https://github.com/mkbosmans/download-mingw-rpm
[2] http://www.cygwin.com/

View File

@ -0,0 +1,126 @@
;Include Modern UI
!include "MUI2.nsh"
!include "FileFunc.nsh"
;General
!define APPNAME "Glade Interface Designer"
!define COMPANYNAME "GNOME Foundation"
!define VERSIONMAJOR @GLADE_MAJOR_VERSION@
!define VERSIONMINOR @GLADE_MINOR_VERSION@
!define VERSIONBUILD @GLADE_MICRO_VERSION@
!define HELPURL "http://bugzilla.gnome.org/browse.cgi?product=glade"
!define UPDATEURL "http://glade.gnome.org"
!define ABOUTURL "http://gnome.org"
;Name and file
Name "${APPNAME}"
BrandingText "${COMPANYNAME}"
outFile "glade-@GLADE_MAJOR_VERSION@-@GLADE_MINOR_VERSION@-@GLADE_MICRO_VERSION@-installer.exe"
;Default installation folder
InstallDir "$LOCALAPPDATA\${COMPANYNAME}\${APPNAME}"
;Request application privileges for Windows Vista
RequestExecutionLevel user
;Interface Settings
!define MUI_ICON "glade.ico"
!define MUI_ABORTWARNING
;Pages
!insertmacro MUI_PAGE_LICENSE "COPYING"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
;Languages
!insertmacro MUI_LANGUAGE "English"
Function .onInit
MessageBox MB_OK "This Glade build and installer are BETA SOFTWARE!$\nIt was cross compiled on Linux and tested with wine! (a Windows emulator)$\nand it is distributed with the hope it will be usefull as a starting point for a new Windows comunity$\nthat can support it and contribute back to make it better."
ReadRegStr $R0 HKLM \
"Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "UninstallString"
StrCmp $R0 "" done
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
"${APPNAME} is already installed. $\n$\nClick `OK` to remove the \
previous version or `Cancel` to cancel this upgrade." \
IDOK uninst
Abort
;Run the uninstaller
uninst:
ClearErrors
SetOverwrite on
; Get old instalation directory
${GetFileName} $R0 $1
${GetParent} $R0 $2
; Move old uninstaller
CopyFiles $R0 $TEMP
SetOverwrite off
; execute old uninstaller
ExecWait '$TEMP\$1 _?=$2' $3
; remove moved uninstaller
Delete $TEMP\$1
done:
FunctionEnd
Section "Install"
SetOutPath "$INSTDIR"
file /r bin
file /r etc
!include install_files.nsh
file glade.ico
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
;Create shortcuts
createDirectory "$SMPROGRAMS\${COMPANYNAME}"
createShortCut "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk" "$INSTDIR\bin\glade.exe" "" "$INSTDIR\glade.ico"
; Registry information for add/remove programs
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayName" "${COMPANYNAME} - ${APPNAME}"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "QuietUninstallString" "$INSTDIR\uninstall.exe /S"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "InstallLocation" "$INSTDIR"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayIcon" "$\"$INSTDIR\glade.ico$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "Publisher" "$\"${COMPANYNAME}$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "HelpLink" "$\"${HELPURL}$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLUpdateInfo" "$\"${UPDATEURL}$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "URLInfoAbout" "$\"${ABOUTURL}$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "DisplayVersion" "$\"${VERSIONMAJOR}.${VERSIONMINOR}.${VERSIONBUILD}$\""
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMajor" ${VERSIONMAJOR}
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMinor" ${VERSIONMINOR}
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "VersionMicro" ${VERSIONBUILD}
; There is no option for modifying or repairing the install
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}" "NoRepair" 1
SectionEnd
Section "Uninstall"
; Remove Start Menu launcher
delete "$SMPROGRAMS\${COMPANYNAME}\${APPNAME}.lnk"
; Try to remove the Start Menu folder - this will only happen if it is empty
rmDir "$SMPROGRAMS\${COMPANYNAME}"
; Remove files
delete "$INSTDIR\glade.ico"
!include uninstall_files.nsh
; Always delete uninstaller as the last action
delete "$INSTDIR\uninstall.exe"
; Try to remove the install directory - this will only happen if it is empty
rmDir "$INSTDIR"
rmDir "$LOCALAPPDATA\${COMPANYNAME}"
; Remove uninstaller information from the registry
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${COMPANYNAME} ${APPNAME}"
SectionEnd

View File

@ -0,0 +1,182 @@
#!/bin/sh
#
# nsis_make_installer.sh
#
# Copyright (C) 2012 - Juan pablo Ugarte
#
# 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, see <http://www.gnu.org/licenses/>.
#
CWD=`pwd` # save CWD
ARG0=`readlink -f $0` # get absolute path of this script whihc is localted under build/mingw-w64
WORK=`dirname $ARG0` # work directory
ROOTB=`dirname $WORK` # get Glade source root directory
ROOT=`dirname $ROOTB` # get Glade source root directory
if test -n "$2" -a -d "$2"; then
WORK=`readlink -f $2`
fi
MINGW_ROOT=$WORK/local # directory where all the win32 precompiled dependencies for building will be downloaded
MINGW_ROOT_BIN=$WORK/usr/i686-w64-mingw32/sys-root/mingw #binaries deps
# SYSTEM ENV
export CC=i686-w64-mingw32-gcc
export CXX=i686-w64-mingw32-g++
export RANLIB=i686-w64-mingw32-ranlib
export PKG_CONFIG_LIBDIR=$MINGW_ROOT/lib/pkgconfig
export PKG_CONFIG_PATH=$MINGW_ROOT/share/pkgconfig
export PKG_CONFIG="pkg-config --define-variable=prefix=$MINGW_ROOT"
export CONFIGURE_ARGS="--host i686-w64-mingw32 --target i686-w64-mingw32 --enable-shared=yes --enable-static=no"
case $1 in
shell)
echo "Use \$PKG_CONFIG instead pkg-config and \$CONFIGURE_ARGS as parameters for configure scripts"
bash
exit
;;
makedev)
DEVELOPER="true"
MINGW_ROOT_BIN=$MINGW_ROOT
INCLUDE_DIR=include
EXCLUDE_FILES=
;;
make)
DEVELOPER="false"
EXCLUDE_FILES="( -path lib/pkgconfig -o -name *.dll.a -o -name *.la ) -prune -o"
INCLUDE_DIR=
;;
*)
echo "Usage nsis_make_installer.sh command build_path -- Creates a Glade installer using nsis under build_path (defaults to script location)"
echo " shell Runs a shell with CC and PKG_CONFIG variables set for cross compiling"
echo " make Get deps and create windows installer"
echo " makedev Get deps and create windows installer with dev files"
exit
;;
esac
# Install mingw-w64 if nescesary
if test ! -e /usr/bin/i686-w64-mingw32-gcc; then
sudo apt-get install mingw-w64
fi
# Install nsis if nescesary
if test ! -e /usr/bin/makensis; then
sudo apt-get install nsis
fi
# Install 7z if nescesary
if test ! -e /usr/bin/7z; then
sudo apt-get install p7zip-full
fi
echo cd $WORK
cd $WORK
#this python script is a helper to download binaries from OBS (OpenSuse build service)
if test ! -e download-mingw-rpm.py; then
wget https://github.com/mkbosmans/download-mingw-rpm/raw/master/download-mingw-rpm.py
fi
if test ! -d $MINGW_ROOT; then
python3 download-mingw-rpm.py --deps gtk3-devel libxml2-devel
mv $MINGW_ROOT_BIN $MINGW_ROOT
fi
if test "$DEVELOPER" = "false" -a ! -d $MINGW_ROOT_BIN; then
python3 download-mingw-rpm.py --deps gtk3 hicolor-icon-theme
fi
if test ! -e $MINGW_ROOT_BIN/bin/glade.exe; then
cd $ROOT && ./autogen.sh --prefix=$MINGW_ROOT_BIN $CONFIGURE_ARGS && make && make install
# rename executables names
if test -e $MINGW_ROOT_BIN/bin/i686-w64-mingw32-glade.exe; then
mv $MINGW_ROOT_BIN/bin/i686-w64-mingw32-glade.exe $MINGW_ROOT_BIN/bin/glade.exe
mv $MINGW_ROOT_BIN/bin/i686-w64-mingw32-glade-previewer.exe $MINGW_ROOT_BIN/bin/glade-previewer.exe
fi
fi
if test ! -e $MINGW_ROOT_BIN/bin/glade.exe; then
echo Executable not found! Aborting...
exit 1
fi
#copy files to installer directory
cp $ROOT/build/mingw-w64/glade.nsi $ROOT/data/icons/glade.ico $MINGW_ROOT_BIN
#change to installer directory
cd $MINGW_ROOT_BIN
if test ! -d COPYING; then
cat > COPYING << EOF
Glade - A user interface designer for GTK+ and GNOME.
Copyright © 2001-2006 Ximian, Inc.
Copyright © 2001-2006 Joaquin Cuenca Abela, Paolo Borelli, et al.
Copyright © 2001-2012 Tristan Van Berkom, Juan Pablo Ugarte, et al.
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
EOF
cat $ROOT/COPYING.GPL >> COPYING
fi
# Update schemas just in case
glib-compile-schemas $MINGW_ROOT_BIN/share/glib-2.0/schemas
if test $DEVELOPER = "true"; then
cat > install_files.nsh << EOF
file /r lib
file /r share
file /r include
EOF
else
cat > install_files.nsh << EOF
file /r /x pkgconfig /x *.dll.a /x *.la lib
file /r share
EOF
fi
# Create a list of files to delete in the uninstaller
# Note that we have to reverse the list to remove the directories once they are empty
find bin etc lib share $INCLUDE_DIR $EXCLUDE_FILES \
! -type d -printf "delete \"\$INSTDIR\\\%p\"\n" -or -type d -printf "rmDir \"\$INSTDIR\\\%p\"\n" \
| sed 'y/\//\\/' | tac > uninstall_files.nsh
# create installer
makensis glade.nsi
rm install_files.nsh uninstall_files.nsh
#copy installer in build directory
cp glade-*-installer.exe $CWD
#go back to start
cd $CWD

39
build/mswindows/README Normal file
View File

@ -0,0 +1,39 @@
What is this?
=============
build_glade.sh is a script that builds glade mswindows binaries. It
is only expected to function when run from a released source tarball.
A binary zip archive is generated:
- without Python support
- for each Python version listed in the INTERPRETERS variable
How does it work?
=================
Install the deps (gtk+-bundle, ...) and MinGW/MSYS with GCC 4.5.0
$ mingw-get.exe install gcc
$ mingw-get.exe install msys-base
Configure the REV, GTKBUNDLE and INTERPRETERS variables in the
build_glade.sh script and run the following from MSYS bash:
$ cd path/to/glade3/sources/
$ build/mswindows/build_glade.sh
Built binaries are intalled into:
$ ls build/mswindows/tmp/
and redistributable archives are installed into:
$ ls build/mswindows/dist
Credits
=======
build_glade.sh has been heavily inspired by Tor Lillqvist's <tml@iki.fi>
windows build scripts (http://www.gtk.org/download-windows.html). Many
thanks for his years of windows related GTK+ work!

187
build/mswindows/build_glade.sh Executable file
View File

@ -0,0 +1,187 @@
#!/bin/bash
# Build revision, always starts from 1 for each version
REV=1
# Location of the GTK+ runtime
GTKBUNDLE="/d/bin/Python27/Lib/site-packages/gtk-2.0/runtime/"
# Or instead of using the gtk+-bundle included in the pygtk all-in-one
# installer you could use a gtk+-bundle from ftp.gnome.org.
# Both are identical.
# GTKBUNDLE="/d/dev/gnome.org/gtk+-bundle_2.22.0-20101016_win32"
# List Python interperer installation directories for wich
# you'll build glade with Python support
INTERPRETERS="/d/bin/Python26 /d/bin/Python27"
OLD_CWD=`pwd`
OLD_PATH=${PATH}
OLD_PKG_CONFIG_PATH=${PKG_CONFIG_PATH}
SCRIPT=`dirname "$0"`
SRCDIR=`readlink -f "$SCRIPT/../../"`
BUILDDIR="${SRCDIR}/build/mswindows/build"
DISTDIR="${SRCDIR}/build/mswindows/dist"
MOD=glade3
MAJOR=`grep m4_define\\(glade_major_version ${SRCDIR}/configure.ac | gawk '{print gensub(/^.*?glade_major_version,[[:space:]]([[:digit:]]).*?$/,"\\\\1","g")}'`
MINOR=`grep m4_define\\(glade_minor_version ${SRCDIR}/configure.ac | gawk '{print gensub(/^.*?glade_minor_version,[[:space:]]([[:digit:]]).*?$/,"\\\\1","g")}'`
MICRO=`grep m4_define\\(glade_micro_version ${SRCDIR}/configure.ac | gawk '{print gensub(/^.*?glade_micro_version,[[:space:]]([[:digit:]]).*?$/,"\\\\1","g")}'`
VER="${MAJOR}.${MINOR}.${MICRO}"
ARCH=win32
#################################################################
# Build Glade without Python support #
#################################################################
export PATH=${GTKBUNDLE}/bin:${OLD_PATH}
export PKG_CONFIG_PATH=${GTKBUNDLE}/lib/pkgconfig/:${OLD_PKG_CONFIG_PATH}
THIS=${MOD}_${VER}-${REV}_${ARCH}
MFT=${THIS}.mft
BUILD=${THIS}.sh
RUNZIP=${THIS}.zip
DEVZIP=${MOD}-dev_${VER}-${REV}_${ARCH}.zip
PREFIX=${BUILDDIR}/${THIS}
LOG=${PREFIX}/src/glade3/${THIS}.log
if test -d "${PREFIX}"; then
rm -rf "${PREFIX}"
fi
mkdir -p "${PREFIX}/manifest"
mkdir -p "${PREFIX}/src/glade3/"
mkdir -p "${DISTDIR}"
(
set -x
cd "${SRCDIR}"
# Copied from tml@iki.fi's build scripts:
# Don't do any relinking and don't use any wrappers in libtool. It
# just causes trouble, IMHO.
sed -e "s/need_relink=yes/need_relink=no # no way --tml/" \
-e "s/wrappers_required=yes/wrappers_required=no # no thanks --tml/" \
<ltmain.sh >ltmain.temp && mv ltmain.temp ltmain.sh
lt_cv_deplibs_check_method="pass_all" \
CC="gcc -mthreads" \
CFLAGS=-O2 \
./configure \
--enable-debug=yes \
--disable-static \
--disable-gnome \
--disable-gtk-doc \
--disable-python \
--disable-static \
--prefix="${PREFIX}" &&
make -j3 install &&
# No thanks
rm -rf ${PREFIX}/lib/*.dll.a &&
rm -rf ${PREFIX}/lib/*.la &&
rm -rf ${PREFIX}/lib/glade3/modules/*.dll.a &&
rm -rf ${PREFIX}/lib/glade3/modules/*.la &&
touch "${PREFIX}/manifest/${MFT}" &&
cp "${SRCDIR}/build/mswindows/build_glade.sh" "${PREFIX}/src/glade3/${BUILD}"
) 2>&1 | tee "${LOG}"
# Write manifest and create zip archives...
cd "${PREFIX}" &&
find -type f -print | sed "s/\.\///g" > "${PREFIX}/manifest/${MFT}" &&
zip -r "${DISTDIR}/${RUNZIP}" "bin" "lib/glade3" "lib/locale" "share/applications" "share/glade3" "share/icons" &&
zip -r "${DISTDIR}/${DEVZIP}" "include" "lib/pkgconfig" "manifest" "share/gtk-doc" "src"
#################################################################
# Build Glade with Python support #
#################################################################
for INTERPRETER in ${INTERPRETERS}; do
export PATH=${INTERPRETER}:${INTERPRETER}/Scripts:${GTKBUNDLE}/bin:${OLD_PATH}
export PKG_CONFIG_PATH=${INTERPRETER}/Lib/pkgconfig/:${GTKBUNDLE}/lib/pkgconfig/:${OLD_PKG_CONFIG_PATH}
len=${#INTERPRETER}
INTERPRETER_VERSION=$(echo "$INTERPRETER"|cut -c"$((len-1))"-"$len")
THIS=${MOD}_${VER}-${REV}_${ARCH}-py${INTERPRETER_VERSION}
MFT=${THIS}.mft
BUILD=${THIS}.sh
RUNZIP=${THIS}.zip
DEVZIP=${MOD}-dev_${VER}-${REV}_${ARCH}-py${INTERPRETER_VERSION}.zip
PREFIX=${BUILDDIR}/${THIS}
LOG=${PREFIX}/src/glade3/${THIS}.log
if test -d "${PREFIX}"; then
rm -rf "${PREFIX}"
fi
mkdir -p "${DISTDIR}"
mkdir -p "${PREFIX}/src/glade3/"
mkdir -p "${PREFIX}/manifest"
(
set -x
cd "${SRCDIR}"
# Copied from tml@iki.fi's build scripts:
# Don't do any relinking and don't use any wrappers in libtool. It
# just causes trouble, IMHO.
sed -e "s/need_relink=yes/need_relink=no # no way --tml/" \
-e "s/wrappers_required=yes/wrappers_required=no # no thanks --tml/" \
<ltmain.sh >ltmain.temp && mv ltmain.temp ltmain.sh
lt_cv_deplibs_check_method="pass_all" \
CC="gcc -mthreads" \
CFLAGS=-O2 \
PYTHON_INCLUDES="-I${INTERPRETER}/include/" \
PYTHON_LIBS="-L${INTERPRETER}/libs/ -lpython${INTERPRETER_VERSION}" \
PYTHON_LIB_LOC="${INTERPRETER}/libs/" \
./configure \
--enable-debug=yes \
--disable-static \
--disable-gnome \
--disable-gtk-doc \
--enable-python \
--disable-static \
--prefix="${PREFIX}" &&
make -j3 install &&
# No thanks
rm -rf ${PREFIX}/lib/*.dll.a &&
rm -rf ${PREFIX}/lib/*.la &&
rm -rf ${PREFIX}/lib/glade3/modules/*.dll.a &&
rm -rf ${PREFIX}/lib/glade3/modules/*.la &&
touch "${PREFIX}/manifest/${MFT}" &&
cp "${SRCDIR}/build/mswindows/build_glade.sh" "${PREFIX}/src/glade3/${BUILD}" &&
# Write a .exe.manifest file...
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
<assembly xmlns=\"urn:schemas-microsoft-com:asm.v1\" manifestVersion=\"1.0\">
<assemblyIdentity version=\"1.0.0.0\"
name=\"glade-3.exe\"
type=\"win32\" />
<dependency>
<dependentAssembly>
<assemblyIdentity
type=\"win32\"
name=\"Microsoft.VC90.CRT\"
version=\"9.0.21022.8\"
processorArchitecture=\"*\"
publicKeyToken=\"1fc8b3b9a1e18e3b\" />
</dependentAssembly>
</dependency>
</assembly>
" > "${PREFIX}/bin/glade-3.exe.manifest"
) 2>&1 | tee "${LOG}"
# Write manifest and create zip archives...
cd "${PREFIX}" &&
find -type f -print | sed "s/\.\///g" > "${PREFIX}/manifest/${MFT}" &&
zip -r "${DISTDIR}/${RUNZIP}" "bin" "lib/glade3" "lib/locale" "share/applications" "share/glade3" "share/icons" &&
zip -r "${DISTDIR}/${DEVZIP}" "include" "lib/pkgconfig" "manifest" "share/gtk-doc" "src"
done

362
configure.ac Normal file
View File

@ -0,0 +1,362 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.52)
m4_define(glade_major_version, 3)
m4_define(glade_minor_version, 18)
m4_define(glade_micro_version, 3)
m4_define(glade_version, glade_major_version.glade_minor_version.glade_micro_version)
AC_INIT([glade], [glade_version],
[http://bugzilla.gnome.org/enter_bug.cgi?product=glade],
[glade],
[http://glade.gnome.org/])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_SRCDIR([gladeui/glade.h])
AC_CONFIG_MACRO_DIR([m4])
AC_DEFINE(GLADE_MAJOR_VERSION, glade_major_version, [Glade major version])
AC_SUBST(GLADE_MAJOR_VERSION, glade_major_version)
AC_DEFINE(GLADE_MINOR_VERSION, glade_minor_version, [Glade minor version])
AC_SUBST(GLADE_MINOR_VERSION, glade_minor_version)
AC_DEFINE(GLADE_MICRO_VERSION, glade_micro_version, [Glade micro version])
AC_SUBST(GLADE_MICRO_VERSION, glade_micro_version)
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-bzip2])
AM_MAINTAINER_MODE([enable])
# Support silent build rules, requires at least automake-1.11. Disable
# by either passing --disable-silent-rules to configure or passing V=1
# to make
AM_SILENT_RULES([yes])
# Checks for programs
AC_PROG_CC
AC_PROG_INSTALL
AC_PROG_MAKE_SET
# Initialize libtool
LT_PREREQ([2.2.6])
LT_INIT([dlopen win32-dll disable-static])
AC_PATH_PROG(GLIB_COMPILE_RESOURCES, glib-compile-resources)
AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
AC_PATH_PROG(GLIB_MKENUMS, glib-mkenums)
AC_PATH_PROG(DLLTOOL, dlltool)
# If the source code has changed at all, increment GLADE_REVISION
# If any interfaces have been added, removed, or changed, increment GLADE_CURRENT, and set GLADE_REVISION to 0.
# If any interfaces have been added since the last public release, then increment GLADE_AGE.
# If any interfaces have been removed since the last public release, then set GLADE_AGE to 0.
# Reference: http://www.gnu.org/software/libtool/manual/libtool.html#Versioning
GLADE_REVISION=3
GLADE_CURRENT=7
GLADE_AGE=1
GLADE_CURRENT_MINUS_AGE=`expr $GLADE_CURRENT - $GLADE_AGE`
AC_SUBST(GLADE_REVISION)
AC_SUBST(GLADE_CURRENT)
AC_SUBST(GLADE_AGE)
AC_SUBST(GLADE_CURRENT_MINUS_AGE)
dnl are we unstable or stable?
m4_define([glade_unstable],
m4_if(m4_eval(glade_minor_version % 2), [1], [yes], [no]))
GLADE_UNSTABLE=glade_unstable
AC_SUBST(GLADE_UNSTABLE)
dnl The symbol GLADE_UNSTABLE is defined above for substitution in
dnl Makefiles and conditionally defined here as a preprocessor symbol
dnl and automake conditional.
if test "x$GLADE_UNSTABLE" = "xyes"; then
AC_DEFINE(GLADE_UNSTABLE, 1,
[Define to 1 if this is an unstable version of Glade])
fi
AM_CONDITIONAL(GLADE_UNSTABLE, test "x$GLADE_UNSTABLE" = "xyes")
# ================================================================
GNOME_DEBUG_CHECK
GNOME_COMPILE_WARNINGS([maximum])
GNOME_MAINTAINER_MODE_DEFINES
# For the plugins, we don't use the warning flags defined by GNOME_COMPILE_WARNINGS.
# These flags include -Wmissing-prototypes, which we prefer not to use.
if test "x$GCC" = "xyes"; then
PLUGINS_WARN_CFLAGS="-Wall -Wnested-externs -Wpointer-arith"
fi
AC_SUBST(PLUGINS_WARN_CFLAGS)
dnl ================================================================
dnl Collect some arguments.
dnl ================================================================
AC_ARG_ENABLE(debug,
[AC_HELP_STRING([--enable-debug],
[enable debug build [default=no]])],,
[enable_debug="no"])
AM_CONDITIONAL([GLADE_DEBUG],[test "x$enable_debug" = "xyes"])
if test "x$enable_debug" = "xyes"; then
GLADE_DEBUG_FLAGS=-DGLADE_ENABLE_DEBUG
else
GLADE_DEBUG_FLAGS=
fi
AC_SUBST(GLADE_DEBUG_FLAGS)
dnl ================================================================
dnl Gettext stuff.
dnl ================================================================
IT_PROG_INTLTOOL([0.41.0])
GETTEXT_PACKAGE=AC_PACKAGE_NAME
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Name of the gettext package.])
dnl ================================================================
dnl va_copy.
dnl ================================================================
AC_MSG_CHECKING([how to copy va_list])
AC_TRY_LINK([#include <stdarg.h>], [va_list ap1, ap2; va_copy(ap1, ap2);],
AC_MSG_RESULT([va_copy]),
[ AH_TEMPLATE([va_copy], [define if va_copy is not available])
AC_TRY_LINK([#include <stdarg.h>], [va_list ap1, ap2; __va_copy(ap1, ap2);],
[ AC_DEFINE([va_copy], [__va_copy])
AC_MSG_RESULT([__va_copy])],
[ AC_DEFINE([va_copy(dest,src)], [memcpy(&dest,&src,sizeof(va_list))])
AC_MSG_RESULT([memcpy])]
)
])
dnl ================================================================
dnl Check for gtk-doc
dnl ================================================================
GTK_DOC_CHECK([1.13],[--flavour no-tmpl])
dnl ================================================================
dnl Check for introspection
dnl ================================================================
GOBJECT_INTROSPECTION_CHECK([1.32.0])
dnl ================================================================
dnl Check for gtk+
dnl ================================================================
GTK_REQUIRED=3.12.0
PKG_CHECK_MODULES([GTK],[
gtk+-3.0 >= $GTK_REQUIRED
gmodule-2.0
libxml-2.0 >= 2.4.0
])
PKG_CHECK_MODULES([GMODULE_EXPORT],[
gmodule-export-2.0
])
dnl ================================================================
dnl Check for the unix print widgets in gtk+
dnl ================================================================
LIBS=$GTK_LIBS
AC_CHECK_FUNCS(gtk_print_unix_dialog_new,[have_unix_print=yes]; break,[have_unix_print=no])
AM_CONDITIONAL(HAVE_GTK_UNIX_PRINT, test x"$have_unix_print" = "xyes")
dnl ================================================================
dnl Python for optional python dev libs
dnl ================================================================
PYGOBJECT_REQUIRED_MAJOR=3
PYGOBJECT_REQUIRED_MINOR=8
PYGOBJECT_REQUIRED_MICRO=0
PYGOBJECT_REQS=$PYGOBJECT_REQUIRED_MAJOR.$PYGOBJECT_REQUIRED_MINOR.$PYGOBJECT_REQUIRED_MICRO
AC_ARG_ENABLE(python,
AS_HELP_STRING([--disable-python], [disable python catalog]),
check_python=$enableval, check_python=yes)
if test x"$check_python" = x"yes"; then
have_python=yes
PKG_CHECK_MODULES([PYGOBJECT],[pygobject-3.0 >= $PYGOBJECT_REQS],[have_pygobject=yes],[have_pygobject=no])
AM_CHECK_PYTHON_HEADERS(, [have_python_headers=no])
AM_CHECK_PYTHON_LIBS(, [have_python_lib=no])
if test x"$have_pygobject" = x"no"; then
have_python=no
fi
if test x"$have_python_headers" = x"no"; then
have_python=no
fi
if test x"$have_python_lib" = x"no"; then
have_python=no
fi
AC_DEFINE_UNQUOTED(PYGOBJECT_REQUIRED_MAJOR, $PYGOBJECT_REQUIRED_MAJOR, pygobject major version required)
AC_DEFINE_UNQUOTED(PYGOBJECT_REQUIRED_MINOR, $PYGOBJECT_REQUIRED_MINOR, pygobject minor version required)
AC_DEFINE_UNQUOTED(PYGOBJECT_REQUIRED_MICRO, $PYGOBJECT_REQUIRED_MICRO, pygobject micro version required)
else
have_python=no
fi
AM_CONDITIONAL(BUILD_PYTHON, test x"$have_python" = "xyes")
# ==================================================================
# Glade User Manual (requires yelp-tools)
# ==================================================================
YELP_HELP_INIT
# ==================================================================
# Man pages (requires xsltproc)
# ==================================================================
AC_ARG_ENABLE(man-pages,
AC_HELP_STRING([--enable-man-pages],
[build manual pages]),,
enable_man_pages=yes)
if test x$enable_man_pages = xyes; then
AC_PATH_PROG([XSLTPROC], [xsltproc])
if test x$XSLTPROC = x; then
AC_MSG_ERROR([xsltproc is required to build manual pages])
fi
fi
AM_CONDITIONAL(BUILD_MAN_PAGES, test x$enable_man_pages = xyes)
dnl ================================================================
dnl Check for windows
dnl ================================================================
case $host_os in
*mingw* | pw32* | cygwin*)
platform_win32=yes
;;
*)
platform_win32=no
;;
esac
AM_CONDITIONAL(PLATFORM_WIN32, test x"$platform_win32" = "xyes")
case $host_os in
*mingw*)
native_win32=yes
;;
*)
native_win32=no
;;
esac
AM_CONDITIONAL(NATIVE_WIN32, test x"$native_win32" = "xyes")
if test "$native_win32" = "yes"; then
AC_CHECK_TOOL(WINDRES, windres, no)
if test "$WINDRES" = no; then
AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
fi
fi
dnl ================================================================
dnl Check for GDK Quartz and MacOSX integration package
dnl ================================================================
_gdk_tgt=`$PKG_CONFIG --variable=targets gdk-3.0`
AM_CONDITIONAL([GDK_TARGET_QUARTZ], [test x$_gdk_tgt = xquartz])
if test "x$_gdk_tgt" = xquartz; then
PKG_CHECK_MODULES(GTK_MAC, gtk-mac-integration)
GTK_MAC_BUNDLE_FLAG=
AC_ARG_ENABLE(mac-bundle,
AS_HELP_STRING([--enable-mac-bundle], [enable mac bundling]),
build_bundle=yes, build_bundle=no)
if test "x$build_bundle" = xyes; then
AC_MSG_NOTICE([enableing mac bundle..])
GTK_MAC_BUNDLE_FLAG=-DMAC_BUNDLE
fi
AC_SUBST(GTK_MAC_BUNDLE_FLAG)
AC_SUBST(GTK_MAC_LIBS)
AC_SUBST(GTK_MAC_CFLAGS)
fi
dnl ================================================================
dnl Enable installation of Gladeui catalog
dnl ================================================================
AC_ARG_ENABLE([gladeui],
AS_HELP_STRING([--enable-gladeui],
[Enable installation of the Gladeui catalog]),
[enable_gladeui="$enableval"],[enable_gladeui="no"])
AM_CONDITIONAL(BUILD_GLADEUI, test x"$enable_gladeui" = "xyes")
dnl ================================================================
dnl Testing environment
dnl ================================================================
GLADE_TEST_ENVIRONMENT='GLADE_TESTING=1 GLADE_PIXMAP_DIR=$(top_srcdir)/data/icons GLADE_CATALOG_SEARCH_PATH=$(top_srcdir)/plugins/gtk+ GLADE_MODULE_SEARCH_PATH=$(top_builddir)/plugins/gtk+/.libs'
AC_SUBST(GLADE_TEST_ENVIRONMENT)
AC_SUBST([AM_CPPFLAGS])
AC_SUBST([AM_CFLAGS])
AC_SUBST([AM_CXXFLAGS])
AC_SUBST([AM_LDFLAGS])
AC_CONFIG_FILES([
Makefile
data/gladeui-2.0.pc
data/glade.desktop.in
data/Makefile
data/icons/Makefile
data/icons/hicolor/Makefile
data/icons/hicolor/16x16/Makefile
data/icons/hicolor/16x16/apps/Makefile
data/icons/hicolor/22x22/Makefile
data/icons/hicolor/22x22/apps/Makefile
data/icons/hicolor/24x24/Makefile
data/icons/hicolor/24x24/apps/Makefile
data/icons/hicolor/32x32/Makefile
data/icons/hicolor/32x32/apps/Makefile
data/icons/hicolor/48x48/Makefile
data/icons/hicolor/48x48/apps/Makefile
data/icons/hicolor/256x256/Makefile
data/icons/hicolor/256x256/apps/Makefile
gladeui/Makefile
gladeui/gladeui.rc
gladeui/glade-previewer.rc
src/Makefile
src/glade.rc
plugins/Makefile
plugins/gtk+/Makefile
plugins/gtk+/icons/Makefile
plugins/gtk+/icons/16x16/Makefile
plugins/gtk+/icons/22x22/Makefile
plugins/python/Makefile
plugins/gladeui/Makefile
po/Makefile.in
doc/Makefile
doc/version.xml
help/Makefile
man/Makefile
tests/Makefile
build/mingw-w64/glade.nsi
])
AC_OUTPUT
echo "
Configuration:
Source code location: ${srcdir}
Compiler: ${CC}
Debug Enabled: ${enable_debug}
GTK+ UNIX Print Widgets: ${have_unix_print}
PYTHON Widgets support: ${have_python}
Gladeui Catalog: ${enable_gladeui}
Introspection Data: ${found_introspection}
Build Reference Manual: ${enable_gtk_doc}
Build Manual Pages: ${enable_man_pages}
"

6
data/.gitignore vendored
View File

@ -1,4 +1,4 @@
/org.gnome.Glade.desktop
/org.gnome.Glade.desktop.in
/glade.desktop
/glade.desktop.in
/gladeui-1.0.pc
/org.gnome.Glade.appdata.xml
/glade.appdata.xml

26
data/Makefile.am Normal file
View File

@ -0,0 +1,26 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = icons
desktopdir = $(datadir)/applications
desktop_in_files = glade.desktop.in.in
desktop_DATA = $(desktop_in_files:.desktop.in.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = gladeui-2.0.pc
@INTLTOOL_XML_RULE@
appdatadir = $(datadir)/appdata
appdata_DATA = $(appdata_in_files:.xml.in=.xml)
appdata_in_files = glade.appdata.xml.in
EXTRA_DIST = \
$(appdata_in_files) \
$(desktop_in_files) \
gladeui-2.0.pc.in
CLEANFILES = \
$(desktop_DATA) \
$(pkgconfig_DATA) \
$(appdata_DATA)

View File

@ -1,18 +0,0 @@
<?xml version="1.0"?>
<its:rules xmlns:its="http://www.w3.org/2005/11/its"
xmlns:gt="https://www.gnu.org/s/gettext/ns/its/extensions/1.0"
version="2.0">
<its:translateRule selector="/glade-catalog" translate="no"/>
<its:translateRule selector="/glade-catalog//glade-widget-class/@title" translate="yes"/>
<its:translateRule selector="/glade-catalog//glade-widget-class//action/@name" translate="yes"/>
<its:translateRule selector="/glade-catalog//glade-widget-class//property/@name" translate="yes"/>
<its:translateRule selector="/glade-catalog//glade-widget-class//property//value/@name" translate="yes"/>
<its:translateRule selector="/glade-catalog//glade-widget-class//property/tooltip" translate="yes"/>
<its:translateRule selector="/glade-catalog//glade-widget-group/@title" translate="yes"/>
<!-- Extracted strings are consumed by the library and are never
merged back; we don't want to escape special characters. -->
<gt:escapeRule selector="/glade-catalog" escape="no"/>
</its:rules>

View File

@ -1,6 +0,0 @@
<?xml version="1.0"?>
<locatingRules>
<locatingRule name="GladeCatalog" pattern="*.xml">
<documentRule localName="glade-catalog" target="glade-catalog.its"/>
</locatingRule>
</locatingRules>

29
data/glade.appdata.xml.in Normal file
View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<application>
<id type="desktop">glade.desktop</id>
<licence>CC0</licence>
<description>
<!-- To translators: AppData description first paragraph -->
<_p>
Glade is a RAD tool to enable quick &amp; easy development of user interfaces
for the GTK+ 3 toolkit and the GNOME desktop environment.
</_p>
<!-- To translators: AppData description second paragraph -->
<_p>
The user interfaces designed in Glade are saved as XML and these can be
loaded by applications dynamically as needed by using GtkBuilder or used
directly to define a new GtkWidget derived object class using
GTK+ new template feature.
</_p>
<!-- To translators: AppData description third paragraph -->
<_p>
By using GtkBuilder, Glade XML files can be used in numerous programming
languages including C, C++, C#, Vala, Java, Perl, Python, and others.
</_p>
</description>
<screenshots>
<screenshot type="default">https://glade.gnome.org/images/glade-main-page.png</screenshot>
</screenshots>
<url type="homepage">http://glade.gnome.org/</url>
<updatecontact>juanpablougarte_at_gmail.com</updatecontact>
</application>

18
data/glade.desktop.in.in Normal file
View File

@ -0,0 +1,18 @@
[Desktop Entry]
_Name=Glade
_GenericName=Interface Designer
_X-GNOME-FullName=Glade Interface Designer
_Comment=Create or open user interface designs for GTK+ applications
_Keywords=GUI designer;user interface;ui builder;
Exec=glade %F
Terminal=false
StartupNotify=true
Type=Application
Icon=glade
Categories=GNOME;GTK;Development;GUIDesigner;
MimeType=application/x-glade;
X-GNOME-DocPath=glade/glade.xml
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=glade
X-GNOME-Bugzilla-Version=@VERSION@
X-GNOME-Bugzilla-Component=general

18
data/gladeui-2.0.pc.in Normal file
View File

@ -0,0 +1,18 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
datarootdir=@datarootdir@
datadir=@datadir@
includedir=@includedir@/libgladeui-2.0
catalogdir=@datadir@/@PACKAGE@/catalogs
pixmapdir=@datadir@/@PACKAGE@/pixmaps
moduledir=@libdir@/@PACKAGE@/modules
Name: Glade
Description: Glade interface designer library
URL: http://glade.gnome.org
Version: @PACKAGE_VERSION@
Requires: gtk+-3.0 >= 2.91.2 libxml-2.0 >= 2.4.0
Libs: -L${libdir} -lgladeui-2
Cflags: -I${includedir}

27
data/icons/Makefile.am Normal file
View File

@ -0,0 +1,27 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = hicolor
gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor
install-data-hook: update-icon-cache
uninstall-hook: update-icon-cache
update-icon-cache:
@-if test -z "$(DESTDIR)"; then \
echo "Updating Gtk icon cache."; \
$(gtk_update_icon_cache); \
else \
echo "*** Icon cache not updated. After (un)install, run this:"; \
echo "*** $(gtk_update_icon_cache)"; \
fi
pixmapsdir = $(pkgdatadir)/pixmaps
pixmaps_DATA = devhelp.png \
plus.png \
fixed-bg.png placeholder.png \
deprecated-16x16.png \
deprecated-22x22.png
EXTRA_DIST = $(pixmaps_DATA) glade.ico

View File

@ -0,0 +1 @@
SUBDIRS = apps

View File

@ -0,0 +1,6 @@
## Process this file with automake to produce Makefile.in
appicondir = $(datadir)/icons/hicolor/16x16/apps
appicon_DATA = glade.png
EXTRA_DIST = $(appicon_DATA) glade.xcf

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

View File

@ -0,0 +1 @@
SUBDIRS = apps

View File

@ -0,0 +1,6 @@
## Process this file with automake to produce Makefile.in
appicondir = $(datadir)/icons/hicolor/22x22/apps
appicon_DATA = glade.png
EXTRA_DIST = $(appicon_DATA) glade.xcf

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

View File

@ -0,0 +1 @@
SUBDIRS = apps

View File

@ -0,0 +1,6 @@
## Process this file with automake to produce Makefile.in
appicondir = $(datadir)/icons/hicolor/24x24/apps
appicon_DATA = glade.png
EXTRA_DIST = $(appicon_DATA)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
SUBDIRS = apps

View File

@ -0,0 +1,6 @@
## Process this file with automake to produce Makefile.in
appicondir = $(datadir)/icons/hicolor/256x256/apps
appicon_DATA = glade.png
EXTRA_DIST = $(appicon_DATA)

View File

@ -0,0 +1,6 @@
## Process this file with automake to produce Makefile.in
appicondir = $(datadir)/icons/hicolor/24x24/apps
appicon_DATA = glade.png
EXTRA_DIST = $(appicon_DATA)

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -0,0 +1 @@
SUBDIRS = apps

View File

@ -0,0 +1,6 @@
## Process this file with automake to produce Makefile.in
appicondir = $(datadir)/icons/hicolor/32x32/apps
appicon_DATA = glade.png
EXTRA_DIST = $(appicon_DATA) glade.svg

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -0,0 +1,771 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="32"
height="32"
id="svg4908"
sodipodi:version="0.32"
inkscape:version="0.44+devel"
sodipodi:docname="glade.svg"
sodipodi:docbase="/home/andreas/project/application icons/32x32"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/andreas/project/application icons/32x32/glade.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
version="1.0"
sodipodi:modified="true">
<defs
id="defs4910">
<linearGradient
id="linearGradient22140">
<stop
style="stop-color:black;stop-opacity:0;"
offset="0"
id="stop22142" />
<stop
id="stop22148"
offset="0.5"
style="stop-color:black;stop-opacity:1;" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop22144" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient22140"
id="linearGradient23044"
gradientUnits="userSpaceOnUse"
x1="18.142136"
y1="35"
x2="18.142136"
y2="42.040661" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22122"
id="radialGradient23042"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-1.000001,1.142856,0,-89.10259,-31.49999)"
cx="7"
cy="39.464806"
fx="7"
fy="39.464806"
r="3.5" />
<linearGradient
inkscape:collect="always"
id="linearGradient22122">
<stop
style="stop-color:black;stop-opacity:1;"
offset="0"
id="stop22124" />
<stop
style="stop-color:black;stop-opacity:0;"
offset="1"
id="stop22126" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22122"
id="radialGradient23040"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-1.000001,1.142856,0,-41.10259,45.50001)"
cx="7"
cy="39.464806"
fx="7"
fy="39.464806"
r="3.5" />
<linearGradient
inkscape:collect="always"
id="linearGradient7025">
<stop
style="stop-color:#e6ce46;stop-opacity:1"
offset="0"
id="stop7027" />
<stop
style="stop-color:#d6ba1c;stop-opacity:1"
offset="1"
id="stop7029" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7025"
id="linearGradient10840"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(53,1.428571)"
x1="13.630114"
y1="28.5"
x2="25.208096"
y2="41.180992" />
<linearGradient
inkscape:collect="always"
id="linearGradient7780">
<stop
style="stop-color:#888a85;stop-opacity:1;"
offset="0"
id="stop7782" />
<stop
style="stop-color:#888a85;stop-opacity:0;"
offset="1"
id="stop7784" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient7752">
<stop
style="stop-color:#888a85;stop-opacity:1"
offset="0"
id="stop7754" />
<stop
style="stop-color:#888a85;stop-opacity:0"
offset="1"
id="stop7756" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient7744">
<stop
style="stop-color:#888a85;stop-opacity:1"
offset="0"
id="stop7746" />
<stop
style="stop-color:#888a85;stop-opacity:0"
offset="1"
id="stop7748" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient7736">
<stop
style="stop-color:#c1c7bc;stop-opacity:1;"
offset="0"
id="stop7738" />
<stop
style="stop-color:#e8eae6;stop-opacity:1"
offset="1"
id="stop7740" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient7728">
<stop
style="stop-color:#d3d7cf;stop-opacity:1"
offset="0"
id="stop7730" />
<stop
style="stop-color:#eeeeec;stop-opacity:1"
offset="1"
id="stop7732" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient7720">
<stop
style="stop-color:#555753;stop-opacity:1;"
offset="0"
id="stop7722" />
<stop
style="stop-color:#555753;stop-opacity:0;"
offset="1"
id="stop7724" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient7686">
<stop
style="stop-color:#555753;stop-opacity:1;"
offset="0"
id="stop7688" />
<stop
style="stop-color:#555753;stop-opacity:0;"
offset="1"
id="stop7690" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient6997">
<stop
style="stop-color:#babdb6;stop-opacity:1;"
offset="0"
id="stop6999" />
<stop
style="stop-color:#d7d9d5;stop-opacity:1"
offset="1"
id="stop7001" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient6905">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop6907" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop6909" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient4790">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop4792" />
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="1"
id="stop4794" />
</linearGradient>
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient4790"
id="radialGradient4796"
cx="37.030354"
cy="12.98915"
fx="37.030354"
fy="12.98915"
r="4.2929163"
gradientTransform="matrix(-1.5795056,0,0,0.9498629,62.524548,-3.1435399)"
gradientUnits="userSpaceOnUse" />
<linearGradient
id="linearGradient269">
<stop
id="stop270"
offset="0.0000000"
style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
<stop
id="stop271"
offset="1"
style="stop-color:#8a8a8a;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient259">
<stop
id="stop260"
offset="0.0000000"
style="stop-color:#729fcf;stop-opacity:1" />
<stop
id="stop261"
offset="1.0000000"
style="stop-color:#204a87;stop-opacity:1.0000000" />
</linearGradient>
<linearGradient
inkscape:collect="always"
id="linearGradient2251">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop2253" />
<stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop2255" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient2251"
id="linearGradient8166"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(2.2961811e-2,-0.6857104,-0.7001194,-2.2489236e-2,30.580101,31.011455)"
x1="32.862488"
y1="36.028366"
x2="34.170048"
y2="38.070381" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6905"
id="linearGradient6959"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(11.30501,19.746952)"
x1="-15.909902"
y1="16.003418"
x2="-23"
y2="16.091806" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6905"
id="linearGradient6962"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-35,-4.5078057)"
x1="-15.909902"
y1="16.003418"
x2="-23"
y2="16.091806" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6997"
id="linearGradient7003"
x1="-17.235727"
y1="17.947962"
x2="-17.324116"
y2="32.53204"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7686"
id="linearGradient7692"
x1="35.47406"
y1="36.912945"
x2="35.47406"
y2="39.351414"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7494886,0,0,0.7313296,-0.130915,-3.1911008)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7720"
id="linearGradient7726"
x1="-8.28125"
y1="12.475584"
x2="-8.28125"
y2="6.2509766"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.2909093,0,0,0.1748634,-24.09091,4.1256829)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient7728"
id="radialGradient7734"
cx="8.3376141"
cy="40.582108"
fx="8.3376141"
fy="40.582108"
r="20.500002"
gradientTransform="matrix(-0.7220896,5.1346809e-8,8.5653087e-7,0.6522647,32.925823,-0.8066207)"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7736"
id="linearGradient7742"
x1="38.944931"
y1="12.11484"
x2="37.306168"
y2="13.392819"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.6904882,0,0,0.7398648,31.536239,-3.0489861)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7744"
id="linearGradient7750"
x1="18.384777"
y1="22"
x2="23.292892"
y2="22"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.8000001,0,0,0.5,-0.2000016,2.4999997)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7752"
id="linearGradient7758"
x1="15.114408"
y1="27"
x2="20.019962"
y2="27"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.857143,0,0,0.5,-1.0000023,3.9999994)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7780"
id="linearGradient7786"
x1="20.875"
y1="14.249998"
x2="20.875"
y2="18.437498"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.7410819,0,0,0.6666666,6.21347e-2,-2.0000004)" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22122"
id="radialGradient5157"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-1.000001,1.142856,0,-41.10259,45.50001)"
cx="7"
cy="39.464806"
fx="7"
fy="39.464806"
r="3.5" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22122"
id="radialGradient5159"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-1.000001,1.142856,0,-89.10259,-31.49999)"
cx="7"
cy="39.464806"
fx="7"
fy="39.464806"
r="3.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient22140"
id="linearGradient5161"
gradientUnits="userSpaceOnUse"
x1="18.142136"
y1="35"
x2="18.142136"
y2="42.040661" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22122"
id="radialGradient6150"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-1.000001,1.142856,0,-41.10259,45.50001)"
cx="7"
cy="39.464806"
fx="7"
fy="39.464806"
r="3.5" />
<radialGradient
inkscape:collect="always"
xlink:href="#linearGradient22122"
id="radialGradient6152"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,-1.000001,1.142856,0,-89.10259,-31.49999)"
cx="7"
cy="39.464806"
fx="7"
fy="39.464806"
r="3.5" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient22140"
id="linearGradient6154"
gradientUnits="userSpaceOnUse"
x1="18.142136"
y1="35"
x2="18.142136"
y2="42.040661" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7025"
id="linearGradient6156"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(53,1.428571)"
x1="13.630114"
y1="28.5"
x2="25.208096"
y2="41.180992" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="15.999999"
inkscape:cx="33.76609"
inkscape:cy="20.586245"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1674"
inkscape:window-height="968"
inkscape:window-x="0"
inkscape:window-y="26"
showguides="true"
inkscape:guide-bbox="true"
width="32px"
height="32px" />
<metadata
id="metadata4913">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
id="g5149"
style="opacity:0.3"
transform="matrix(-0.6666667,0,0,0.5714286,32,6)">
<rect
y="35"
x="0"
height="7"
width="4"
id="rect5151"
style="opacity:1;fill:url(#radialGradient5157);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
<rect
transform="scale(-1,-1)"
y="-42"
x="-48"
height="7"
width="4"
id="rect5153"
style="opacity:1;fill:url(#radialGradient5159);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
<rect
y="35"
x="4"
height="7"
width="40"
id="rect5155"
style="opacity:1;fill:url(#linearGradient5161);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
</g>
<path
style="fill:url(#radialGradient7734);fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="M 29.294093,2.4999998 L 8.7293434,2.4999998 C 8.6152711,2.4999998 1.5,9.7905242 1.5,9.9074054 L 1.5,28.289021 C 1.5,28.405903 1.5918342,28.499999 1.7059065,28.499999 L 29.294093,28.499999 C 29.408166,28.499999 29.5,28.405903 29.5,28.289021 L 29.5,2.7109774 C 29.5,2.5940958 29.565495,2.4084486 29.294093,2.4999998 z "
id="rect4916"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:url(#linearGradient7692);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 26.500001,26.500001 L 26.500001,7.5000002 L 5.5000002,7.5000002 L 5.5000002,23.548695 L 18.151658,23.548695"
id="path4974"
sodipodi:nodetypes="ccccc" />
<path
style="opacity:0.64130435;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="M 2.4999999,9.5909104 L 8.5838808,3.5000002 L 28.437499,3.5000002 L 28.437499,27.500002 L 2.4999999,27.500002 L 2.4999999,9.5909104 z "
id="rect5887"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#555753;stroke-width:0.99999988px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 4.5377704,10.5 L 27.978076,10.5"
id="path4976" />
<path
inkscape:r_cy="true"
inkscape:r_cx="true"
style="opacity:0.35714285;color:#000000;fill:url(#radialGradient4796);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
d="M 1.3527051,9.6855718 C 2.0121209,8.6892491 6.877972,6.9254979 9.4107408,6.3339567 C 9.2572783,7.4977242 9.5218979,11.008446 9.5218979,11.008446 C 7.6546325,9.9911316 2.0595082,9.5656294 1.3527051,9.6855718 z "
id="path5348"
sodipodi:nodetypes="cccc" />
<rect
style="opacity:0.64130435;fill:url(#linearGradient7786);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect7778"
width="20.009211"
height="2"
x="5.9907894"
y="8" />
<path
style="opacity:1;color:#000000;fill:url(#linearGradient7742);fill-opacity:1;fill-rule:nonzero;stroke:#888a85;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:block;overflow:visible"
d="M 1.5000141,9.9760969 C 1.4909238,8.9290832 5.8863647,2.4241096 8.5672434,2.5006702 C 7.8953721,2.673055 7.3586439,7.0641785 8.3182291,9.1450482 C 6.4193865,9.1450482 2.1655515,8.6012994 1.5000141,9.9760969 z "
id="path2210"
sodipodi:nodetypes="cccc"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<path
sodipodi:nodetypes="cccc"
id="path2247"
d="M 2.6785155,8.0439173 C 3.1887299,7.1200246 5.5915523,4.5658067 6.9383154,3.7171098 C 6.7709389,4.6953545 6.5621107,6.2435454 6.9933638,8.0015394 C 6.9933638,8.0015394 3.2253952,7.9326947 2.6785155,8.0439173 z "
style="opacity:1;color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8166);stroke-width:1.00000024;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<path
sodipodi:type="arc"
style="opacity:0.78260869;fill:none;fill-opacity:1;stroke:#555753;stroke-width:2.43027735;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path4978"
sodipodi:cx="11.136932"
sodipodi:cy="23.604815"
sodipodi:rx="2.3864856"
sodipodi:ry="2.4748738"
d="M 13.523418 23.604815 A 2.3864856 2.4748738 0 1 1 8.7504468,23.604815 A 2.3864856 2.4748738 0 1 1 13.523418 23.604815 z"
transform="matrix(0.4190262,0,0,0.4040609,3.833333,3.9622167)" />
<path
sodipodi:type="arc"
style="opacity:0.78260869;fill:none;fill-opacity:1;stroke:#555753;stroke-width:2.43027806;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="path5951"
sodipodi:cx="11.136932"
sodipodi:cy="23.604815"
sodipodi:rx="2.3864856"
sodipodi:ry="2.4748738"
d="M 13.523418 23.604815 A 2.3864856 2.4748738 0 1 1 8.7504468,23.604815 A 2.3864856 2.4748738 0 1 1 13.523418 23.604815 z"
transform="matrix(0.4190262,0,0,0.404061,3.8333336,7.9622149)" />
<rect
style="opacity:1;fill:url(#linearGradient7750);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect5955"
width="8.000001"
height="1"
x="11"
y="13"
rx="0"
ry="0" />
<rect
style="opacity:1;fill:url(#linearGradient7758);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect5957"
width="6"
height="1"
x="11"
y="17"
rx="0"
ry="0" />
<rect
style="opacity:1;fill:#555753;fill-opacity:1;stroke:none;stroke-width:1.00000036;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect5963"
width="1"
height="1"
x="-8"
y="-28"
transform="matrix(0,-1,-1,0,0,0)" />
<path
style="fill:none;fill-rule:evenodd;stroke:#555753;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
d="M 19.36965,19.5 L 13.5,19.5 L 13.5,21.5 L 20.5,21.5 L 20.5,20.680407"
id="path5965"
sodipodi:nodetypes="ccccc" />
<rect
style="opacity:1;fill:url(#linearGradient7726);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect7718"
width="1.0000006"
height="2"
x="-27"
y="5"
transform="scale(-1,1)" />
<g
id="g22150"
style="opacity:0.3"
transform="matrix(-0.916667,0,0,0.714282,48,18.00012)">
<rect
y="35"
x="0"
height="7"
width="4"
id="rect22120"
style="opacity:1;fill:url(#radialGradient23040);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
<rect
transform="scale(-1,-1)"
y="-42"
x="-48"
height="7"
width="4"
id="rect22134"
style="opacity:1;fill:url(#radialGradient23042);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
<rect
y="35"
x="4"
height="7"
width="40"
id="rect22138"
style="opacity:1;fill:url(#linearGradient23044);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
</g>
<g
id="g10824"
transform="matrix(-1,0,0,1,152,-1.9285711)">
<path
id="path4319"
d="M 57.5,14.928571 L 57.5,44.928571 L 96.5,44.928571 L 57.5,14.928571 z M 63.5,27.928571 L 78.5,38.928571 L 63.5,38.928571 L 63.5,27.928571 z "
style="fill:url(#linearGradient10840);fill-opacity:1;fill-rule:evenodd;stroke:#a38503;stroke-width:1.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path4326"
d="M 61.5,44.928571 L 61.5,41.928571"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path4328"
d="M 67.5,44.928571 L 67.5,41.928571"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path4330"
d="M 73.5,44.928571 L 73.5,41.964285"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path4332"
d="M 79.5,44.928571 L 79.5,41.928571"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path4334"
d="M 85.5,44.928571 L 85.5,41.928571"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path6126"
d="M 58.500002,16.928575 L 58.500002,43.928586 L 93.500014,43.928586 L 58.500002,16.928575 z "
style="opacity:0.4;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.0000006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
style="opacity:0.4;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 89.455805,39.509552 L 89.5,25.5 L 70.415961,39.530368 L 89.455805,39.509552 z "
id="path12221"
sodipodi:nodetypes="cccc" />
<g
id="g6123"
style="opacity:0.3"
transform="matrix(-0.642788,0,0,0.499897,32,10.004326)">
<rect
y="35"
x="0"
height="7"
width="4"
id="rect6125"
style="opacity:1;fill:url(#radialGradient6150);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
<rect
transform="scale(-1,-1)"
y="-42"
x="-48"
height="7"
width="4"
id="rect6127"
style="opacity:1;fill:url(#radialGradient6152);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
<rect
y="35"
x="4"
height="7"
width="40"
id="rect6129"
style="opacity:1;fill:url(#linearGradient6154);fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:1.20000057;stroke-opacity:1" />
</g>
<g
id="g6131"
transform="matrix(-0.712014,0,0,0.705285,72.47014,-2.2704347)">
<path
id="path6133"
d="M 57.5,14.928571 L 57.5,44.928571 L 96.5,44.928571 L 57.5,14.928571 z M 63.236662,27.131021 L 77.534429,37.865171 L 63.148883,37.953788 L 63.236662,27.131021 z "
style="fill:url(#linearGradient6156);fill-opacity:1;fill-rule:evenodd;stroke:#a38503;stroke-width:1.4111501px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1.41114986px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
d="M 88.396719,44.928571 L 88.396719,41.928571"
id="path1912"
sodipodi:nodetypes="cc" />
<path
sodipodi:nodetypes="cc"
id="path6136"
d="M 61.675558,44.928571 L 61.675558,41.928571"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1.41114986px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path6138"
d="M 67.324442,44.928571 L 67.324442,41.928571"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1.41114986px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path6140"
d="M 72.973326,44.928571 L 72.973326,41.964285"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1.41114986px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path6142"
d="M 78.534431,44.928571 L 78.534431,41.928571"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1.41114986px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path6144"
d="M 82.778851,44.928571 L 82.778851,41.928571"
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#a38503;stroke-width:1.41114986px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path6146"
d="M 58.893688,17.726124 L 58.893688,43.628368 L 92.40573,43.628368 L 58.893688,17.726124 z "
style="opacity:0.4;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.41115046px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
sodipodi:nodetypes="cccc" />
</g>
<path
style="opacity:0.4;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.9999997px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 28.530931,25.46829 L 28.499421,14.788571 L 14.24226,25.482858 L 28.530931,25.46829 z "
id="path6148"
sodipodi:nodetypes="cccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -0,0 +1 @@
SUBDIRS = apps

View File

@ -0,0 +1,6 @@
## Process this file with automake to produce Makefile.in
appicondir = $(datadir)/icons/hicolor/48x48/apps
appicon_DATA = glade.png
EXTRA_DIST = $(appicon_DATA)

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -0,0 +1,3 @@
SUBDIRS = 16x16 22x22 24x24 32x32 48x48 256x256
EXTRA_DIST = source.svg

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 97 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 176 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -1,125 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
sodipodi:docname="glade-symbolic.svg"
height="16"
id="svg7384"
inkscape:version="0.92.2 2405546, 2018-03-11"
version="1.1"
width="16">
<metadata
id="metadata90">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title>Gnome Symbolic Icon Theme</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
inkscape:bbox-paths="true"
bordercolor="#666666"
borderopacity="1"
inkscape:current-layer="layer9"
inkscape:cx="20.812152"
inkscape:cy="4.0924638"
gridtolerance="10"
inkscape:guide-bbox="true"
guidetolerance="10"
id="namedview88"
inkscape:object-nodes="false"
inkscape:object-paths="false"
objecttolerance="10"
pagecolor="#555753"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
showborder="true"
showgrid="false"
showguides="true"
inkscape:snap-bbox="true"
inkscape:snap-bbox-midpoints="false"
inkscape:snap-global="true"
inkscape:snap-grids="true"
inkscape:snap-nodes="true"
inkscape:snap-others="false"
inkscape:snap-to-guides="true"
inkscape:window-height="1381"
inkscape:window-maximized="1"
inkscape:window-width="2560"
inkscape:window-x="1600"
inkscape:window-y="27"
inkscape:zoom="1"
borderlayer="true"
inkscape:showpageshadow="false">
<inkscape:grid
empspacing="2"
enabled="true"
id="grid4866"
snapvisiblegridlinesonly="true"
spacingx="1"
spacingy="1"
type="xygrid"
visible="true"
originx="0"
originy="0" />
</sodipodi:namedview>
<title
id="title9167">Gnome Symbolic Icon Theme</title>
<defs
id="defs7386" />
<g
inkscape:groupmode="layer"
id="layer9"
inkscape:label="apps"
style="display:inline"
transform="translate(-223.0002,-215)">
<path
inkscape:connector-curvature="0"
d="m 239.00778,222.70429 v 8.31023 h -14 z m -2,3.95138 -4,2.35885 h 4 z"
id="path4349"
sodipodi:nodetypes="cccccccc"
style="display:inline;fill:#3d3846;fill-opacity:1;stroke:none;enable-background:new" />
<circle
r="1.5"
cy="219.51451"
cx="227.50777"
id="circle1750"
style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
<path
style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:0.99607843;stroke:#3d3846;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
d="m 224.00778,229.01452 v -13 h 14 v 4"
id="path1752"
inkscape:connector-curvature="0" />
<rect
style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
id="rect1754"
width="5"
height="1"
x="230.00777"
y="219.01451" />
<circle
style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new"
id="circle1761"
cx="227.50777"
cy="223.51451"
r="1.5" />
<rect
y="223.01451"
x="230.00777"
height="1"
width="5"
id="rect1763"
style="display:inline;opacity:1;vector-effect:none;fill:#3d3846;fill-opacity:0.99607843;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;paint-order:normal;enable-background:new" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -1,65 +0,0 @@
desktop_conf = configuration_data()
desktop_conf.set('VERSION', glade_version)
i18n.merge_file(
type: 'desktop',
input: configure_file(
input: 'org.gnome.Glade.desktop.in.in',
output: '@BASENAME@',
configuration: desktop_conf,
),
output: '@BASENAME@',
po_dir: po_dir,
install: true,
install_dir: glade_datadir / 'applications',
)
appdata = glade_name + '.appdata.xml'
i18n.merge_file(
input: 'org.gnome.Glade.appdata.xml.in',
output: '@BASENAME@',
po_dir: po_dir,
install: true,
install_dir: glade_datadir / 'metainfo',
)
# FIXME: replace these by install_subdir once autotools is removed
install_data(
'icons/hicolor/scalable/apps/org.gnome.Glade.svg',
install_dir: glade_datadir / 'icons/hicolor/scalable/apps',
)
icon_symbolic_data = files(
'icons/hicolor/symbolic/apps/glade-brand-symbolic.svg',
'icons/hicolor/symbolic/apps/org.gnome.Glade-symbolic.svg',
)
install_data(
icon_symbolic_data,
install_dir: glade_datadir / 'icons/hicolor/symbolic/apps',
)
pixmaps_data = files(
'icons/deprecated-16x16.png',
'icons/deprecated-22x22.png',
'icons/devhelp.png',
'icons/fixed-bg.png',
'icons/placeholder.png',
'icons/plus.png',
)
install_data(
pixmaps_data,
install_dir: glade_datadir / glade_pixmapdir,
)
its_data = files(
'gettext/its/glade-catalog.its',
'gettext/its/glade-catalog.loc',
)
install_data(
its_data,
install_dir: glade_datadir / 'gettext/its',
)

View File

@ -1,171 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop">
<id>org.gnome.Glade</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0+ and LGPL-2.0+</project_license>
<name>Glade</name>
<summary>Create or open user interface designs for GTK+ applications</summary>
<description>
<!-- To translators: AppData description first paragraph -->
<p>
Glade is a RAD tool to enable quick &amp; easy development of user interfaces
for the GTK+ 3 toolkit and the GNOME desktop environment.
</p>
<!-- To translators: AppData description second paragraph -->
<p>
The user interfaces designed in Glade are saved as XML and these can be
loaded by applications dynamically as needed by using GtkBuilder or used
directly to define a new GtkWidget derived object class using
GTK+ new template feature.
</p>
<!-- To translators: AppData description third paragraph -->
<p>
By using GtkBuilder, Glade XML files can be used in numerous programming
languages including C, C++, C#, Vala, Java, Perl, Python, and others.
</p>
</description>
<screenshots>
<screenshot type="default">
<image>https://glade.gnome.org/images/glade-main-page.png</image>
</screenshot>
</screenshots>
<provides>
<id>glade.desktop</id>
</provides>
<launchable type="desktop-id">org.gnome.Glade.desktop</launchable>
<url type="homepage">https://glade.gnome.org/</url>
<url type="bugtracker">https://gitlab.gnome.org/GNOME/glade/issues</url>
<url type="donation">https://www.gnome.org/friends/</url>
<url type="help">https://help.gnome.org/users/glade/stable/</url>
<update_contact>juanpablougarte_at_gmail.com</update_contact>
<kudos>
<kudo>HiDpiIcon</kudo>
<kudo>ModernToolkit</kudo>
<kudo>UserDocs</kudo>
</kudos>
<project_group>GNOME</project_group>
<translation type="gettext">glade</translation>
<releases>
<release version="3.40.0" date="2022-08-10">
<description>
<p>Last Release!
Glade is not being actively developed or maintained anymore.
If you are interested in becoming a maintainer please contact us on gitlab.
</p>
<ul>
<li>Remove survey</li>
<li>Add user manual menu item (Sabri Ünal)</li>
<li>'Clear' action in "Setup Text Attributes" dialog now clears only selected attributes (crvi)</li>
<li>Fix windows build on msys</li>
<li>Fix build against Python 3.9</li>
<li>Fix issue pasing widget with ctrl+v in GtkGrid</li>
<li>Several bug fixes</li>
</ul>
</description>
<issues>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/502">Fix issue #502 sync draw-indicator on setting xalign (Caolán McNamara)</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/499">Fix issue #499 and #509 "Drop overzealous check using only the first child"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/385">Fix Segfault in gnome-builder when widget doesn't have a name (Peter Maatman)</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/373">Fix issue #373 "Move separator in hamburger menu one up, to be consistent with other GNOME applications"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/484">Fix issue #484 "Crash with GtkRecentChooserDialog"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/194">Fix issue #194 "Using List Store can result in program crash."</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/53">Fix issue #53 "Can't choose a FileChooserDialog for a FileChooserButton"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/98">Fix issue #98 #491</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/355">Fix issue #355 "Make notification text selectable"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/360">Fix issue #360 "No examples in documentation on using custom catalogues with gtkBuilder"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/406">Fix issue #406 "AtkObject::accessible-role should not be translatable"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/479">Fix issue #479 "Glade 3.36.0 segfaults when opening a file"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/471">Fix issue #471 "XML not updated after adding element"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/474">Fix issue #474 "GtkLabel: setup text attribute issues"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/480">Fix issue #480 "version field not always updated in XML"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/470">Fix issue #470 "Widgets of type need placeholders to add children"</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/472">Fix issue #472 "gnome-nightly: About dialog should display git commit rev"</issue>
</issues>
</release>
<release version="3.38.0" date="2020-09-12">
<description>
<p>Glade 3.38.0 release!</p>
<ul>
<li>Load template files as new GTypes and add them to "User templates" widget group automatically without the need of a catalog</li>
<li>Added JavaScript widget support</li>
<li>Use version data from gir to improve deprecation/target tests</li>
<li>Implement survey using new backend at surveys.gnome.org</li>
<li>Keep survey state in config file</li>
<li>Associate with application/x-gtk-builder (Caolán McNamara)</li>
<li>Project properties dialog improvements. (Use headerbar, stack and stach switcher, add warnings textview)</li>
<li>Improve toolkit target version selection in project properties dialog</li>
<li>Improve treemodel char data type handling</li>
<li>Remove autotools (Iñigo Martínez)</li>
<li>New gjs-1.0 1.64 dependency</li>
<li>Bump Gtk dependency to 3.24</li>
<li>Bump webkit2gtk dependency to 2.28</li>
<li>Fixed all compiler/gir warnings</li>
</ul>
</description>
<issues>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/385">Issue #385: GtkCellRendererText causes deprecated warnings for ghost properties</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/444">Issue #444: show-emoji-icon is missing "minimum version"/since constraint</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/367">Issue #367: Glade removes double/triple slashes from URLs</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/452">Issue #452: GtkComboBox cell renderers editor is too hard to discover</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/363">Issue #363: Toplevel windows are leaked when closing a project</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/462">Issue #462: Crash when creating a new GtkAssistant and pressing it</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/463">Issue #463: Specify file on command line</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/461">Issue #461: Glade resets number of rows and columns in GtkGrid</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/460">Issue #460: 3.37.0: test suite fails because glade uses incorrectly asserts in test units</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/412">Issue #412: Fix inconsistent "top-level", "top level", "toplevel" spelling in translatable strings</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/281">Issue #281: GladeProperty: Do not replace - with _</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/389">Issue #389: GladeProject: show message on invalid GtkBuilder file</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/446">Issue #446: GladeGtkListBox: fix size request issue</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/432">Issue #432: GladeStandarStock, GladeStandarStockImage: fix get_type() functions for introspection</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/447">Issue #447: GladeGtkWindow: Fix CSD support</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/456">Issue #456: Utils: use g_param_spec_uchar() for uchar types</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/459">Issue #459: Gtk catalog: add GtkRecentChooserMenu to Display group</issue>
<issue url="https://gitlab.gnome.org/GNOME/glade/-/issues/433">Issue #433: Implement survey using new backend at surveys.gnome.org</issue>
<issue>Build: use gtk-mac-integration only when creating bundle (Tom Schoonjans)</issue>
<issue>Ignore locale when saving numeric values (Alberto Fanjul)</issue>
<issue>Remove config for external builds (Alberto Fanjul)</issue>
<issue>Python plugin: fix linking error</issue>
<issue>Tests: add python and javascript test case</issue>
<issue>gtk: Add GtkScrolledWindow propagate-natural-width property (Corentin Noël)</issue>
<issue>GladeScrolledWindowEditor: Squeeze width/height properties in two columns</issue>
<issue>Gtk plugin: add missing displayable values</issue>
<issue>Webkit2gtk plugin: add missing displayable values and sandbox web view</issue>
<issue>dtd: Make init-function an element, not an attribute (Adrien Plazas)</issue>
</issues>
</release>
<release version="3.36.0" date="2020-05-06"/>
<release version="3.22.0" date="2018-03-12"/>
</releases>
<content_rating type="oars-1.1">
<content_attribute id="violence-cartoon">none</content_attribute>
<content_attribute id="violence-fantasy">none</content_attribute>
<content_attribute id="violence-realistic">none</content_attribute>
<content_attribute id="violence-bloodshed">none</content_attribute>
<content_attribute id="violence-sexual">none</content_attribute>
<content_attribute id="violence-desecration">none</content_attribute>
<content_attribute id="violence-slavery">none</content_attribute>
<content_attribute id="violence-worship">none</content_attribute>
<content_attribute id="drugs-alcohol">none</content_attribute>
<content_attribute id="drugs-narcotics">none</content_attribute>
<content_attribute id="drugs-tobacco">none</content_attribute>
<content_attribute id="sex-nudity">none</content_attribute>
<content_attribute id="sex-themes">none</content_attribute>
<content_attribute id="sex-homosexuality">none</content_attribute>
<content_attribute id="sex-prostitution">none</content_attribute>
<content_attribute id="sex-adultery">none</content_attribute>
<content_attribute id="sex-appearance">none</content_attribute>
<content_attribute id="language-profanity">none</content_attribute>
<content_attribute id="language-humor">none</content_attribute>
<content_attribute id="language-discrimination">none</content_attribute>
<content_attribute id="social-chat">none</content_attribute>
<content_attribute id="social-info">none</content_attribute>
<content_attribute id="social-audio">none</content_attribute>
<content_attribute id="social-location">none</content_attribute>
<content_attribute id="social-contacts">none</content_attribute>
<content_attribute id="money-purchasing">none</content_attribute>
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
</component>

View File

@ -1,15 +0,0 @@
[Desktop Entry]
Name=Glade
GenericName=Interface Designer
Comment=Create or open user interface designs for GTK+ applications
# Translators: Search terms to find this application. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon!
Keywords=GUI designer;user interface;ui builder;
Exec=glade %F
Terminal=false
StartupNotify=true
Type=Application
# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
Icon=org.gnome.Glade
Categories=GNOME;GTK;Development;GUIDesigner;
MimeType=application/x-gtk-builder;application/x-glade;
X-GNOME-DocPath=glade/glade.xml

145
doc/Makefile.am Normal file
View File

@ -0,0 +1,145 @@
## Process this file with automake to produce Makefile.in
# We require automake 1.6 at least.
AUTOMAKE_OPTIONS = 1.6
# This is a blank Makefile.am for using gtk-doc.
# Copy this to your project's API docs directory and modify the variables to
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
# of using the various options.
# The name of the module, e.g. 'glib'.
DOC_MODULE=gladeui
DOC_MODULE_VERSION=2
# The top-level SGML file. You can change this if you want to.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
# The directory containing the source code. Relative to $(srcdir).
# gtk-doc will search all .c & .h files beneath here for inline comments
# documenting the functions and macros.
DOC_SOURCE_DIR=../gladeui
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
SCANGOBJ_OPTIONS=
# Extra options to supply to gtkdoc-scan.
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
SCAN_OPTIONS=
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
MKDB_OPTIONS=--sgml-mode --output-format=xml
# Extra options to supply to gtkdoc-mktmpl
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
MKTMPL_OPTIONS=
# Extra options to supply to gtkdoc-fixref. Not normally needed.
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
# XXX We'll maybe want to use this to cross-ref into GTK+ docs...
FIXXREF_OPTIONS=
# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
HFILE_GLOB=$(top_srcdir)/gladeui/*.h
CFILE_GLOB=$(top_srcdir)/gladeui/*.c
# Header files to ignore when scanning.
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
IGNORE_HFILES=\
glade-builtins.h \
glade-debug.h \
glade-accumulators.h \
glade-marshallers.h \
glade-paths.h \
glade-custom.h \
glade-cursor.h \
glade-id-allocator.h \
glade-catalog.h \
glade.h \
glade-design-layout.h \
glade-popup.h \
glade-gtk.h \
glade-palette-expander.h \
glade-palette-item.h \
glade-named-icon-chooser-dialog.h \
glade-palette-box.h
# Images to copy into HTML directory.
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
HTML_IMAGES=
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
content_files=\
version.xml \
catalogintro.sgml \
widgetclasses.sgml \
properties.sgml \
gladepython.sgml
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
# These files must be listed here *and* in content_files
# e.g. expand_content_files=running.sgml
expand_content_files=\
catalogintro.sgml \
widgetclasses.sgml \
properties.sgml \
gladepython.sgml
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
# signals and properties.
# e.g. INCLUDES=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
GTKDOC_CFLAGS= \
-I$(top_srcdir)/gladeui \
-I$(top_builddir)/gladeui \
-I$(top_srcdir) \
-I$(top_builddir) \
`pkg-config --cflags gtk+-3.0`
GTKDOC_LIBS= `pkg-config --libs gtk+-3.0` ${top_builddir}/gladeui/libgladeui-2.la
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in
# XXX Seems this is no longer working with gtkdoc 1.9 :(
GTK_HOME = http://library.gnome.org/devel/gtk/stable
GDK_HOME = http://library.gnome.org/devel/gdk/stable
GOBJECT_HOME = http://library.gnome.org/devel/gobject/stable
GLIB_HOME = http://library.gnome.org/devel/glib/stable
webdocs: all
rm -rf html-web
mkdir -p html-web
for file in `find html`; do \
ROOT_PATH=`echo $${file} | sed 's/^html//'`; \
if test "" != "$${ROOT_PATH}"; then \
if test -d $$file; then \
echo "Creating directory html-web$${ROOT_PATH}..."; \
mkdir -p html-web$${ROOT_PATH}; \
else \
if echo $$file | grep -q '\.html$$'; then \
echo "Creating file html-web$${ROOT_PATH}..."; \
cat $$file | sed \
-e 's!href="../gtk!href="$(GTK_HOME)!g' \
-e 's!href="../gdk!href="$(GDK_HOME)!g' \
-e 's!href="../gobject!href="$(GOBJECT_HOME)!g' \
-e 's!href="../glib!href="$(GLIB_HOME)!g' \
> html-web$${ROOT_PATH}; \
else \
echo "Copying file html-web$${ROOT_PATH}..."; \
cp $$file html-web$${ROOT_PATH}; \
fi \
fi; \
fi; \
done

View File

@ -35,41 +35,33 @@ some basic examples and describe a wealth of options that can be used to
enhance UI editing and workaround exceptions.
</para>
<para>
Keep in mind you need to take extra steps to ensure GtkBuilder can pick up your
new object types at runtime. Ussualy all you need is to link your executable
with your widget library assuming it has properly named get_type() functions.
<![CDATA[GtkWindow -> gtk_window_get_type
GtkHBox -> gtk_hbox_get_type
GtkUIManager -> gtk_ui_manager_get_type
GWeatherLocation -> gweather_location_get_type]]>
If not you can always register your widgets with the type system with g_type_ensure ()
</para>
<para>
The catalog file starts by specifying the name of the catalog and the plugin
library to use, the following examples assume you have a namespace "Foo" and
are integrating an object "Frobnicator":
<programlisting>
<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<glade-catalog name="foo" library="foo" depends="gtk+">
<![CDATA[<glade-catalog name="foo" library="foo" depends="gtk+">
<init-function>my_catalog_init</init-function>
<glade-widget-classes>
<glade-widget-class name="FooFrobnicator" generic-name="frobnicator" title="Frobnicator"/>
... widget classes go here
</glade-widget-classes>
<glade-widget-group name="foo" title="Foo">
<glade-widget-class-ref name="FooFrobnicator"/>
... widget class references go here
</glade-widget-group>
... widget groups go here
</glade-catalog>]]></programlisting>
</para>
@ -78,7 +70,7 @@ are integrating an object "Frobnicator":
<title>Toplevel catalog properties and tags</title>
<para>
When defining the catalog, the 'name' and 'library'
are both mandatory attributes of the 'glade-catalog' tag; optionally
are both manditory attributes of the 'glade-catalog' tag; optionally
you can also use 'icon-prefix', 'depends' and 'domain'.
</para>
@ -109,7 +101,7 @@ Please note that all versioning related support is completely optional.
<term>targetable</term>
<listitem>
<para>
A comma separated list of 'major.minor' formed versions describing sensible previous
A comma separated list of 'major.minor' formed versions describing sensable previous
targetable versions of the underlying toolkit not including the current version;
example: <literal>targetable="0.6,0.8"</literal>.
</para>
@ -158,7 +150,7 @@ for your plugin.
<listitem>
<para>
The domain in which to search for translatable strings from the
catalog file; please note that all strings from the catalog that will appear in the UI are
catalog file; please note that all strings from the catalog that will apear in the UI are
translated using this domain. If the 'domain' is not specified, the library property will
be used in it's stead.
</para>
@ -170,7 +162,7 @@ be used in it's stead.
<listitem>
<para>
Used to specify a namespace to search devhelp docs library with
(specifically, it is the $(DOC_MODULE) that you specified in your gtk-doc Makefile.am).
(specificly, it is the $(DOC_MODULE) that you specified in your gtk-doc Makefile.am).
</para>
</listitem>
</varlistentry>

View File

@ -1,99 +0,0 @@
<refentry id="gjssupport" revision="5 Jun 2020">
<refmeta>
<refentrytitle>JavaScript Gtk widgets support</refentrytitle>
<refmiscinfo>Glade UI</refmiscinfo>
</refmeta>
<refnamediv>
<refname>Add GJS/JavaScript support to your catalog</refname>
<refpurpose>
How to write and install a catalog for a JavaScript widget library
</refpurpose>
</refnamediv>
<refsect1>
<title>Introduction</title>
<para>
Glade supports loading widgets programed in JavaScript by linking and running GJS from the gladegjs catalog plugin.
</para>
<para>
So in order for glade to support your JavaScript widgets you will have to:
<varlistentry><listitem>
a) specify gladegjs support code as your plugin library.
</listitem></varlistentry>
<varlistentry><listitem>
b) set glade_gjs_init as you init function.
</listitem></varlistentry>
<varlistentry><listitem>
c) make sure your catalog name is the same as your JavaScript import library since
glade_gjs_init() will use this name to import your widgets into the
interpreter.
</listitem></varlistentry>
<programlisting>
<![CDATA[
<glade-catalog name="gjsplugin" library="gladegjs" domain="glade-3" depends="gtk+">
<init-function>glade_gjs_init</init-function>
<glade-widget-classes>
<glade-widget-class title="MyJSGrid" name="MyJSGrid" generic-name="mygrid"/>
</glade-widget-classes>
<glade-widget-group name="gjs" title="Gjs">
<glade-widget-class-ref name="MyJSGrid"/>
</glade-widget-group>
</glade-catalog>]]>
</programlisting>
</para>
<para>
GJS will look up for your widgets in the same places it looks
for regular catalogs plugins, that is $GLADE_ENV_MODULE_PATH
environment variable and `pkg-config --variable=moduledir gladeui-2.0`
So the easiest thing would be to make a symlink in one of those directory, just
do not forget that the name should be the one specified in your catalog name.
</para>
<para>
gjsplugin.js
<programlisting>
<![CDATA[
#!/usr/bin/gjs
const GObject = imports.gi.GObject;
const Gtk = imports.gi.Gtk;
var MyJSGrid = GObject.registerClass({
GTypeName: 'MyJSGrid',
Properties: {
'string-property': GObject.ParamSpec.string('string-property', 'String Prop',
'Longer description', GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT,
'Foobar'),
'int-property': GObject.ParamSpec.int('int-property', 'Integer Prop',
'Longer description',
GObject.ParamFlags.READWRITE | GObject.ParamFlags.CONSTRUCT,
0, 10, 5)
},
Signals: {'mysignal': {param_types: [GObject.TYPE_INT]}},
}, class MyJSGrid extends Gtk.Grid {
_init(props) {
super._init(props);
this.label = new Gtk.Label ({ visible: true });
this.add (this.label);
this.connect('notify::string-property', this._update.bind(this));
this.connect('notify::int-property', this._update.bind(this));
this._update();
}
_update (obj, pspec) {
this.label.set_text ('JS Properties\nInteger = ' + this.int_property + '\nString = \'' + this.string_property + '\'');
}
});
]]>
</programlisting>
</para>
</refsect1>
</refentry>

View File

@ -34,7 +34,6 @@ glade_python_init() will use this name to import your widgets into the
interpreter.
</listitem></varlistentry>
pythonplugin.xml
<programlisting>
<![CDATA[
<glade-catalog name="pythonplugin" library="gladepython"
@ -42,11 +41,11 @@ domain="glade-3" depends="gtk+">
<init-function>glade_python_init</init-function>
<glade-widget-classes>
<glade-widget-class title="MyPythonBox" name="MyPythonBox" generic-name="mypythonbox"/>
<glade-widget-class title="MyBox" name="MyBox" generic-name="mybox"/>
</glade-widget-classes>
<glade-widget-group name="python" title="Python">
<glade-widget-class-ref name="MyPythonBox"/>
<glade-widget-class-ref name="MyBox"/>
</glade-widget-group>
</glade-catalog>]]>
</programlisting>
@ -56,7 +55,7 @@ domain="glade-3" depends="gtk+">
Glade's python interpreter will look up for your widgets in the same
places it looks
for regular catalogs plugins, that is $GLADE_ENV_MODULE_PATH
environment variable
enviroment variable
and `pkg-config --variable=moduledir gladeui-2.0`
So the easiest thing would be to make a symlink in one of those directory, just
@ -67,24 +66,13 @@ do not forget that the name should be the one specified in your catalog name.
pythonplugin.py
<programlisting>
<![CDATA[
from gi.repository import GLib, Gtk, GObject
from gi.repository import Gtk
class MyPythonBox(Gtk.Box):
__gtype_name__ = 'MyPythonBox'
class MyBox(Gtk.HBox):
__gtype_name__ = 'MyBox'
foo = GObject.Property(type=int, nick='An integer')
bar = GObject.Property(type=str, nick='A String')
def _update(self, obj, pspec):
self.label.set_text ('Python Properties\nInteger = ' + str(self.foo) + '\nString = \'' + self.bar + '\'')
def __init__ (self):
Gtk.Box.__init__ (self)
self.label = Gtk.Label (visible = True)
self.add (self.label)
self.connect('notify::foo', self._update)
self.connect('notify::bar', self._update)
self._update(None, None)
def __init__(self):
Gtk.HBox.__init__(self)
]]>
</programlisting>
</para>

104
doc/gladeui-docs.sgml Normal file
View File

@ -0,0 +1,104 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY CatalogIntro SYSTEM "xml/catalogintro.sgml">
<!ENTITY WidgetClasses SYSTEM "xml/widgetclasses.sgml">
<!ENTITY Properties SYSTEM "xml/properties.sgml">
<!ENTITY PythonSupport SYSTEM "xml/gladepython.sgml">
<!ENTITY GladeCommand SYSTEM "xml/glade-command.xml">
<!ENTITY GladeApp SYSTEM "xml/glade-app.xml">
<!ENTITY GladeClipboardView SYSTEM "xml/glade-clipboard-view.xml">
<!ENTITY GladeClipboard SYSTEM "xml/glade-clipboard.xml">
<!ENTITY GladeEditorProperty SYSTEM "xml/glade-editor-property.xml">
<!ENTITY GladeEditor SYSTEM "xml/glade-editor.xml">
<!ENTITY GladePalette SYSTEM "xml/glade-palette.xml">
<!ENTITY GladeParameter SYSTEM "xml/glade-parameter.xml">
<!ENTITY GladePlaceholder SYSTEM "xml/glade-placeholder.xml">
<!ENTITY GladeInspector SYSTEM "xml/glade-inspector.xml">
<!ENTITY GladeProject SYSTEM "xml/glade-project.xml">
<!ENTITY GladePropertyClass SYSTEM "xml/glade-property-class.xml">
<!ENTITY GladeProperty SYSTEM "xml/glade-property.xml">
<!ENTITY GladeSignalEditor SYSTEM "xml/glade-signal-editor.xml">
<!ENTITY GladeUtils SYSTEM "xml/glade-utils.xml">
<!ENTITY GladeWidgetAdaptor SYSTEM "xml/glade-widget-adaptor.xml">
<!ENTITY GladeWidget SYSTEM "xml/glade-widget.xml">
<!ENTITY GladeFixed SYSTEM "xml/glade-fixed.xml">
<!ENTITY GladeBaseEditor SYSTEM "xml/glade-base-editor.xml">
<!ENTITY GladeDesignView SYSTEM "xml/glade-design-view.xml">
<!ENTITY GladeXmlUtils SYSTEM "xml/glade-xml-utils.xml">
<!ENTITY GladeWidgetAction SYSTEM "xml/glade-widget-action.xml">
<!ENTITY version SYSTEM "version.xml">
]>
<book id="index">
<bookinfo>
<title>Glade User Interface Designer Reference Manual</title>
<abstract>
<para>
This document attempts to describe how to use the Glade UI Designer core
library to integrate Glade into your application and how to integrate your
custom GTK+ derived widgets into the Glade UI Designer.
</para>
<para>
You can always get the latest version of this document
<ulink url="http://library.gnome.org/devel/gladeui/unstable/">here</ulink>
and you should have received a copy with the glade-3 tarball.
</para>
</abstract>
<releaseinfo>for &version;</releaseinfo>
<authorgroup>
<author>
<firstname>Tristan</firstname>
<surname>Van Berkom</surname>
</author>
</authorgroup>
</bookinfo>
<part id="catalog">
<title>Adding your custom widgets</title>
&CatalogIntro;
&WidgetClasses;
&Properties;
&PythonSupport;
</part>
<part id="core">
<title>Glade Core</title>
&GladeApp;
&GladeProject;
&GladeWidget;
&GladeFixed;
&GladeProperty;
&GladeWidgetAdaptor;
&GladePropertyClass;
&GladeWidgetAction;
&GladeCommand;
&GladeClipboard;
&GladeBaseEditor;
&GladePlaceholder;
&GladeXmlUtils;
</part>
<part id="dockables">
<title>Dockable Glade UI Widgets</title>
&GladeEditor;
&GladeEditorProperty;
&GladePalette;
&GladeClipboardView;
&GladeInspector;
&GladeSignalEditor;
&GladeDesignView;
</part>
<part id="misc">
<title>Miscellaneous utilities</title>
&GladeParameter;
&GladeUtils;
</part>
<index>
<title>Index</title>
</index>
</book>

View File

@ -1,90 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC '-//OASIS//DTD DocBook XML V4.5//EN'
'http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd' [
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
<!ENTITY version SYSTEM "version.xml">
]>
<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
<title>Glade User Interface Designer Reference Manual</title>
<releaseinfo>
for gladeui &version;.
This document attempts to describe how to use the Glade UI Designer core
library to integrate Glade into your application and how to integrate your
custom GTK+ derived widgets into the Glade UI Designer.
The latest version of this documentation can be found on-line at
<ulink role="online-location" url="https://developer.gnome.org/gladeui/stable/">
https://developer.gnome.org/gladeui/stable
</ulink>.
</releaseinfo>
</bookinfo>
<part id="catalog">
<title>Adding your custom widgets</title>
<xi:include href="catalogintro.sgml"/>
<xi:include href="widgetclasses.sgml"/>
<xi:include href="properties.sgml"/>
<xi:include href="gladepython.sgml"/>
<xi:include href="gladegjs.sgml"/>
</part>
<part id="core">
<title>Glade Core</title>
<xi:include href="xml/glade-init.xml"/>
<xi:include href="xml/glade-catalog.xml"/>
<xi:include href="xml/glade-app.xml"/>
<xi:include href="xml/glade-project.xml"/>
<xi:include href="xml/glade-widget.xml"/>
<xi:include href="xml/glade-widget-adaptor.xml"/>
<xi:include href="xml/glade-widget-action.xml"/>
<xi:include href="xml/glade-widget-action-def.xml"/>
<xi:include href="xml/glade-fixed.xml"/>
<xi:include href="xml/glade-property.xml"/>
<xi:include href="xml/glade-property-def.xml"/>
<xi:include href="xml/glade-command.xml"/>
<xi:include href="xml/glade-clipboard.xml"/>
<xi:include href="xml/glade-base-editor.xml"/>
<xi:include href="xml/glade-placeholder.xml"/>
<xi:include href="xml/glade-signal.xml"/>
<xi:include href="xml/glade-signal-def.xml"/>
<xi:include href="xml/glade-name-context.xml"/>
<xi:include href="xml/glade-xml-utils.xml"/>
</part>
<part id="dockables">
<title>Dockable Glade UI Widgets</title>
<xi:include href="xml/glade-editable.xml"/>
<xi:include href="xml/glade-editor.xml"/>
<xi:include href="xml/glade-editor-property.xml"/>
<xi:include href="xml/glade-palette.xml"/>
<xi:include href="xml/glade-inspector.xml"/>
<xi:include href="xml/glade-signal-editor.xml"/>
<xi:include href="xml/glade-previewer.xml"/>
<xi:include href="xml/glade-design-view.xml"/>
<xi:include href="xml/glade-preview.xml"/>
<xi:include href="xml/glade-adaptor-chooser.xml"/>
<xi:include href="xml/glade-property-label.xml"/>
<xi:include href="xml/glade-property-shell.xml"/>
</part>
<part id="misc">
<title>Miscellaneous utilities</title>
<xi:include href="xml/glade-cell-renderer-icon.xml"/>
<xi:include href="xml/glade-object-stub.xml"/>
<xi:include href="xml/glade-signal-model.xml"/>
<xi:include href="xml/glade-utils.xml"/>
</part>
<index id="api-index-full">
<title>Index</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
<index id="api-index-deprecated" role="deprecated">
<title>Index of deprecated symbols</title>
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
</index>
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
</book>

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +0,0 @@
private_doc_headers = [
'glade-builtins.h',
'glade-debug.h',
'glade-design-private.h',
'glade-drag.h',
'glade-accumulators.h',
'glade-marshallers.h',
'glade-paths.h',
'glade-custom.h',
'glade-cursor.h',
'glade-id-allocator.h',
'glade.h',
'glade-design-layout.h',
'glade-popup.h',
'glade-gtk.h',
'glade-palette-expander.h',
'glade-palette-item.h',
'glade-named-icon-chooser-dialog.h',
'glade-palette-box.h',
'glade-private.h',
]
content_files = files(
'catalogintro.sgml',
'gladepython.sgml',
'properties.sgml',
'widgetclasses.sgml',
)
version_conf = configuration_data()
version_conf.set('PACKAGE_STRING', '@0@ @1@'.format(glade_name, glade_version))
content_files += configure_file(
input: 'version.xml.in',
output: '@BASENAME@',
configuration: version_conf,
)
gnome.gtkdoc(
gladeui_name,
main_xml: gladeui_name + '-docs.xml',
module_version: gladeui_major_version.to_string(),
src_dir: gladeui_inc,
ignore_headers: private_doc_headers,
include_directories: top_inc,
dependencies: libgladeui_dep,
content_files: content_files,
install: true,
)

View File

@ -1,19 +1,19 @@
<refentry id="properties" revision="8 Feb 2006">
<refmeta>
<refentrytitle>Property Definitions</refentrytitle>
<refentrytitle>Property Class Definitions</refentrytitle>
<refmiscinfo>Glade UI</refmiscinfo>
</refmeta>
<refnamediv>
<refname>Property Definitions</refname>
<refname>Property Classes</refname>
<refpurpose>
How to augment or define a #GladePropertyDef
How to augment or define a #GladePropertyClass
</refpurpose>
</refnamediv>
<refsect1>
<title>Property Definition Configuration</title>
<title>Property Class Configuration</title>
<para>
Properties are introspected at load time and loaded into #GladePropertyDef structures.
Properties are introspected at load time and loaded into #GladePropertyClass structures.
The behaviour of properties can be modified by the catalog and fake properties can be added
for editing purposes. Here is an example of the xml form:
<programlisting><![CDATA[...
@ -30,6 +30,7 @@ for editing purposes. Here is an example of the xml form:
... values here
</displayable-values>
</property>
...]]></programlisting>
@ -43,7 +44,7 @@ Properties of the 'property' tag:
<term>id</term>
<listitem>
<para>
This is mandatory and specifies the property that we are modifying (or adding)
This is manditory and specifies the property that we are modifying (or adding)
</para>
</listitem>
</varlistentry>
@ -210,7 +211,7 @@ the widget when pasted to a new container that supports the same properties.
<term>save-always</term>
<listitem>
<para>
Specifies that the property should be saved regardless of its value (properties at their
Specifies that the property should be saved regardless of its value (properties at thier
default values are normally not saved).
</para>
</listitem>

View File

@ -16,7 +16,7 @@ Adding support for custom widgets
<para>
Widget support in Glade is provided by the #GladeWidgetAdaptor object, each
`glade-widget-class' definition in the catalog will result in the creation
of an adaptor, which inherits the functionality of the adaptor created for its
of an adaptor, which inherits the funcionality of the adaptor created for its
parent, or the closest adaptor available in the ancestry. Adaptor methods can
be overridden by functions in the plugin by specifying them in the catalog.
There is also a wealth of options you can use in the `glade-widget-class' without
@ -31,43 +31,57 @@ A typical basic example of a widget class definition is as follows:
Here is the complete example of the form of the `glade-widget-class' definition:
<programlisting>
<![CDATA[<glade-widget-class name="FooFrobnicator" generic-name="frobnicator" title="Frobnicator"/>
<post-create-function>foo_frobnicator_plugin_post_create</post-create-function>
... widget class support functions go here
<properties>
<property id="frobnicated" default="False"/>
... property definitions go here
</properties>
<signals>
<signal id="frobnicate" since="1.0"/>
... signal definitions go here
</signals>
<packing-properties>
... child packing property definitions go here
</packing-properties>
<actions>
<action id="launch_editor" name="Edit Frob" stock="gtk-edit"/>
... context menu action definitions go here
</actions>
<packing-actions>
... context menu action definitions for child objects go here
</packing-actions>
<packing-defaults>
<parent-class name="GtkVBox">
<child-property id="expand" default="false"/>
</parent-class>
... packing default definitions go here
</packing-defaults>
</glade-widget-class>]]></programlisting>
</para>
@ -76,7 +90,7 @@ Here is the complete example of the form of the `glade-widget-class' definition:
<refsect1>
<title>Widget Class Properties</title>
<para>
The following are all properties of the `glade-widget-class' tag
The following are all properies of the `glade-widget-class' tag
</para>
<variablelist>
<varlistentry>
@ -168,7 +182,7 @@ tree and will be translated before use in the interface.
<para>
Use this to specify the name of the parent your widget derives from, you
can use this option instead of loading a real widget type (this allows you
to fake derive and still add properties and run your catalog independently
to fake derive and still add properties and run your catalog independantly
of any plugins or libraries).
</para>
</listitem>
@ -188,7 +202,7 @@ in Glade context. This property will be inherited from the adaptors parent.
<term>fixed</term>
<listitem>
<para>
Used to mark a #GladeWidgetAdaptor for free form placement capacities
Used to mark a #GladeWidgetClass for free form placement capacities
to be handled with a #GladeFixed. This property will be inherited from the adaptors parent.
</para>
</listitem>
@ -506,7 +520,7 @@ are added to the toolbar.
<para>
Default values can be specified for packing properties on your widget when added
to a said type of parent, as the example shows above; use the `parent-class' to
specify what parent (or derivative of that parent) you are targeting and fill
specify what parent (or derivative of that parent) you are targetting and fill
in any `child-property' tags you need for that parent using `id' property to
specify the property name and the `default' property for the value.
</para>
@ -542,7 +556,7 @@ and GENERIC_NAME is the value of an widget class's generic name attribute.
</para>
<para>
To explicitly set an icon name for a widget class, the "icon-name" attribute of the
To explicity set an icon name for a widget class, the "icon-name" attribute of the
"glade-widget-class" element can be specified. This will override the default icon
name assigned to the widget class.
</para>

17
glade-rules.mk Normal file
View File

@ -0,0 +1,17 @@
# In this file you will find generic and usefull rules to
# GResource rules:
# These rules will create source and header files for any file ending with .gresource.xml
# You will have to manually load the resourse unless the file name ends with
# .static.gresource.xml in which case it will be loaded automatically
%.h: %.gresource.xml
$(GLIB_COMPILE_RESOURCES) --manual-register --generate $< --target=$@
%.c: %.gresource.xml
$(GLIB_COMPILE_RESOURCES) --manual-register --generate $< --target=$@
# rule for static resources
%.h: %.static.gresource.xml
$(GLIB_COMPILE_RESOURCES) --generate $< --target=$@
%.c: %.static.gresource.xml
$(GLIB_COMPILE_RESOURCES) --generate $< --target=$@

View File

@ -6,23 +6,36 @@
xmlns="http://usefulinc.com/ns/doap#">
<name xml:lang="en">Glade Interface Designer</name>
<description>Glade is a RAD tool to enable quick and easy development of user interfaces for the GTK+ 3 toolkit and the GNOME desktop environment.</description>
<shortdesc xml:lang="en">User Interface Builder for GTK+ applications</shortdesc>
<homepage rdf:resource="http://glade.gnome.org/" />
<developer-forum rdf:resource="https://discourse.gnome.org/tag/glade" />
<download-page rdf:resource="https://download.gnome.org/sources/glade/" />
<bug-database rdf:resource="https://gitlab.gnome.org/GNOME/glade/issues" />
<mailing-list rdf:resource="http://lists.ximian.com/mailman/listinfo/glade-devel" />
<download-page rdf:resource="http://download.gnome.org/sources/glade/" />
<bug-database rdf:resource="http://bugzilla.gnome.org/browse.cgi?product=glade" />
<category rdf:resource="http://api.gnome.org/doap-extensions#apps" />
<programming-language>C</programming-language>
<!-- DOAP category: This is used to categorize repositories in cgit.
Pulse has taken its best guess at the correct category. You may
want to replace the rdf:resource attribute with one of the following:
http://api.gnome.org/doap-extensions#admin
http://api.gnome.org/doap-extensions#bindings
http://api.gnome.org/doap-extensions#deprecated
http://api.gnome.org/doap-extensions#desktop
http://api.gnome.org/doap-extensions#development
http://api.gnome.org/doap-extensions#infrastructure
http://api.gnome.org/doap-extensions#platform
http://api.gnome.org/doap-extensions#productivity
NOTE: There is an "Other" categorization on cgit, but we do not have a
DOAP category for it. If your module does not belong to one of these
groups, then do not include a category property in your DOAP file.
-->
<category rdf:resource="http://api.gnome.org/doap-extensions#development" />
<!-- <maintainer>
<maintainer>
<foaf:Person>
<foaf:name>Tristan Van Berkom</foaf:name>
<foaf:mbox rdf:resource="mailto:tristan.van.berkom@gmail.com" />
<gnome:userid>tvb</gnome:userid>
</foaf:Person>
</maintainer> -->
</maintainer>
<maintainer>
<foaf:Person>
<foaf:name>Juan Pablo Ugarte</foaf:name>
@ -30,11 +43,4 @@
<gnome:userid>jpu</gnome:userid>
</foaf:Person>
</maintainer>
<maintainer>
<foaf:Person>
<foaf:name>Alberto Fanjul Alonso</foaf:name>
<foaf:mbox rdf:resource="mailto:albfan@gnome.org" />
<gnome:userid>albfan</gnome:userid>
</foaf:Person>
</maintainer>
</Project>

285
gladeui/Makefile.am Normal file
View File

@ -0,0 +1,285 @@
## Previewer
include $(top_srcdir)/glade-rules.mk
bin_PROGRAMS = glade-previewer
lib_LTLIBRARIES = libgladeui-2.la
glade_previewer_CPPFLAGS = \
-I$(top_srcdir) \
-I$(top_builddir) \
-DGLADE_GNOMEHELPDIR="\"$(HELP_DIR)\"" \
$(GTK_CFLAGS) \
$(GTK_MAC_CFLAGS) \
$(WARN_CFLAGS) \
$(GLADE_DEBUG_FLAGS) \
$(AM_CPPFLAGS)
glade_previewer_CFLAGS = \
$(AM_CFLAGS)
glade_previewer_LDFLAGS = $(AM_LDFLAGS)
glade_previewer_LDADD = libgladeui-2.la $(GTK_MAC_LIBS)
glade_previewer_SOURCES = \
glade-previewer.c \
glade-preview-window.c \
glade-preview-template.c
if NATIVE_WIN32
glade_previewer_LDADD += glade-win32-res.o
if !GLADE_UNSTABLE
glade_previewer_LDFLAGS += -mwindows
endif
endif
glade-win32-res.o: glade-previewer.rc
$(WINDRES) $< $@
## Rest of the UI ;)
common_defines = \
-DG_LOG_DOMAIN=\"GladeUI\" \
-DGLADE_CATALOGSDIR="\"$(pkgdatadir)/catalogs\""\
-DGLADE_MODULESDIR="\"$(pkglibdir)/modules\"" \
-DGLADE_PIXMAPSDIR="\"$(pkgdatadir)/pixmaps\"" \
-DGLADE_LOCALEDIR="\"$(datadir)/locale\""\
-DGLADE_BINDIR="\"$(bindir)\""\
-DGLADE_LIBDIR="\"$(libdir)\""
BUILT_SOURCES = \
glade-marshallers.c \
glade-marshallers.h \
gladeui-resources.c \
gladeui-resources.h \
gladeui-enum-types.c \
gladeui-enum-types.h
UI_FILES = \
glade-editor.ui \
glade-project-properties.ui \
glade-property-label.ui
GRAPHICS_FILES = \
atk.png
EXTRA_DIST = \
$(UI_FILES) \
$(GRAPHICS_FILES) \
glade-marshallers.list \
gladeui.rc.in \
icon-naming-spec.c \
glade-previewer.rc.in \
gladeui-resources.gresource.xml \
gladeui-enum-types.c.template \
gladeui-enum-types.h.template
# The glade core library
libgladeui_2_la_SOURCES = \
$(BUILT_SOURCES) \
glade-accumulators.c \
glade-app.c \
glade-base-editor.c \
glade-builtins.c \
glade-catalog.c \
glade-cell-renderer-icon.c \
glade-clipboard.c \
glade-command.c \
glade-cursor.c \
glade-debug.c \
glade-design-layout.c \
glade-design-view.c \
glade-displayable-values.c \
glade-editable.c \
glade-editor.c \
glade-editor-property.c \
glade-editor-skeleton.c \
glade-editor-table.c \
glade-id-allocator.c \
glade-id-allocator.h \
glade-object-stub.c \
glade-inspector.c \
glade-name-context.c \
glade-named-icon-chooser-dialog.c \
glade-named-icon-chooser-dialog.h \
glade-palette.c \
glade-placeholder.c \
glade-popup.c \
glade-preview.c \
glade-project.c \
glade-project-properties.c \
glade-property.c \
glade-property-class.c \
glade-property-label.c \
glade-property-shell.c \
glade-signal.c \
glade-signal-class.c \
glade-signal-editor.c \
glade-signal-model.c \
glade-tsort.c \
glade-utils.c \
glade-widget.c \
glade-widget-action.c \
glade-widget-adaptor.c \
glade-xml-utils.c \
glade-drag.c \
glade-dnd.c
libgladeui_2_la_CPPFLAGS = \
$(common_defines) \
-I$(top_srcdir) \
-I$(top_builddir) \
$(GTK_CFLAGS) \
$(GTK_MAC_BUNDLE_FLAG) \
$(GTK_MAC_CFLAGS) \
$(WARN_CFLAGS) \
$(GLADE_DEBUG_FLAGS) \
$(AM_CPPFLAGS)
libgladeui_2_la_CFLAGS = \
$(AM_CFLAGS)
libgladeui_2_la_LDFLAGS = -version-info $(GLADE_CURRENT):$(GLADE_REVISION):$(GLADE_AGE) $(AM_LDFLAGS)
libgladeui_2_la_LIBADD = $(GTK_LIBS) $(GTK_MAC_LIBS)
libgladeuiincludedir=$(includedir)/libgladeui-2.0/gladeui
libgladeuiinclude_HEADERS = \
glade.h \
glade-app.h \
glade-base-editor.h \
glade-builtins.h \
glade-catalog.h \
glade-cell-renderer-icon.h \
glade-clipboard.h \
glade-command.h \
glade-cursor.h \
glade-debug.h \
glade-design-view.h \
glade-displayable-values.h \
glade-editable.h \
glade-editor.h \
glade-editor-property.h \
glade-editor-skeleton.h \
glade-editor-table.h \
glade-inspector.h \
glade-name-context.h \
glade-palette.h \
glade-placeholder.h \
glade-project.h \
glade-property.h \
glade-property-class.h \
glade-property-label.h \
glade-property-shell.h \
glade-signal.h \
glade-signal-class.h \
glade-signal-editor.h \
glade-signal-model.h \
glade-utils.h \
glade-widget.h \
glade-widget-action.h \
glade-widget-adaptor.h \
glade-xml-utils.h
noinst_HEADERS = \
glade-accumulators.h \
glade-design-layout.h \
glade-design-private.h \
glade-marshallers.h \
glade-object-stub.h \
glade-path.h \
glade-popup.h \
glade-preview.h \
glade-preview-tokens.h \
glade-preview-window.h \
glade-preview-template.h \
glade-private.h \
glade-project-properties.h \
glade-tsort.h \
gladeui-resources.h \
glade-drag.h \
glade-dnd.h \
glade-widget-private.h
if PLATFORM_WIN32
libgladeui_2_la_LDFLAGS += -no-undefined
endif
if NATIVE_WIN32
# gmodule-export-2.0 on windows does not include -export-dynamic flag
libgladeui_2_la_LDFLAGS += \
-Wl,gladeui-win32-res.o \
-export-dynamic
libgladeui_2_la_DEPENDENCIES = gladeui-win32-res.o
endif
gladeui-win32-res.o: gladeui.rc
$(WINDRES) $< $@
#
# Marshaller generation
#
glade-marshallers.h: glade-marshallers.list $(GLIB_GENMARSHAL)
$(GLIB_GENMARSHAL) --prefix=_glade_marshal $(srcdir)/glade-marshallers.list --header > glade-marshallers-h.tmp \
&& mv glade-marshallers-h.tmp glade-marshallers.h \
|| ( rm -f glade-marshallers-h.tmp && exit 1)
glade-marshallers.c: glade-marshallers.list $(GLIB_GENMARSHAL)
$(GLIB_GENMARSHAL) --prefix=_glade_marshal $(srcdir)/glade-marshallers.list --body --header > glade-marshallers-c.tmp \
&& mv glade-marshallers-c.tmp glade-marshallers.c \
|| ( rm -f glade-marshallers-c.tmp && exit 1 )
#
# Enum type generation
#
gladeui-enum-types.h: gladeui-enum-types.h.template $(libgladeuiinclude_HEADERS) $(GLIB_MKENUMS)
$(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $@.template \
$(libgladeuiinclude_HEADERS)) > $@
gladeui-enum-types.c: gladeui-enum-types.c.template $(libgladeuiinclude_HEADERS) $(GLIB_MKENUMS)
$(AM_V_GEN) (cd $(srcdir) && $(GLIB_MKENUMS) --template $@.template \
$(libgladeuiinclude_HEADERS)) > $@
CLEANFILES = $(BUILT_SOURCES)
#
# Introspection generation
#
-include $(INTROSPECTION_MAKEFILE)
INTROSPECTION_GIRS =
INTROSPECTION_SCANNER_ARGS = \
--add-include-path=$(srcdir) \
--identifier-prefix=Glade \
--symbol-prefix=glade \
--pkg=gtk+-3.0 -I../ -I$(srcdir)/..
INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
if HAVE_INTROSPECTION
introspection_sources = $(libgladeui_2_la_SOURCES) $(libgladeuiinclude_HEADERS)
Gladeui-2.0.gir: libgladeui-2.la
Gladeui_2_0_gir_INCLUDES = Gtk-3.0
Gladeui_2_0_gir_CFLAGS = $(INCLUDES)
Gladeui_2_0_gir_LIBS = libgladeui-2.la
Gladeui_2_0_gir_FILES = $(introspection_sources)
INTROSPECTION_GIRS += Gladeui-2.0.gir
girdir = $(datadir)/gir-1.0
gir_DATA = $(INTROSPECTION_GIRS)
typelibdir = $(libdir)/girepository-1.0
typelib_DATA = $(INTROSPECTION_GIRS:.gir=.typelib)
CLEANFILES += $(gir_DATA) $(typelib_DATA)
endif
# Generate resources
gladeui-resources.h: gladeui-resources.gresource.xml $(UI_FILES) $(GRAPHICS_FILES)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/gladeui-resources.gresource.xml \
--target=$@ --sourcedir=$(srcdir) --c-name _gladeui --generate-header
gladeui-resources.c: gladeui-resources.gresource.xml $(UI_FILES) $(GRAPHICS_FILES)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/gladeui-resources.gresource.xml \
--target=$@ --sourcedir=$(srcdir) --c-name _gladeui --generate-source

View File

@ -18,7 +18,7 @@
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
* USA.
*/
@ -32,8 +32,7 @@
gboolean
_glade_single_object_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
const GValue *handler_return, gpointer dummy)
{
GObject *object = g_value_get_object (handler_return);
g_value_set_object (return_accu, object);
@ -77,8 +76,7 @@ _glade_boolean_handled_accumulator (GSignalInvocationHint *ihint,
gboolean
_glade_string_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
const GValue *handler_return, gpointer dummy)
{
const gchar *handler_str;
@ -106,8 +104,7 @@ _glade_strv_handled_accumulator (GSignalInvocationHint *ihint,
gboolean
_glade_stop_emission_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
const GValue *handler_return, gpointer dummy)
{
g_value_copy (handler_return, return_accu);

View File

@ -1,27 +1,3 @@
/*
* glade-clipboard.h
*
* Copyright (C) 2005 The GNOME Foundation.
*
* Author(s):
* Tristan Van Berkom <tvb@gnome.org>
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
* USA.
*/
#ifndef __GLADE_ACCUMULATORS_H__
#define __GLADE_ACCUMULATORS_H__

View File

@ -1,650 +0,0 @@
/*
* glade-adaptor-chooser-widget.c
*
* Copyright (C) 2014-2017 Juan Pablo Ugarte
*
* This library 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.1 of
* the License, or (at your option) any later version.
*
* This library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Authors:
* Juan Pablo Ugarte <juanpablougarte@gmail.com>
*/
#include "glade-app.h"
#include "glade-private.h"
#include "gladeui-enum-types.h"
#include "glade-adaptor-chooser-widget.h"
#include "glade-dnd.h"
#include <string.h>
enum
{
COLUMN_ADAPTOR = 0,
COLUMN_GROUP,
COLUMN_NORMALIZED_NAME,
COLUMN_NORMALIZED_NAME_LEN,
N_COLUMN
};
typedef struct __GladeAdaptorChooserWidgetPrivate _GladeAdaptorChooserWidgetPrivate;
struct __GladeAdaptorChooserWidgetPrivate
{
GtkTreeView *treeview;
GtkListStore *store;
GtkTreeModelFilter *treemodelfilter;
GtkSearchEntry *searchentry;
GtkEntryCompletion *entrycompletion;
GtkScrolledWindow *scrolledwindow;
/* Needed for gtk_tree_view_column_set_cell_data_func() */
GtkTreeViewColumn *column_icon;
GtkCellRenderer *icon_cell;
GtkTreeViewColumn *column_adaptor;
GtkCellRenderer *adaptor_cell;
/* Properties */
_GladeAdaptorChooserWidgetFlags flags;
GladeProject *project;
gboolean show_group_title;
gchar *search_text;
};
enum
{
PROP_0,
PROP_SHOW_FLAGS,
PROP_PROJECT,
PROP_SHOW_GROUP_TITLE
};
enum
{
ADAPTOR_SELECTED,
LAST_SIGNAL
};
static guint adaptor_chooser_signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE_WITH_PRIVATE (_GladeAdaptorChooserWidget, _glade_adaptor_chooser_widget, GTK_TYPE_BOX)
#define GET_PRIVATE(d) ((_GladeAdaptorChooserWidgetPrivate *) _glade_adaptor_chooser_widget_get_instance_private((_GladeAdaptorChooserWidget*)d))
static void
_glade_adaptor_chooser_widget_init (_GladeAdaptorChooserWidget *chooser)
{
gtk_widget_init_template (GTK_WIDGET (chooser));
}
static void
_glade_adaptor_chooser_widget_dispose (GObject *object)
{
_glade_adaptor_chooser_widget_set_project (GLADE_ADAPTOR_CHOOSER_WIDGET (object), NULL);
G_OBJECT_CLASS (_glade_adaptor_chooser_widget_parent_class)->dispose (object);
}
static void
_glade_adaptor_chooser_widget_finalize (GObject *object)
{
_GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (object);
g_clear_pointer (&priv->search_text, g_free);
G_OBJECT_CLASS (_glade_adaptor_chooser_widget_parent_class)->finalize (object);
}
static void
_glade_adaptor_chooser_widget_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
_GladeAdaptorChooserWidgetPrivate *priv;
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER_WIDGET (object));
priv = GET_PRIVATE (object);
switch (prop_id)
{
case PROP_SHOW_FLAGS:
priv->flags = g_value_get_flags (value);
break;
case PROP_PROJECT:
_glade_adaptor_chooser_widget_set_project (GLADE_ADAPTOR_CHOOSER_WIDGET (object),
g_value_get_object (value));
break;
case PROP_SHOW_GROUP_TITLE:
priv->show_group_title = g_value_get_boolean (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
_glade_adaptor_chooser_widget_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
_GladeAdaptorChooserWidgetPrivate *priv;
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER_WIDGET (object));
priv = GET_PRIVATE (object);
switch (prop_id)
{
case PROP_SHOW_FLAGS:
g_value_set_flags (value, priv->flags);
break;
case PROP_PROJECT:
g_value_set_object (value, priv->project);
break;
case PROP_SHOW_GROUP_TITLE:
g_value_set_boolean (value, priv->show_group_title);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static inline gchar *
normalize_name (const gchar *name)
{
gchar *normalized_name = g_utf8_normalize (name, -1, G_NORMALIZE_DEFAULT);
gchar *casefold_name = g_utf8_casefold (normalized_name, -1);
g_free (normalized_name);
return casefold_name;
}
static inline void
store_append_adaptor (GtkListStore *store, GladeWidgetAdaptor *adaptor)
{
gchar *normalized_name = normalize_name (glade_widget_adaptor_get_display_name (adaptor));
gtk_list_store_insert_with_values (store, NULL, -1,
COLUMN_ADAPTOR, adaptor,
COLUMN_NORMALIZED_NAME, normalized_name,
COLUMN_NORMALIZED_NAME_LEN, strlen (normalized_name),
-1);
g_free (normalized_name);
}
static void
on_treeview_row_activated (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column,
_GladeAdaptorChooserWidget *chooser)
{
GtkTreeModel *model = gtk_tree_view_get_model (tree_view);
GtkTreeIter iter;
if (gtk_tree_model_get_iter (model, &iter, path))
{
GladeWidgetAdaptor *adaptor;
gtk_tree_model_get (model, &iter, COLUMN_ADAPTOR, &adaptor, -1);
if (!adaptor)
return;
/* Emit selected signal */
g_signal_emit (chooser, adaptor_chooser_signals[ADAPTOR_SELECTED], 0, adaptor);
g_object_unref (adaptor);
}
}
static void
on_searchentry_search_changed (GtkEntry *entry,
_GladeAdaptorChooserWidget *chooser)
{
_GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (chooser);
const gchar *text = gtk_entry_get_text (entry);
g_clear_pointer (&priv->search_text, g_free);
if (g_utf8_strlen (text, -1))
priv->search_text = normalize_name (text);
gtk_tree_model_filter_refilter (priv->treemodelfilter);
}
static void
on_searchentry_activate (GtkEntry *entry, _GladeAdaptorChooserWidget *chooser)
{
_GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (chooser);
const gchar *text = gtk_entry_get_text (entry);
GladeWidgetAdaptor *adaptor;
/* try to find an adaptor by name */
if (!(adaptor = glade_widget_adaptor_get_by_name (text)))
{
GtkTreeModel *model = GTK_TREE_MODEL (priv->treemodelfilter);
gchar *normalized_name = normalize_name (text);
GtkTreeIter iter;
gboolean valid;
gint count = 0;
valid = gtk_tree_model_get_iter_first (model, &iter);
/* we could not find it check if we can find it by normalized name */
while (valid)
{
gchar *name;
gtk_tree_model_get (model, &iter, COLUMN_NORMALIZED_NAME, &name, -1);
if (g_strcmp0 (name, normalized_name) == 0)
{
gtk_tree_model_get (model, &iter, COLUMN_ADAPTOR, &adaptor, -1);
g_free (name);
break;
}
valid = gtk_tree_model_iter_next (model, &iter);
g_free (name);
count++;
}
/* if not, and there is only one row, then we select that one */
if (!adaptor && count == 1 && gtk_tree_model_get_iter_first (model, &iter))
gtk_tree_model_get (model, &iter, COLUMN_ADAPTOR, &adaptor, -1);
g_free (normalized_name);
}
if (adaptor)
g_signal_emit (chooser, adaptor_chooser_signals[ADAPTOR_SELECTED], 0, adaptor);
}
static gboolean
chooser_match_func (_GladeAdaptorChooserWidget *chooser,
GtkTreeModel *model,
const gchar *key,
GtkTreeIter *iter)
{
gboolean visible;
gint name_len;
gchar *name;
if (!key || *key == '\0')
return TRUE;
gtk_tree_model_get (model, iter,
COLUMN_NORMALIZED_NAME, &name,
COLUMN_NORMALIZED_NAME_LEN, &name_len,
-1);
if (!name)
return FALSE;
visible = (g_strstr_len (name, name_len, key) != NULL);
g_free (name);
return visible;
}
static gboolean
treemodelfilter_visible_func (GtkTreeModel *model, GtkTreeIter *iter, gpointer data)
{
_GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (data);
GladeWidgetAdaptor *adaptor = NULL;
gboolean visible = TRUE;
gtk_tree_model_get (model, iter, COLUMN_ADAPTOR, &adaptor, -1);
if (!adaptor)
return priv->show_group_title && !priv->search_text;
/* Skip classes not available in project target version */
if (priv->project)
{
const gchar *catalog = NULL;
gint major, minor;
catalog = glade_widget_adaptor_get_catalog (adaptor);
glade_project_get_target_version (priv->project, catalog, &major, &minor);
visible = GLADE_WIDGET_ADAPTOR_VERSION_CHECK (adaptor, major, minor);
}
if (visible && priv->flags)
{
GType type = glade_widget_adaptor_get_object_type (adaptor);
_GladeAdaptorChooserWidgetFlags flags = priv->flags;
/* Skip adaptors according to flags */
if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_DEPRECATED && GLADE_WIDGET_ADAPTOR_DEPRECATED (adaptor))
visible = FALSE;
else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_TOPLEVEL && GLADE_WIDGET_ADAPTOR_IS_TOPLEVEL (adaptor))
visible = FALSE;
else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_WIDGET && !g_type_is_a (type, GTK_TYPE_WIDGET))
visible = FALSE;
else if (flags & GLADE_ADAPTOR_CHOOSER_WIDGET_TOPLEVEL && !GLADE_WIDGET_ADAPTOR_IS_TOPLEVEL (adaptor))
visible = FALSE;
}
if (visible && priv->search_text)
visible = chooser_match_func (data, model, priv->search_text, iter);
g_clear_object (&adaptor);
return visible;
}
static gboolean
entrycompletion_match_func (GtkEntryCompletion *entry, const gchar *key, GtkTreeIter *iter, gpointer data)
{
return chooser_match_func (data, gtk_entry_completion_get_model (entry), key, iter);
}
static void
adaptor_icon_cell_data_func (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
{
GladeWidgetAdaptor *adaptor;
gtk_tree_model_get (tree_model, iter, COLUMN_ADAPTOR, &adaptor, -1);
if (adaptor)
g_object_set (cell, "sensitive", TRUE, "icon-name", glade_widget_adaptor_get_icon_name (adaptor), NULL);
else
g_object_set (cell, "sensitive", FALSE, "icon-name", "go-down-symbolic", NULL);
g_clear_object (&adaptor);
}
static void
adaptor_text_cell_data_func (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
{
GladeWidgetAdaptor *adaptor;
gchar *group;
gtk_tree_model_get (tree_model, iter,
COLUMN_ADAPTOR, &adaptor,
COLUMN_GROUP, &group,
-1);
if (adaptor)
g_object_set (cell,
"sensitive", TRUE,
"text", glade_widget_adaptor_get_display_name (adaptor),
"style", PANGO_STYLE_NORMAL,
NULL);
else
g_object_set (cell,
"sensitive", FALSE,
"text", group,
"style", PANGO_STYLE_ITALIC,
NULL);
g_clear_object (&adaptor);
g_free (group);
}
static void
glade_adaptor_chooser_widget_drag_begin (GtkWidget *widget,
GdkDragContext *context,
gpointer data)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
GtkTreeModel *model;
GtkTreeIter iter;
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
GladeWidgetAdaptor *adaptor;
gtk_tree_model_get (model, &iter, COLUMN_ADAPTOR, &adaptor, -1);
_glade_dnd_set_icon_widget (context,
glade_widget_adaptor_get_icon_name (adaptor),
glade_widget_adaptor_get_display_name (adaptor));
}
}
static void
glade_adaptor_chooser_widget_drag_data_get (GtkWidget *widget,
GdkDragContext *context,
GtkSelectionData *data,
guint info,
guint time,
gpointer userdata)
{
GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
GtkTreeModel *model;
GtkTreeIter iter;
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
GladeWidgetAdaptor *adaptor;
gtk_tree_model_get (model, &iter, COLUMN_ADAPTOR, &adaptor, -1);
_glade_dnd_set_data (data, G_OBJECT (adaptor));
}
}
static void
_glade_adaptor_chooser_widget_constructed (GObject *object)
{
_GladeAdaptorChooserWidget *chooser = GLADE_ADAPTOR_CHOOSER_WIDGET (object);
_GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (chooser);
/* Set cell data function: this save us from alocating name and icon name for each adaptor. */
gtk_tree_view_column_set_cell_data_func (priv->column_icon,
priv->icon_cell,
adaptor_icon_cell_data_func,
NULL, NULL);
gtk_tree_view_column_set_cell_data_func (priv->column_adaptor,
priv->adaptor_cell,
adaptor_text_cell_data_func,
NULL, NULL);
/* Set tree model filter function */
gtk_tree_model_filter_set_visible_func (priv->treemodelfilter,
treemodelfilter_visible_func,
chooser, NULL);
/* Set completion match function */
gtk_entry_completion_set_match_func (priv->entrycompletion,
entrycompletion_match_func,
chooser, NULL);
/* Enable Drag & Drop */
gtk_tree_view_enable_model_drag_source (priv->treeview, GDK_BUTTON1_MASK,
_glade_dnd_get_target (), 1, GDK_ACTION_MOVE | GDK_ACTION_COPY);
g_signal_connect_after (priv->treeview, "drag-begin",
G_CALLBACK (glade_adaptor_chooser_widget_drag_begin),
NULL);
g_signal_connect (priv->treeview, "drag-data-get",
G_CALLBACK (glade_adaptor_chooser_widget_drag_data_get),
NULL);
}
static void
_glade_adaptor_chooser_widget_map (GtkWidget *widget)
{
GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
if (toplevel)
{
_GladeAdaptorChooserWidgetPrivate *priv = GET_PRIVATE (widget);
gint height = gtk_widget_get_allocated_height (toplevel) - 100;
if (height > 512)
height = height * 0.75;
gtk_scrolled_window_set_max_content_height (priv->scrolledwindow, height);
}
GTK_WIDGET_CLASS (_glade_adaptor_chooser_widget_parent_class)->map (widget);
}
static GType
_glade_adaptor_chooser_widget_flags_get_type (void)
{
static GType etype = 0;
if (G_UNLIKELY(etype == 0)) {
static const GFlagsValue values[] = {
{ GLADE_ADAPTOR_CHOOSER_WIDGET_WIDGET, "GLADE_ADAPTOR_CHOOSER_WIDGET_WIDGET", "widget" },
{ GLADE_ADAPTOR_CHOOSER_WIDGET_TOPLEVEL, "GLADE_ADAPTOR_CHOOSER_WIDGET_TOPLEVEL", "toplevel" },
{ GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_TOPLEVEL, "GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_TOPLEVEL", "skip-toplevel" },
{ GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_DEPRECATED, "GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_DEPRECATED", "skip-deprecated" },
{ 0, NULL, NULL }
};
etype = g_flags_register_static (g_intern_static_string ("_GladeAdaptorChooserWidgetFlag"), values);
}
return etype;
}
static void
_glade_adaptor_chooser_widget_class_init (_GladeAdaptorChooserWidgetClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->dispose = _glade_adaptor_chooser_widget_dispose;
object_class->finalize = _glade_adaptor_chooser_widget_finalize;
object_class->set_property = _glade_adaptor_chooser_widget_set_property;
object_class->get_property = _glade_adaptor_chooser_widget_get_property;
object_class->constructed = _glade_adaptor_chooser_widget_constructed;
widget_class->map = _glade_adaptor_chooser_widget_map;
g_object_class_install_property (object_class,
PROP_SHOW_FLAGS,
g_param_spec_flags ("show-flags",
"Show flags",
"Widget adaptors show flags",
_glade_adaptor_chooser_widget_flags_get_type (),
0,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
PROP_SHOW_GROUP_TITLE,
g_param_spec_boolean ("show-group-title",
"Show group title",
"Whether to show the group title",
FALSE,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
g_object_class_install_property (object_class,
PROP_PROJECT,
g_param_spec_object ("project",
"Glade Project",
"If set, use project target version to skip unsupported classes",
GLADE_TYPE_PROJECT,
G_PARAM_READWRITE));
adaptor_chooser_signals[ADAPTOR_SELECTED] =
g_signal_new ("adaptor-selected", G_OBJECT_CLASS_TYPE (klass), 0, 0,
NULL, NULL, NULL,
G_TYPE_NONE, 1,
GLADE_TYPE_WIDGET_ADAPTOR);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/gladeui/glade-adaptor-chooser-widget.ui");
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, treeview);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, store);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, treemodelfilter);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, searchentry);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, entrycompletion);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, column_icon);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, icon_cell);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, column_adaptor);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, adaptor_cell);
gtk_widget_class_bind_template_child_private (widget_class, _GladeAdaptorChooserWidget, scrolledwindow);
gtk_widget_class_bind_template_callback (widget_class, on_treeview_row_activated);
gtk_widget_class_bind_template_callback (widget_class, on_searchentry_search_changed);
gtk_widget_class_bind_template_callback (widget_class, on_searchentry_activate);
}
GtkWidget *
_glade_adaptor_chooser_widget_new (_GladeAdaptorChooserWidgetFlags flags, GladeProject *project)
{
return GTK_WIDGET (g_object_new (GLADE_TYPE_ADAPTOR_CHOOSER_WIDGET,
"show-flags", flags,
"project", project,
NULL));
}
void
_glade_adaptor_chooser_widget_set_project (_GladeAdaptorChooserWidget *chooser,
GladeProject *project)
{
_GladeAdaptorChooserWidgetPrivate *priv;
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER_WIDGET (chooser));
priv = GET_PRIVATE (chooser);
if (priv->project)
{
g_object_remove_weak_pointer (G_OBJECT (priv->project), (gpointer *) &priv->project);
priv->project = NULL;
}
if (project)
{
priv->project = project;
g_object_add_weak_pointer (G_OBJECT (project), (gpointer *) &priv->project);
gtk_tree_model_filter_refilter (priv->treemodelfilter);
}
}
void
_glade_adaptor_chooser_widget_populate (_GladeAdaptorChooserWidget *chooser)
{
GList *l;
for (l = glade_app_get_catalogs (); l; l = g_list_next (l))
_glade_adaptor_chooser_widget_add_catalog (chooser, l->data);
}
void
_glade_adaptor_chooser_widget_add_catalog (_GladeAdaptorChooserWidget *chooser,
GladeCatalog *catalog)
{
GList *groups;
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER_WIDGET (chooser));
for (groups = glade_catalog_get_widget_groups (catalog); groups;
groups = g_list_next (groups))
_glade_adaptor_chooser_widget_add_group (chooser, groups->data);
}
void
_glade_adaptor_chooser_widget_add_group (_GladeAdaptorChooserWidget *chooser,
GladeWidgetGroup *group)
{
_GladeAdaptorChooserWidgetPrivate *priv;
const GList *adaptors;
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER_WIDGET (chooser));
priv = GET_PRIVATE (chooser);
if (priv->show_group_title)
gtk_list_store_insert_with_values (priv->store, NULL, -1,
COLUMN_GROUP, glade_widget_group_get_title (group),
-1);
for (adaptors = glade_widget_group_get_adaptors (group); adaptors;
adaptors = g_list_next (adaptors))
store_append_adaptor (priv->store, adaptors->data);
}

View File

@ -1,64 +0,0 @@
/*
* glade-adaptor-chooser-widget.h
*
* Copyright (C) 2014-2017 Juan Pablo Ugarte
*
* This library 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.1 of
* the License, or (at your option) any later version.
*
* This library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Authors:
* Juan Pablo Ugarte <juanpablougarte@gmail.com>
*/
#ifndef _GLADE_ADAPTOR_CHOOSER_WIDGET_H_
#define _GLADE_ADAPTOR_CHOOSER_WIDGET_H_
#include <gladeui/glade-widget-adaptor.h>
G_BEGIN_DECLS
#define GLADE_TYPE_ADAPTOR_CHOOSER_WIDGET _glade_adaptor_chooser_widget_get_type ()
G_DECLARE_DERIVABLE_TYPE (_GladeAdaptorChooserWidget, _glade_adaptor_chooser_widget, GLADE, ADAPTOR_CHOOSER_WIDGET, GtkBox)
typedef enum
{
GLADE_ADAPTOR_CHOOSER_WIDGET_WIDGET = 1 << 0,
GLADE_ADAPTOR_CHOOSER_WIDGET_TOPLEVEL = 1 << 1,
GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_TOPLEVEL = 1 << 2,
GLADE_ADAPTOR_CHOOSER_WIDGET_SKIP_DEPRECATED = 1 << 3
} _GladeAdaptorChooserWidgetFlags;
struct __GladeAdaptorChooserWidgetClass
{
GtkBoxClass parent_class;
};
GtkWidget *_glade_adaptor_chooser_widget_new (_GladeAdaptorChooserWidgetFlags flags,
GladeProject *project);
void _glade_adaptor_chooser_widget_set_project (_GladeAdaptorChooserWidget *chooser,
GladeProject *project);
void _glade_adaptor_chooser_widget_populate (_GladeAdaptorChooserWidget *chooser);
void _glade_adaptor_chooser_widget_add_catalog (_GladeAdaptorChooserWidget *chooser,
GladeCatalog *catalog);
void _glade_adaptor_chooser_widget_add_group (_GladeAdaptorChooserWidget *chooser,
GladeWidgetGroup *group);
G_END_DECLS
#endif /* _GLADE_ADAPTOR_CHOOSER_WIDGET_H_ */

View File

@ -1,96 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.21.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkListStore" id="store">
<columns>
<!-- column-name adaptor -->
<column type="GObject"/>
<!-- column-name group -->
<column type="gchararray"/>
<!-- column-name normalized-name -->
<column type="gchararray"/>
<!-- column-name normalized-name-len -->
<column type="gint"/>
</columns>
</object>
<object class="GtkTreeModelFilter" id="treemodelfilter">
<property name="child_model">store</property>
</object>
<object class="GtkEntryCompletion" id="entrycompletion">
<property name="model">treemodelfilter</property>
<property name="text_column">1</property>
<property name="inline_completion">True</property>
<property name="popup_completion">False</property>
<property name="popup_single_match">False</property>
</object>
<template class="_GladeAdaptorChooserWidget" parent="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">6</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
<object class="GtkSearchEntry" id="searchentry">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="primary_icon_name">edit-find-symbolic</property>
<property name="primary_icon_activatable">False</property>
<property name="primary_icon_sensitive">False</property>
<property name="completion">entrycompletion</property>
<property name="input_hints">GTK_INPUT_HINT_WORD_COMPLETION | GTK_INPUT_HINT_NONE</property>
<signal name="activate" handler="on_searchentry_activate" swapped="no"/>
<signal name="search-changed" handler="on_searchentry_search_changed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">never</property>
<property name="shadow_type">in</property>
<property name="max_content_height">512</property>
<property name="propagate_natural_width">True</property>
<property name="propagate_natural_height">True</property>
<child>
<object class="GtkTreeView" id="treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">treemodelfilter</property>
<property name="headers_visible">False</property>
<property name="enable_search">False</property>
<property name="activate_on_single_click">True</property>
<signal name="row-activated" handler="on_treeview_row_activated" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="column_icon">
<child>
<object class="GtkCellRendererPixbuf" id="icon_cell"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="column_adaptor">
<child>
<object class="GtkCellRendererText" id="adaptor_cell"/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</template>
</interface>

View File

@ -1,436 +0,0 @@
/*
* glade-adaptor-chooser.c
*
* Copyright (C) 2017 Juan Pablo Ugarte
*
* This library 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.1 of
* the License, or (at your option) any later version.
*
* This library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Authors:
* Juan Pablo Ugarte <juanpablougarte@gmail.com>
*/
#include "glade-adaptor-chooser-widget.h"
#include "glade-adaptor-chooser.h"
#include "glade-app.h"
typedef struct
{
GladeProject *project;
GtkWidget *gtk_button_box;
GtkWidget *extra_button;
GtkWidget *others_button;
GtkImage *class_image;
GtkLabel *class_label;
GtkWidget *all_button;
GtkWidget *others_chooser;
GtkWidget *all_chooser;
GList *choosers;
gboolean needs_update;
} GladeAdaptorChooserPrivate;
struct _GladeAdaptorChooser
{
GtkBox parent_instance;
};
enum
{
PROP_0,
PROP_PROJECT,
N_PROPERTIES
};
static GParamSpec *properties[N_PROPERTIES];
G_DEFINE_TYPE_WITH_PRIVATE (GladeAdaptorChooser,
glade_adaptor_chooser,
GTK_TYPE_BOX);
#define GET_PRIVATE(d) ((GladeAdaptorChooserPrivate *) glade_adaptor_chooser_get_instance_private((GladeAdaptorChooser*)d))
static void
glade_adaptor_chooser_init (GladeAdaptorChooser *chooser)
{
gtk_widget_init_template (GTK_WIDGET (chooser));
}
static void
glade_adaptor_chooser_finalize (GObject *object)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (object);
g_list_free (priv->choosers);
G_OBJECT_CLASS (glade_adaptor_chooser_parent_class)->finalize (object);
}
static void
glade_adaptor_chooser_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER (object));
switch (prop_id)
{
case PROP_PROJECT:
glade_adaptor_chooser_set_project (GLADE_ADAPTOR_CHOOSER (object),
g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
glade_adaptor_chooser_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GladeAdaptorChooserPrivate *priv;
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER (object));
priv = GET_PRIVATE (object);
switch (prop_id)
{
case PROP_PROJECT:
g_value_set_object (value, priv->project);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
on_adaptor_selected (GtkWidget *widget,
GladeWidgetAdaptor *adaptor,
GladeAdaptorChooser *chooser)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
/* Auto-create toplevel types */
if (GLADE_WIDGET_ADAPTOR_IS_TOPLEVEL (adaptor))
{
glade_command_create (adaptor, NULL, NULL, priv->project);
}
else
{
glade_project_set_add_item (priv->project, adaptor);
glade_project_set_pointer_mode (priv->project, GLADE_POINTER_ADD_WIDGET);
}
gtk_popover_popdown (GTK_POPOVER (gtk_widget_get_parent (widget)));
}
static void
glade_adaptor_chooser_button_add_chooser (GtkWidget *button, GtkWidget *chooser)
{
GtkPopover *popover = gtk_menu_button_get_popover (GTK_MENU_BUTTON (button));
if (!popover)
{
popover = GTK_POPOVER (gtk_popover_new (button));
gtk_menu_button_set_popover (GTK_MENU_BUTTON (button),
GTK_WIDGET (popover));
}
gtk_container_add (GTK_CONTAINER (popover), chooser);
gtk_widget_show (chooser);
}
static GtkWidget *
glade_adaptor_chooser_add_chooser (GladeAdaptorChooser *chooser,
gboolean show_group_title)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
GtkWidget *chooser_widget = g_object_new (GLADE_TYPE_ADAPTOR_CHOOSER_WIDGET,
"show-group-title", show_group_title,
NULL);
priv->choosers = g_list_prepend (priv->choosers, chooser_widget);
g_signal_connect (chooser_widget, "adaptor-selected",
G_CALLBACK (on_adaptor_selected),
chooser);
return chooser_widget;
}
static void
button_box_populate_from_catalog (GladeAdaptorChooser *chooser,
GladeCatalog *catalog)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
GtkWidget *extra_chooser = NULL;
GList *groups;
groups = glade_catalog_get_widget_groups (catalog);
gtk_box_set_homogeneous (GTK_BOX (priv->gtk_button_box), FALSE);
for (; groups; groups = g_list_next (groups))
{
GladeWidgetGroup *group = GLADE_WIDGET_GROUP (groups->data);
if (!glade_widget_group_get_adaptors (group))
continue;
if (glade_widget_group_get_expanded (group))
{
GtkWidget *button, *chooser_widget;
chooser_widget = glade_adaptor_chooser_add_chooser (chooser, FALSE);
button = gtk_menu_button_new ();
gtk_button_set_label (GTK_BUTTON (button), glade_widget_group_get_title (group));
glade_adaptor_chooser_button_add_chooser (button, chooser_widget);
_glade_adaptor_chooser_widget_add_group (GLADE_ADAPTOR_CHOOSER_WIDGET (chooser_widget), group);
gtk_box_pack_start (GTK_BOX (priv->gtk_button_box), button, FALSE, FALSE, 0);
gtk_widget_show (button);
}
else
{
if (!extra_chooser)
{
extra_chooser = glade_adaptor_chooser_add_chooser (chooser, TRUE);
glade_adaptor_chooser_button_add_chooser (priv->extra_button, extra_chooser);
gtk_widget_show (priv->extra_button);
}
_glade_adaptor_chooser_widget_add_group (GLADE_ADAPTOR_CHOOSER_WIDGET (extra_chooser), group);
}
}
}
static void
remove_chooser_widget (GladeAdaptorChooser *chooser, GtkWidget *widget)
{
if (widget)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
priv->choosers = g_list_remove (priv->choosers, widget);
gtk_widget_destroy (widget);
}
}
static void
update_all_others_chooser (GladeAdaptorChooser *chooser)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
GladeCatalog *gtk_catalog;
GList *l;
priv->needs_update = FALSE;
gtk_catalog = glade_app_get_catalog ("gtk+");
remove_chooser_widget (chooser, priv->others_chooser);
remove_chooser_widget (chooser, priv->all_chooser);
priv->others_chooser = glade_adaptor_chooser_add_chooser (chooser, TRUE);
priv->all_chooser = glade_adaptor_chooser_add_chooser (chooser, TRUE);
glade_adaptor_chooser_button_add_chooser (priv->others_button, priv->others_chooser);
glade_adaptor_chooser_button_add_chooser (priv->all_button, priv->all_chooser);
/* then the rest */
for (l = glade_app_get_catalogs (); l; l = g_list_next (l))
{
GladeCatalog *catalog = l->data;
_glade_adaptor_chooser_widget_add_catalog (GLADE_ADAPTOR_CHOOSER_WIDGET (priv->all_chooser), catalog);
if (catalog != gtk_catalog)
_glade_adaptor_chooser_widget_add_catalog (GLADE_ADAPTOR_CHOOSER_WIDGET (priv->others_chooser), catalog);
}
_glade_adaptor_chooser_widget_set_project (GLADE_ADAPTOR_CHOOSER_WIDGET (priv->others_chooser), priv->project);
_glade_adaptor_chooser_widget_set_project (GLADE_ADAPTOR_CHOOSER_WIDGET (priv->all_chooser), priv->project);
}
static void
on_widget_adaptor_registered (GladeApp *app,
GladeWidgetAdaptor *adaptor,
GladeAdaptorChooser *chooser)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
priv->needs_update = TRUE;
}
static void
on_button_clicked (GtkButton *button, GladeAdaptorChooser *chooser)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
if (priv->needs_update)
update_all_others_chooser (chooser);
}
static void
glade_adaptor_chooser_constructed (GObject *object)
{
GladeAdaptorChooser *chooser = GLADE_ADAPTOR_CHOOSER (object);
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
GladeCatalog *gtk_catalog;
/* GTK+ catalog goes first subdivided by group */
gtk_catalog = glade_app_get_catalog ("gtk+");
button_box_populate_from_catalog (chooser, gtk_catalog);
update_all_others_chooser (chooser);
g_signal_connect (glade_app_get(), "widget-adaptor-registered",
G_CALLBACK (on_widget_adaptor_registered),
chooser);
g_signal_connect (priv->others_button, "clicked",
G_CALLBACK (on_button_clicked),
chooser);
g_signal_connect (priv->all_button, "clicked",
G_CALLBACK (on_button_clicked),
chooser);
}
static void
glade_adaptor_chooser_class_init (GladeAdaptorChooserClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->finalize = glade_adaptor_chooser_finalize;
object_class->constructed = glade_adaptor_chooser_constructed;
object_class->set_property = glade_adaptor_chooser_set_property;
object_class->get_property = glade_adaptor_chooser_get_property;
/* Properties */
properties[PROP_PROJECT] =
g_param_spec_object ("project", "Project",
"This adaptor chooser's current project",
GLADE_TYPE_PROJECT,
G_PARAM_READWRITE);
g_object_class_install_properties (object_class, N_PROPERTIES, properties);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/gladeui/glade-adaptor-chooser.ui");
gtk_widget_class_bind_template_child_private (widget_class, GladeAdaptorChooser, gtk_button_box);
gtk_widget_class_bind_template_child_private (widget_class, GladeAdaptorChooser, extra_button);
gtk_widget_class_bind_template_child_private (widget_class, GladeAdaptorChooser, others_button);
gtk_widget_class_bind_template_child_private (widget_class, GladeAdaptorChooser, class_image);
gtk_widget_class_bind_template_child_private (widget_class, GladeAdaptorChooser, class_label);
gtk_widget_class_bind_template_child_private (widget_class, GladeAdaptorChooser, all_button);
}
/* Public API */
/**
* glade_adaptor_chooser_new:
*
* Returns: (transfer full): A new #GladeAdaptorChooser
*/
GtkWidget *
glade_adaptor_chooser_new ()
{
return (GtkWidget*) g_object_new (GLADE_TYPE_ADAPTOR_CHOOSER, NULL);
}
static void
glade_adaptor_chooser_update_adaptor (GladeAdaptorChooser *chooser)
{
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
GladeWidgetAdaptor *adaptor;
if (priv->project && (adaptor = glade_project_get_add_item (priv->project)))
{
gtk_image_set_from_icon_name (priv->class_image,
glade_widget_adaptor_get_icon_name (adaptor),
GTK_ICON_SIZE_BUTTON);
gtk_label_set_label (priv->class_label,
glade_widget_adaptor_get_display_name (adaptor));
}
else
{
gtk_image_set_from_pixbuf (priv->class_image, NULL);
gtk_label_set_label (priv->class_label, "");
}
}
static void
on_project_weak_notify (gpointer data, GObject *project)
{
GladeAdaptorChooser *chooser = data;
GladeAdaptorChooserPrivate *priv = GET_PRIVATE (chooser);
priv->project = NULL;
}
void
glade_adaptor_chooser_set_project (GladeAdaptorChooser *chooser,
GladeProject *project)
{
GladeAdaptorChooserPrivate *priv;
GList *l;
g_return_if_fail (GLADE_IS_ADAPTOR_CHOOSER (chooser));
priv = GET_PRIVATE (chooser);
if (priv->project)
{
g_signal_handlers_disconnect_by_func (G_OBJECT (priv->project),
G_CALLBACK (glade_adaptor_chooser_update_adaptor),
chooser);
g_object_weak_unref (G_OBJECT (priv->project), on_project_weak_notify, chooser);
priv->project = NULL;
}
if (project)
{
priv->project = project;
g_object_weak_ref (G_OBJECT (project), on_project_weak_notify, chooser);
g_signal_connect_swapped (G_OBJECT (project), "notify::add-item",
G_CALLBACK (glade_adaptor_chooser_update_adaptor),
chooser);
gtk_widget_set_sensitive (GTK_WIDGET (chooser), TRUE);
}
else
gtk_widget_set_sensitive (GTK_WIDGET (chooser), FALSE);
/* Set project in chooser for filter to work */
for (l = priv->choosers; l; l = g_list_next (l))
_glade_adaptor_chooser_widget_set_project (l->data, project);
/* Update class image and label */
glade_adaptor_chooser_update_adaptor (chooser);
}
/**
* glade_adaptor_chooser_get_project:
* @chooser: a #GladeAdaptorChooser
*
* Returns: (transfer full): A #GladeProject
*/
GladeProject *
glade_adaptor_chooser_get_project (GladeAdaptorChooser *chooser)
{
g_return_val_if_fail (GLADE_IS_ADAPTOR_CHOOSER (chooser), NULL);
return GET_PRIVATE (chooser)->project;
}

View File

@ -1,43 +0,0 @@
/*
* glade-adaptor-chooser.h
*
* Copyright (C) 2017 Juan Pablo Ugarte
*
* This library 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.1 of
* the License, or (at your option) any later version.
*
* This library 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* Authors:
* Juan Pablo Ugarte <juanpablougarte@gmail.com>
*/
#ifndef _GLADE_ADAPTOR_CHOOSER_H_
#define _GLADE_ADAPTOR_CHOOSER_H_
#include <gladeui/glade-widget-adaptor.h>
#include <gladeui/glade-project.h>
G_BEGIN_DECLS
#define GLADE_TYPE_ADAPTOR_CHOOSER (glade_adaptor_chooser_get_type ())
G_DECLARE_FINAL_TYPE (GladeAdaptorChooser, glade_adaptor_chooser, GLADE, ADAPTOR_CHOOSER, GtkBox)
GtkWidget *glade_adaptor_chooser_new (void);
void glade_adaptor_chooser_set_project (GladeAdaptorChooser *chooser,
GladeProject *project);
GladeProject *glade_adaptor_chooser_get_project (GladeAdaptorChooser *chooser);
G_END_DECLS
#endif /* _GLADE_ADAPTOR_CHOOSER_H_ */

View File

@ -1,114 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 -->
<interface domain="glade">
<requires lib="gtk+" version="3.20"/>
<template class="GladeAdaptorChooser" parent="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">4</property>
<child>
<object class="GtkMenuButton" id="all_button">
<property name="name">adaptor-search-button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">All available widgets and objects</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">edit-find-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkImage" id="class_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="class_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Click on a placeholder to create this class
(use middle button to create more than one)</property>
<property name="ellipsize">end</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkMenuButton" id="others_button">
<property name="name">adaptor-others-button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Non-GTK+ widgets and objects</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">view-more-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButtonBox" id="gtk_button_box">
<property name="name">adaptor-gtk-buttonbox</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">expand</property>
<child>
<object class="GtkMenuButton" id="extra_button">
<property name="name">adaptor-extra-button</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Extra GTK+ objects</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">pan-down-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">2</property>
<property name="non_homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">4</property>
</packing>
</child>
</template>
</interface>

View File

@ -47,7 +47,7 @@
#include <gdk/gdkkeysyms.h>
#include <gtk/gtk.h>
#ifdef MAC_BUNDLE
#ifdef MAC_INTEGRATION
# include <gtkosxapplication.h>
#endif
@ -61,7 +61,6 @@ enum
LAST_SIGNAL
};
typedef struct _GladeAppPrivate GladeAppPrivate;
struct _GladeAppPrivate
{
GtkWidget *window;
@ -122,7 +121,7 @@ glade_app_constructor (GType type,
static void
glade_app_dispose (GObject *app)
{
GladeAppPrivate *priv = glade_app_get_instance_private ((GladeApp *) app);
GladeAppPrivate *priv = GLADE_APP (app)->priv;
if (priv->clipboard)
{
@ -166,22 +165,22 @@ build_package_paths (void)
if (path)
pixmaps_dir = g_strdup (path);
#if defined (G_OS_WIN32) || defined (MAC_BUNDLE)
#if defined (G_OS_WIN32) || (defined (MAC_INTEGRATION) && defined (MAC_BUNDLE))
gchar *prefix;
# ifdef G_OS_WIN32
prefix = g_win32_get_package_installation_directory_of_module (NULL);
# else // defined (MAC_BUNDLE)
# else // defined (MAC_INTEGRATION) && defined (MAC_BUNDLE)
prefix = quartz_application_get_resource_path ();
# endif
if (!pixmaps_dir)
pixmaps_dir = g_build_filename (prefix, "share", PACKAGE_NAME, "pixmaps", NULL);
pixmaps_dir = g_build_filename (prefix, "share", PACKAGE, "pixmaps", NULL);
catalogs_dir = g_build_filename (prefix, "share", PACKAGE_NAME, "catalogs", NULL);
modules_dir = g_build_filename (prefix, "lib", PACKAGE_NAME, "modules", NULL);
catalogs_dir = g_build_filename (prefix, "share", PACKAGE, "catalogs", NULL);
modules_dir = g_build_filename (prefix, "lib", PACKAGE, "modules", NULL);
locale_dir = g_build_filename (prefix, "share", "locale", NULL);
bin_dir = g_build_filename (prefix, "bin", NULL);
lib_dir = g_build_filename (prefix, "lib", NULL);
@ -269,31 +268,36 @@ glade_app_get_lib_dir (void)
}
static void
pointer_mode_register_icon (const gchar *icon_name,
gint real_size,
pointer_mode_register_icon (GtkIconFactory *factory,
const gchar *icon_name,
GladePointerMode mode,
GtkIconSize size)
{
GdkPixbuf *pixbuf;
if ((pixbuf = glade_utils_pointer_mode_render_icon (mode, size)))
pixbuf = glade_utils_pointer_mode_render_icon (mode, size);
if (pixbuf)
{
gtk_icon_theme_add_builtin_icon (icon_name, real_size, pixbuf);
GtkIconSet *icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
gtk_icon_factory_add (factory, icon_name, icon_set);
g_object_unref (pixbuf);
}
}
static void
register_icon (const gchar *new_icon_name,
gint size,
register_stock_icon (GtkIconFactory *factory,
const gchar *stock_id,
const gchar *icon_name,
const gchar *file_name)
const gchar *file_name,
GtkIconSize size)
{
GtkIconTheme *icon_theme = gtk_icon_theme_get_default ();
GdkPixbuf *pixbuf;
GtkIconInfo *info;
gint w, h;
if ((info = gtk_icon_theme_lookup_icon (icon_theme, icon_name, size, 0)))
if (gtk_icon_size_lookup (size, &w, &h) &&
(info = gtk_icon_theme_lookup_icon (icon_theme, icon_name, MIN (w, h), 0)))
{
pixbuf = gtk_icon_info_load_icon (info, NULL);
}
@ -306,37 +310,36 @@ register_icon (const gchar *new_icon_name,
if (pixbuf)
{
gtk_icon_theme_add_builtin_icon (new_icon_name, size, pixbuf);
GtkIconSet *icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
gtk_icon_factory_add (factory, stock_id, icon_set);
g_object_unref (pixbuf);
}
}
/*
* glade_app_register_icon_names:
* glade_app_register_stock_icons:
* @size: icon size
*
* Register a new icon name for most of GladePointerMode.
* Register a new stock icon for most of GladePointerMode.
* After calling this function "glade-selector", "glade-drag-resize",
* "glade-margin-edit" and "glade-align-edit" icon names will be available.
* "glade-margin-edit" and "glade-align-edit" stock icons will be available.
*/
static void
glade_app_register_icon_names (GtkIconSize size)
glade_app_register_stock_icons (GtkIconSize size)
{
gint w, h, real_size;
GtkIconFactory *factory = gtk_icon_factory_new ();
if (gtk_icon_size_lookup (size, &w, &h) == FALSE)
return;
pointer_mode_register_icon (factory, "glade-selector", GLADE_POINTER_SELECT, size);
pointer_mode_register_icon (factory, "glade-drag-resize", GLADE_POINTER_DRAG_RESIZE, size);
pointer_mode_register_icon (factory, "glade-margin-edit", GLADE_POINTER_MARGIN_EDIT, size);
pointer_mode_register_icon (factory, "glade-align-edit", GLADE_POINTER_ALIGN_EDIT, size);
real_size = MIN (w, h);
pointer_mode_register_icon ("glade-selector", real_size, GLADE_POINTER_SELECT, size);
pointer_mode_register_icon ("glade-drag-resize", real_size, GLADE_POINTER_DRAG_RESIZE, size);
pointer_mode_register_icon ("glade-margin-edit", real_size, GLADE_POINTER_MARGIN_EDIT, size);
pointer_mode_register_icon ("glade-align-edit", real_size, GLADE_POINTER_ALIGN_EDIT, size);
register_icon ("glade-devhelp", real_size,
register_stock_icon (factory, "glade-devhelp",
GLADE_DEVHELP_ICON_NAME,
GLADE_DEVHELP_FALLBACK_ICON_FILE);
GLADE_DEVHELP_FALLBACK_ICON_FILE,
size);
gtk_icon_factory_add_default (factory);
}
/**
@ -355,7 +358,7 @@ glade_init (void)
glade_init_check ();
/* Register icons needed by the UI */
glade_app_register_icon_names (GTK_ICON_SIZE_LARGE_TOOLBAR);
glade_app_register_stock_icons (GTK_ICON_SIZE_LARGE_TOOLBAR);
init = TRUE;
}
@ -364,7 +367,7 @@ static void
glade_app_init (GladeApp *app)
{
static gboolean initialized = FALSE;
GladeAppPrivate *priv = glade_app_get_instance_private (app);
GladeAppPrivate *priv = app->priv = glade_app_get_instance_private (app);
singleton_app = app;
@ -372,22 +375,8 @@ glade_app_init (GladeApp *app)
if (!initialized)
{
GtkIconTheme *default_icon_theme = gtk_icon_theme_get_default ();
const gchar *path;
gtk_icon_theme_append_search_path (default_icon_theme, pixmaps_dir);
/* Handle extra icon theme paths. Needed for tests to work */
if ((path = g_getenv (GLADE_ENV_ICON_THEME_PATH)))
{
gchar **tokens = g_strsplit (path, ":", -1);
gint i;
for (i = 0; tokens[i]; i++)
gtk_icon_theme_append_search_path (default_icon_theme, tokens[i]);
g_strfreev (tokens);
}
gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
pixmaps_dir);
glade_cursor_init ();
@ -463,7 +452,7 @@ glade_app_class_init (GladeAppClass *klass)
/**
* GladeApp::widget-adaptor-registered:
* @gladeapp: the #GladeApp which received the signal.
* @adaptor: the newly registered #GladeWidgetAdaptor.
* @adaptor: the newlly registered #GladeWidgetAdaptor.
*
* Emitted when a new widget adaptor is registered.
*/
@ -503,9 +492,9 @@ glade_app_do_event (GdkEvent *event)
gdk_window_get_user_data (window, &widget);
/* As a slight optimization we could replace gtk_widget_get_ancestor()
* with a custom function that only iterates trough parents with windows.
* with a custom function that only iterates trought parents with windows.
*/
if (widget && GLADE_WIDGET_IS_EVENT (event->type) &&
if (widget && IS_GLADE_WIDGET_EVENT (event->type) &&
(layout = gtk_widget_get_ancestor (widget, GLADE_TYPE_DESIGN_LAYOUT)))
return _glade_design_layout_do_event (GLADE_DESIGN_LAYOUT (layout), event);
@ -515,9 +504,9 @@ glade_app_do_event (GdkEvent *event)
/**
* glade_app_config_save
*
* Saves the #GKeyFile to "g_get_user_config_dir()/GLADE_CONFIG_FILENAME"
* Saves the GKeyFile to "g_get_user_config_dir()/GLADE_CONFIG_FILENAME"
*
* Returns: 0 on success.
* Return 0 on success.
*/
gint
glade_app_config_save ()
@ -530,7 +519,6 @@ glade_app_config_save ()
gsize size, written, bytes_written = 0;
static gboolean error_shown = FALSE;
GladeApp *app;
GladeAppPrivate *priv;
/* If we had any errors; wait untill next session to retry.
*/
@ -538,7 +526,6 @@ glade_app_config_save ()
return -1;
app = glade_app_get ();
priv = glade_app_get_instance_private (app);
/* Just in case... try to create the config directory */
if (g_file_test (config_dir, G_FILE_TEST_IS_DIR) == FALSE)
@ -573,7 +560,7 @@ glade_app_config_save ()
if ((channel = g_io_channel_new_file (filename, "w", &error)) != NULL)
{
if ((data =
g_key_file_to_data (priv->config, &size, &error)) != NULL)
g_key_file_to_data (app->priv->config, &size, &error)) != NULL)
{
/* Implement loop here */
@ -629,11 +616,6 @@ glade_app_config_save ()
return 0;
}
/**
* glade_app_get:
*
* Returns: (transfer none): the #GladeApp
*/
GladeApp *
glade_app_get (void)
{
@ -645,38 +627,24 @@ glade_app_get (void)
return singleton_app;
}
/**
* glade_app_set_window:
* @window: (transfer full): a #GtkWidget
*
* Set the window of the application
*/
void
glade_app_set_window (GtkWidget *window)
{
GladeApp *app = glade_app_get ();
GladeAppPrivate *priv = glade_app_get_instance_private (app);
priv->window = window;
app->priv->window = window;
}
/**
* glade_app_get_catalog:
* @name: the name of the catalog
*
* Returns: (transfer none) (nullable): a #GladeCatalog or %NULL if none is found
*/
GladeCatalog *
glade_app_get_catalog (const gchar *name)
{
GladeApp *app = glade_app_get ();
GladeAppPrivate *priv = glade_app_get_instance_private (app);
GList *list;
GladeCatalog *catalog;
g_return_val_if_fail (name && name[0], NULL);
for (list = priv->catalogs; list; list = list->next)
for (list = app->priv->catalogs; list; list = list->next)
{
catalog = list->data;
if (!strcmp (glade_catalog_get_name (catalog), name))
@ -685,16 +653,6 @@ glade_app_get_catalog (const gchar *name)
return NULL;
}
/**
* glade_app_get_catalog_version:
* @name: the name of the #GladeCatalog
* @major: (out) (optional): the major version
* @minor: (out) (optional): the minor version
*
* Returns: %TRUE if the catalog has been found. It is a programming error
* to call this function with an unexisting catalog, returns %FALSE in this
* case and throws a warning.
*/
gboolean
glade_app_get_catalog_version (const gchar *name, gint *major, gint *minor)
{
@ -710,67 +668,40 @@ glade_app_get_catalog_version (const gchar *name, gint *major, gint *minor)
return TRUE;
}
/**
* glade_app_get_catalogs:
*
* Returns: (transfer none) (element-type GladeCatalog): a list of #GladeCatalog
*/
GList *
glade_app_get_catalogs (void)
{
GladeApp *app = glade_app_get ();
GladeAppPrivate *priv = glade_app_get_instance_private (app);
return priv->catalogs;
return app->priv->catalogs;
}
/**
* glade_app_get_window:
*
* Returns: (transfer none): a #GtkWidget
*/
GtkWidget *
glade_app_get_window (void)
{
GladeApp *app = glade_app_get ();
GladeAppPrivate *priv = glade_app_get_instance_private (app);
return priv->window;
return app->priv->window;
}
/**
* glade_app_get_clipboard:
*
* Returns: (transfer none): a #GladeClipboard
*/
GladeClipboard *
glade_app_get_clipboard (void)
{
GladeApp *app = glade_app_get ();
GladeAppPrivate *priv = glade_app_get_instance_private (app);
return priv->clipboard;
return app->priv->clipboard;
}
/**
* glade_app_get_projects:
* glade_app_get_catalogs:
*
* Returns: (element-type GladeCatalog) (transfer none): a list of #GladeCatalog
* Return value: (element-type GladeCatalog): catalogs
*/
GList *
glade_app_get_projects (void)
{
GladeApp *app = glade_app_get ();
GladeAppPrivate *priv = glade_app_get_instance_private (app);
return priv->projects;
return app->priv->projects;
}
/**
* glade_app_get_config:
*
* Returns: (transfer full): a #GKeyFile
*/
GKeyFile *
glade_app_get_config (void)
{
@ -792,7 +723,6 @@ gboolean
glade_app_is_project_loaded (const gchar *project_path)
{
GladeApp *app;
GladeAppPrivate *priv;
GList *list;
gboolean loaded = FALSE;
@ -800,9 +730,8 @@ glade_app_is_project_loaded (const gchar *project_path)
return FALSE;
app = glade_app_get ();
priv = glade_app_get_instance_private (app);
for (list = priv->projects; list; list = list->next)
for (list = app->priv->projects; list; list = list->next)
{
GladeProject *cur_project = GLADE_PROJECT (list->data);
@ -820,13 +749,12 @@ glade_app_is_project_loaded (const gchar *project_path)
*
* Finds an open project with @path
*
* Returns: (nullable) (transfer none): A #GladeProject, or NULL if no such open project was found
* Returns: A #GladeProject, or NULL if no such open project was found
*/
GladeProject *
glade_app_get_project_by_path (const gchar *project_path)
{
GladeApp *app;
GladeAppPrivate *priv;
GList *l;
gchar *canonical_path;
@ -834,11 +762,10 @@ glade_app_get_project_by_path (const gchar *project_path)
return NULL;
app = glade_app_get ();
priv = glade_app_get_instance_private (app);
canonical_path = glade_util_canonical_path (project_path);
for (l = priv->projects; l; l = l->next)
for (l = app->priv->projects; l; l = l->next)
{
GladeProject *project = (GladeProject *) l->data;
@ -855,44 +782,32 @@ glade_app_get_project_by_path (const gchar *project_path)
return NULL;
}
/**
* glade_app_add_project:
* @project: the project to add to the #GladeApp
*/
void
glade_app_add_project (GladeProject *project)
{
GladeApp *app;
GladeAppPrivate *priv;
g_return_if_fail (GLADE_IS_PROJECT (project));
app = glade_app_get ();
priv = glade_app_get_instance_private (app);
/* If the project was previously loaded, don't re-load */
if (g_list_find (priv->projects, project) != NULL)
if (g_list_find (app->priv->projects, project) != NULL)
return;
/* Take a reference for GladeApp here... */
priv->projects = g_list_append (priv->projects, g_object_ref (project));
app->priv->projects = g_list_append (app->priv->projects, g_object_ref (project));
}
/**
* glade_app_remove_project:
* @project: the project to remove from the #GladeApp
*/
void
glade_app_remove_project (GladeProject *project)
{
GladeApp *app;
GladeAppPrivate *priv;
g_return_if_fail (GLADE_IS_PROJECT (project));
app = glade_app_get ();
priv = glade_app_get_instance_private (app);
priv->projects = g_list_remove (priv->projects, project);
app->priv->projects = g_list_remove (app->priv->projects, project);
/* Its safe to just release the project as the project emits a
* "close" signal and everyone is responsable for cleaning up at
@ -901,9 +816,8 @@ glade_app_remove_project (GladeProject *project)
g_object_unref (project);
}
/**
/*
* glade_app_set_accel_group:
* @accel_group: (transfer full): a #GtkAccelGroup to set
*
* Sets @accel_group to app.
* The acceleration group will made available for editor dialog windows
@ -913,49 +827,25 @@ void
glade_app_set_accel_group (GtkAccelGroup *accel_group)
{
GladeApp *app;
GladeAppPrivate *priv;
g_return_if_fail (GTK_IS_ACCEL_GROUP (accel_group));
app = glade_app_get ();
priv = glade_app_get_instance_private (app);
priv->accel_group = accel_group;
app->priv->accel_group = accel_group;
}
/**
* glade_app_get_accel_group:
*
* Returns: (transfer none): the #GtkAccelGroup
*/
GtkAccelGroup *
glade_app_get_accel_group (void)
{
GladeApp *app = glade_app_get ();
GladeAppPrivate *priv = glade_app_get_instance_private (app);
return priv->accel_group;
return glade_app_get ()->priv->accel_group;
}
/**
* glade_app_new:
*
* Returns: (transfer full): the #GladeApp
*/
GladeApp *
glade_app_new (void)
{
return g_object_new (GLADE_TYPE_APP, NULL);
}
/**
* glade_app_search_docs:
* @book: the name of a book
* @page: the name of a page
* @search: the search query
*
* Searches for @book, @page and @search in the documentation.
*/
void
glade_app_search_docs (const gchar *book,
const gchar *page,

Some files were not shown because too many files have changed in this diff Show More