Compare commits

..

No commits in common. "master" and "GLADE3_3_5_3" have entirely different histories.

894 changed files with 210064 additions and 582418 deletions

1
.gitignore vendored
View File

@ -1 +0,0 @@
_build

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,75 +0,0 @@
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.
GitLab
========
Glade bugs are tracked at
https://gitlab.gnome.org/GNOME/glade
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:
git clone https://gitlab.gnome.org/GNOME/glade.git
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.
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.
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 ()`
- 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`
Also try to order your functions so that prototypes are not needed.

View File

@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
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.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@ -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,8 +55,8 @@ 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
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@ -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
@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@ -277,4 +277,64 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
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
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

View File

@ -1,15 +1,15 @@
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU LIBRARY GENERAL PUBLIC LICENSE
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.
[This is the first released version of the library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@ -99,7 +99,7 @@ works together with the library.
Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
GNU LIBRARY GENERAL PUBLIC LICENSE
GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which
@ -411,7 +411,7 @@ decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
NO WARRANTY
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
@ -434,4 +434,49 @@ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
END OF TERMS AND CONDITIONS
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change. You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
To apply these terms, attach the following notices to the library. It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the library's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307 USA.
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
<signature of Ty Coon>, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

11110
ChangeLog Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

69
HACKING Normal file
View File

@ -0,0 +1,69 @@
Mailing List
~~~~~~~~~~~~
Glade-3 discussion takes place on glade-devel@ximian.org
To subscribe or to consult archives visit
http://lists.ximian.com/mailman/listinfo/glade-devel
When posting to the list include [glade3] in the subject,
since the list is also used for Glade-2 developement.
Bugzilla
~~~~~~~~
Glade-3 bugs are tracked in the glade3 module of
http://bugzilla.gnome.org
SVN
~~~
The Glade-3 repository is hosted at svn.gnome.org
To check out a copy of Glade-3 you can use the following commands:
svn checkout svn://svn.gnome.org/svn/glade3 glade3
Patches
~~~~~~~
Patches must be in the unified format (diff -u) and must include a
ChangeLog entry. Please send all patches to bugzilla.
Currently svn only permits this with the following command:
svn diff --diff-cmd=/usr/bin/diff -x -uBp . > file.patch
Coding Style
~~~~~~~~~~~~
Code in Glade-3 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.
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 ()
- 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
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

@ -1,11 +1,3 @@
Tristan Van Berkom
E-mail: tristan.van.berkom@gmail.com
Userid: tvb
Juan Pablo Ugarte
E-mail: juanpablougarte@gmail.com
Userid: jpu
Alberto Fanjul
E-mail: albfan@gnome.org
Userid: albfan

23
Makefile.am Normal file
View File

@ -0,0 +1,23 @@
SUBDIRS = po data gladeui src plugins doc
if HAVE_GNOME_DOC_UTILS
SUBDIRS += help
endif
ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = \
autogen.sh \
COPYING.GPL \
COPYING.LGPL \
intltool-extract.in \
intltool-merge.in \
intltool-update.in \
gnome-doc-utils.make
DISTCLEANFILES = intltool-extract \
intltool-merge \
intltool-update \
gnome-doc-utils.make
DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper --enable-gtk-doc

1027
NEWS

File diff suppressed because it is too large Load Diff

79
README Normal file
View File

@ -0,0 +1,79 @@
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 & easy development of user interfaces
for the Gtk+ toolkit and the GNOME desktop environment.
The user interfaces designed in Glade are stored in XML format,
enabling easy integration with external tools.
In particular libglade can load the XML files and create the interfaces
at runtime. The DTD for the XML files is included with libglade, and is
also at http://glade.gnome.org/glade-2.0.dtd.
Other tools are available which can turn the XML files into source code
in languages such as C++, Perl and Python.
About Glade-3
~~~~~~~~~~~~~
This version of Glade (Glade-3) is a complete rewrite of the original Glade codebase.
One of the main differences from glade-2 is that C code generation has been removed from
glade-3: this has been done on purpose, since using generated code is deprecated; the preferred
way to use glade files is with libglade (if code generation is needed, this can be provided
as another tool or plugin, code generation is simply not a part of the glade-3 project).
Another main difference is that glade-3 was designed to make maximal use of GObject
introspection, thus easing the integration of external toolkits and handling widgets,
signals and properties genericly; thus making it easier to write fancy features in the
future (toolkits such as gtk+ itself, gnome, gnome-db and any others are implemented
externaly as widget catalogs with optional support libraries, thus catalogs may be
distributed seperatly; possibly along with their libglade support modules).
It has a few useful new features such as stacked Undo/Redo and Multiple Project support
and respects the same XML format as glade-2.
For a more details on what has changed, what still needs work, etc. see
the NEWS file & the glade3 product at bugzilla.gnome.org.
Comments, bug reports and patches are more than welcome.
License
~~~~~~~
Glade is distributed under the GNU General Public License (GPL), as described
in the COPYING file.
Note that you are free to use whatever license you like for the source code
generated by Glade. (We do not consider the code generated by Glade to be
'a work based on the Program' as described at the start of the GPL.)
Requirements
~~~~~~~~~~~~
o GTK+ 2.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.

59
TODO
View File

@ -1,45 +1,22 @@
Split Project data model from view model:
========================================
Currently we create a GladeWidget object for each project object but
GladeProject and gladeui api in general uses the very same runtime object.
Ideally we should only depend on GladeWidget and the actual runtime object
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
3.6 blocker/high priority list
=============================
Glade renames widgets when ids are dupped: http://bugzilla.gnome.org/show_bug.cgi?id=549176
Improve attributes editor
Add actions, treestore, treemodel, adjustment, pixbuf (Gtk+ objects new group)
Nice editor resizing by Pavel, needs fix for warning icons: http://bugzilla.gnome.org/show_bug.cgi?id=546107
No way to add menus to toolbar: http://bugzilla.gnome.org/show_bug.cgi?id=429438
GdkColor null values critical errors: http://bugzilla.gnome.org/show_bug.cgi?id=426345
Add versioning metadata for libglade unsupported properties and widgets.
Sort objects from widgets in the inspector widget.
GtkBuilder unsuported features:
==============================
Make popup work in workspace with no-window widgets
Remove deleted widgets from the workspace
Take care of external object property references (sync them) at glade_widget_rebuild time
Liststore/Treestore data is not translatable
store data needs improvement and cant be released as is (cant even have spaces in data, needs real new structure).
* 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
IMPORTANT!!! Go over all object type properties and mark them libglade unsupported,
newly added objects need "since" versioning info updated, all around thoroughly
check catalog data before release candidate.

52
autogen.sh Executable file
View File

@ -0,0 +1,52 @@
#!/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
}
DIE=0
# This is a bit complicated here since we can't use gnome-config yet.
# It'll be easier after switching to pkg-config since we can then
# use pkg-config to find the gnome-autogen.sh script.
gnome_autogen=
gnome_datadir=
ifs_save="$IFS"; IFS=":"
for dir in $PATH ; do
test -z "$dir" && dir=.
if test -f $dir/gnome-autogen.sh ; then
gnome_autogen="$dir/gnome-autogen.sh"
gnome_datadir=`echo $dir | sed -e 's,/bin$,/share,'`
break
fi
done
IFS="$ifs_save"
if test -z "$gnome_autogen" ; then
echo "You need to install the gnome-common module and make"
echo "sure the gnome-autogen.sh script is in your \$PATH."
exit 1
fi
automake_version=1.9
#case `uname` in
#CYGWIN*)
# automake 1.4 of cygwin does not define EGREP in libtool.m4, and
# fails to do the file magic test when -rpath is given
# automake_version=1.7
# ;;
#esac
GTKDOCIZE="gtkdocize --flavour no-tmpl" REQUIRED_GNOME_DOC_UTILS_VERSION=0.9.0 REQUIRED_AUTOMAKE_VERSION="$automake_version" GNOME_DATADIR="$gnome_datadir" USE_GNOME2_MACROS=1 . $gnome_autogen

276
configure.ac Normal file
View File

@ -0,0 +1,276 @@
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, 5)
m4_define(glade_micro_version, 3)
m4_define(glade_version, glade_major_version.glade_minor_version.glade_micro_version)
AC_INIT([glade3], [glade_version],
[http://bugzilla.gnome.org/enter_bug.cgi?product=glade3])
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_SYSTEM
AM_INIT_AUTOMAKE([1.9 foreign no-dist-gzip dist-bzip2])
AM_MAINTAINER_MODE
IT_PROG_INTLTOOL([0.35.0])
AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
AC_PATH_PROG(DLLTOOL, dlltool)
AC_ISC_POSIX
AC_PROG_CC
AC_DISABLE_STATIC
AC_PROG_INSTALL
AC_PROG_MAKE_SET
AC_LIBTOOL_DLOPEN
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
# 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.html#Versioning
GLADE_REVISION=0
GLADE_CURRENT=8
GLADE_AGE=0
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_COMMON_INIT
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 Gettext stuff.
dnl ================================================================
GETTEXT_PACKAGE=AC_PACKAGE_NAME
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Name of the gettext package.])
AM_GLIB_GNU_GETTEXT
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.9)
dnl ================================================================
dnl Check for gtk+
dnl ================================================================
PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= 2.14.0 gthread-2.0 libxml-2.0 >= 2.4.0])
AC_SUBST(GTK_LIBS)
AC_SUBST(GTK_CFLAGS)
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 Check for optional gnome libs
dnl ================================================================
AC_ARG_ENABLE(gnome,
AS_HELP_STRING([--disable-gnome], [disable gnome catalog]),
check_gnome=$enableval, check_gnome=yes)
if test x"$check_gnome" = x"yes"; then
PKG_CHECK_MODULES(GNOME, [libbonoboui-2.0 libgnomeui-2.0],
[have_gnome=yes],[have_gnome=no])
AC_SUBST(GNOME_LIBS)
AC_SUBST(GNOME_CFLAGS)
else
have_gnome=no
fi
AM_CONDITIONAL(BUILD_GNOME, test x"$have_gnome" = "xyes")
dnl ================================================================
dnl Python for optional python dev libs
dnl ================================================================
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
PYGTK_REQUIRED_MAJOR=2
PYGTK_REQUIRED_MINOR=10
PYGTK_REQUIRED_MICRO=0
PKG_CHECK_MODULES(PYGTK, [pygtk-2.0 >= 2.10.0], [have_python=yes],[have_python=no])
AM_CHECK_PYTHON_HEADERS(, [have_python_headers=no])
AM_CHECK_PYTHON_LIBS(, [have_python_lib=no])
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(PYGTK_REQUIRED_MAJOR, $PYGTK_REQUIRED_MAJOR, Pygtk mayor version required)
AC_DEFINE_UNQUOTED(PYGTK_REQUIRED_MINOR, $PYGTK_REQUIRED_MINOR, Pygtk minor version required)
AC_DEFINE_UNQUOTED(PYGTK_REQUIRED_MICRO, $PYGTK_REQUIRED_MICRO, Pygtk micro version required)
AC_SUBST(PYGTK_LIBS)
AC_SUBST(PYGTK_CFLAGS)
else
have_python=no
fi
AM_CONDITIONAL(BUILD_PYTHON, test x"$have_python" = "xyes")
# ==================================================================
# Glade User Manual (requires gnome-doc-utils)
# ==================================================================
GNOME_DOC_INIT([0.9.0],[],[:])
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
AC_SUBST([AM_CPPFLAGS])
AC_SUBST([AM_CFLAGS])
AC_SUBST([AM_CXXFLAGS])
AC_SUBST([AM_LDFLAGS])
AC_CONFIG_FILES([
Makefile
data/gladeui-1.0.pc
data/glade-3.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/scalable/Makefile
data/icons/hicolor/scalable/apps/Makefile
gladeui/Makefile
gladeui/gladeui.rc
src/Makefile
src/glade-3.rc
plugins/Makefile
plugins/gtk+/Makefile
plugins/gtk+/icons/Makefile
plugins/gtk+/icons/16x16/Makefile
plugins/gtk+/icons/22x22/Makefile
plugins/gnome/Makefile
plugins/gnome/icons/Makefile
plugins/gnome/icons/16x16/Makefile
plugins/gnome/icons/22x22/Makefile
plugins/python/Makefile
po/Makefile.in
doc/Makefile
doc/version.xml
help/Makefile
])
AC_OUTPUT
echo "
Configuration:
Source code location: ${srcdir}
Compiler: ${CC}
GTK+ UNIX Print Widgets: ${have_unix_print}
GNOME UI Widgets: ${have_gnome}
PYTHON Widgets support: ${have_python}
"

4
data/.gitignore vendored
View File

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

19
data/Makefile.am Normal file
View File

@ -0,0 +1,19 @@
## Process this file with automake to produce Makefile.in
SUBDIRS = icons
desktopdir = $(datadir)/applications
desktop_in_files = glade-3.desktop.in.in
desktop_DATA = $(desktop_in_files:.desktop.in.in=.desktop)
@INTLTOOL_DESKTOP_RULE@
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = gladeui-1.0.pc
EXTRA_DIST = \
$(desktop_in_files) \
gladeui-1.0.pc.in
CLEANFILES = \
$(desktop_DATA) \
$(pkgconfig_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>

View File

@ -0,0 +1,17 @@
[Desktop Entry]
Encoding=UTF-8
_Name=Glade Interface Designer
_GenericName=User Interface Designer
_Comment=Create or open user interface designs for GTK+ applications
Exec=glade-3 %F
Terminal=false
StartupNotify=true
Type=Application
Icon=glade-3
Categories=GNOME;GTK;Development;GUIDesigner;
MimeType=application/x-glade;
X-GNOME-DocPath=glade/glade.xml
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=glade3
X-GNOME-Bugzilla-Version=@VERSION@
X-GNOME-Bugzilla-Component=general

18
data/gladeui-1.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-1.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+-2.0 >= 2.10.0 libxml-2.0 >= 2.4.0
Libs: -L${libdir} -lgladeui-1
Cflags: -I${includedir}

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

@ -0,0 +1,23 @@
## 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 = selector.png devhelp.png plus.png atk.png drag-resize.png
EXTRA_DIST = $(pixmaps_DATA) glade-3.ico

BIN
data/icons/atk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 437 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 671 B

BIN
data/icons/drag-resize.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 638 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 216 B

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 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/16x16/apps
appicon_DATA = glade-3.png
EXTRA_DIST = $(appicon_DATA) glade-3.xcf

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 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-3.png
EXTRA_DIST = $(appicon_DATA) glade-3.xcf

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 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-3.png
EXTRA_DIST = $(appicon_DATA)

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 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-3.png
EXTRA_DIST = $(appicon_DATA) glade-3.svg

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 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-3.png
EXTRA_DIST = $(appicon_DATA)

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1 @@
SUBDIRS = 16x16 22x22 24x24 32x32 48x48 scalable

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/scalable/apps
appicon_DATA = glade-3.svg
EXTRA_DIST = $(appicon_DATA)

View File

@ -0,0 +1,648 @@
<?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="48px"
height="48px"
id="svg4908"
sodipodi:version="0.32"
inkscape:version="0.44+devel"
sodipodi:docname="glade5.svg"
sodipodi:docbase="/home/andreas/project/application icons/48x48"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="/home/andreas/project/application icons/48x48/glade5.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90"
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(-2.1313511,0,0,1.283833,86.543976,-0.1277984)"
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(3.277938e-2,-1.0071302,-0.999463,-3.303084e-2,45.620229,49.233341)"
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(1,0,0,1.0045696,0,-0.1855194)" />
<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.2909091,0,0,0.3497268,-33.090909,9.251366)" />
<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.9959857,6.9120707e-8,1.181422e-6,0.8780487,46.845968,3.0487798)"
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(-1,0,0,1,47.000004,0)" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7744"
id="linearGradient7750"
x1="18.384777"
y1="22"
x2="23.292892"
y2="22"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7752"
id="linearGradient7758"
x1="15.114408"
y1="27"
x2="20.019962"
y2="27"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7780"
id="linearGradient7786"
x1="20.875"
y1="14.249998"
x2="20.875"
y2="18.437498"
gradientUnits="userSpaceOnUse" />
<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" />
</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="27.406385"
inkscape:cy="33.127804"
inkscape:current-layer="layer1"
showgrid="true"
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" />
<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.9583333,0,0,0.714282,47,15.000156)">
<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:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="M 43.215995,7.5 L 13.471509,7.5 C 13.314168,7.5 3.5,17.314168 3.5,17.471508 L 3.5,42.215992 C 3.5,42.373332 3.626668,42.5 3.784009,42.5 L 43.215995,42.5 C 43.373336,42.5 43.500004,42.373332 43.500004,42.215992 L 43.500004,7.7840084 C 43.500004,7.6266678 43.373336,7.5 43.215995,7.5 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 35.532117,40.598798 L 35.532117,14.5 L 7.5130099,14.5 L 7.5130099,36.544822 L 24.393398,36.544822"
id="path4974"
sodipodi:nodetypes="ccccc" />
<path
style="opacity:0.64130435;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
d="M 4.5,16.875001 L 13.062499,8.5 L 42.5,8.5 L 42.5,41.5 L 4.5,41.5 L 4.5,16.875001 z "
id="rect5887"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;fill-rule:evenodd;stroke:#555753;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 6.0648146,18.566679 L 35.435184,18.566679"
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 4,17.212006 C 4.8898017,15.865378 11.455677,13.481495 14.873341,12.681969 C 14.666262,14.254915 15.023334,19 15.023334,19 C 12.503686,17.625 4.9537451,17.049892 4,17.212006 z "
id="path5348"
sodipodi:nodetypes="cccc" />
<rect
style="opacity:0.64130435;fill:url(#linearGradient7786);fill-opacity:1.0;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="27"
height="3"
x="8"
y="15" />
<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 3.500024,17.60468 C 3.486859,16.189538 9.852559,7.3974268 13.735143,7.500906 C 12.762105,7.733901 11.984788,13.668936 13.374508,16.481436 C 10.624508,16.481436 4.463889,15.746506 3.500024,17.60468 z "
id="path2210"
sodipodi:nodetypes="cccc"
inkscape:r_cx="true"
inkscape:r_cy="true" />
<path
sodipodi:nodetypes="cccc"
id="path2247"
d="M 5.78902,15.499999 C 6.517382,14.143041 9.947557,10.391559 11.870143,9.1450438 C 11.631203,10.581831 11.333088,12.855721 11.948728,15.437757 C 11.948728,15.437757 6.569724,15.336642 5.78902,15.499999 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.7826087;fill:none;fill-opacity:1;stroke:#555753;stroke-width:1.62018538;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.6285393,0,0,0.6060913,3.9999997,7.6933267)" />
<path
sodipodi:type="arc"
style="opacity:0.7826087;fill:none;fill-opacity:1;stroke:#555753;stroke-width:1.62018538;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.6285393,0,0,0.6060915,4.0000003,12.693323)" />
<rect
style="opacity:1;fill:url(#linearGradient7750);fill-opacity:1.0;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="10"
height="2"
x="14"
y="21"
rx="0"
ry="0" />
<rect
style="opacity:1;fill:url(#linearGradient7758);fill-opacity:1.0;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="7"
height="2"
x="14"
y="26"
rx="0"
ry="0" />
<rect
style="opacity:1;fill:#555753;fill-opacity:1;stroke:#555753;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
id="rect5963"
width="0.15951318"
height="3"
x="-14.659513"
y="-38.5"
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 23.906407,31.559768 L 15.5,31.559768 L 15.5,34.500001 L 25.525275,34.500001 L 25.525275,33.295103"
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"
height="4"
x="-36"
y="11"
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,103,0.5714291)">
<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 40.498252,40.542446 L 40.542447,26.532894 L 21.458408,40.563262 L 40.498252,40.542446 z "
id="path12221"
sodipodi:nodetypes="cccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 97 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 240 B

BIN
data/icons/selector.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 705 B

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

1
doc/.gitignore vendored
View File

@ -1 +0,0 @@
/version.xml

141
doc/Makefile.am Normal file
View File

@ -0,0 +1,141 @@
## 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
# 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
# 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
# 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+-2.0`
GTKDOC_LIBS=${top_builddir}/gladeui/libgladeui-1.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>
@ -210,12 +202,12 @@ this is described in the next chapter.
<para>
You can also load your catalog from a user directory by specifying
additional load path(s) in the environment, for instance:
<programlisting>GLADE_CATALOG_SEARCH_PATH=~/mycatalogs:~/work/foo/glade</programlisting>
<programlisting>GLADE_CATALOG_PATH=~/mycatalogs:~/work/foo/glade</programlisting>
</para>
<para>
Same goes for optional plugin libraries, for instance:
<programlisting>GLADE_MODULE_SEARCH_PATH=~/work/foo/src</programlisting>
<programlisting>GLADE_MODULE_PATH=~/work/foo/src</programlisting>
</para>
<para>

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

@ -1,92 +0,0 @@
<refentry id="pythonsupport" revision="26 Feb 2011">
<refmeta>
<refentrytitle>Python Gtk widgets support</refentrytitle>
<refmiscinfo>Glade UI</refmiscinfo>
</refmeta>
<refnamediv>
<refname>Add python support to your catalog</refname>
<refpurpose>
How to write and install a catalog for a python widget library
</refpurpose>
</refnamediv>
<refsect1>
<title>Introduction</title>
<para>
Glade supports loading widgets coded in python by linking and running the python
interpreter from the gladepython catalog plugin.
</para>
<para>
So in order for glade to include your python gtk widgets you will have to:
<varlistentry><listitem>
a) specify gladepython support code as your plugin library.
</listitem></varlistentry>
<varlistentry><listitem>
b) set glade_python_init as you init function.
</listitem></varlistentry>
<varlistentry><listitem>
c) make sure your catalog name is the same as your python import library since
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"
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-classes>
<glade-widget-group name="python" title="Python">
<glade-widget-class-ref name="MyPythonBox"/>
</glade-widget-group>
</glade-catalog>]]>
</programlisting>
</para>
<para>
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
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>
pythonplugin.py
<programlisting>
<![CDATA[
from gi.repository import GLib, Gtk, GObject
class MyPythonBox(Gtk.Box):
__gtype_name__ = 'MyPythonBox'
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)
]]>
</programlisting>
</para>
</refsect1>
</refentry>

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

@ -0,0 +1,98 @@
<?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 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://glade.gnome.org/docs/index.html">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;
</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

@ -2,17 +2,19 @@
glade_app_get_type
glade_clipboard_get_type
glade_clipboard_view_get_type
glade_command_get_type
glade_editor_get_type
glade_editor_property_get_type
glade_fixed_get_type
glade_palette_get_type
glade_placeholder_get_type
glade_project_get_type
glade_inspector_get_type
glade_property_get_type
glade_signal_get_type
glade_widget_get_type
glade_widget_adaptor_get_type
glade_design_view_get_type
glade_design_layout_get_type
glade_base_editor_get_type
glade_widget_action_get_type

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>

View File

@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:gnome="http://api.gnome.org/doap-extensions#"
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" />
<category rdf:resource="http://api.gnome.org/doap-extensions#apps" />
<programming-language>C</programming-language>
<!-- <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>
<foaf:Person>
<foaf:name>Juan Pablo Ugarte</foaf:name>
<foaf:mbox rdf:resource="mailto:juanpablougarte@gmail.com" />
<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>

6
gladeui/.gitignore vendored
View File

@ -1,6 +0,0 @@
/glade-marshallers.c
/glade-marshallers.h
/gladeui.rc
/glade-previewer
/glade-previewer.rc

169
gladeui/Makefile.am Normal file
View File

@ -0,0 +1,169 @@
common_defines = \
-DG_LOG_DOMAIN=\"GladeUI\" \
-DGLADE_DATADIR="\"$(pkgdatadir)\"" \
-DGLADE_LIBDIR="\"$(pkglibdir)\"" \
-DGLADE_CATALOGSDIR="\"$(pkgdatadir)/catalogs\""\
-DGLADE_MODULESDIR="\"$(pkglibdir)/modules\"" \
-DGLADE_PLUGINSDIR="\"$(pkglibdir)/plugins\"" \
-DGLADE_PIXMAPSDIR="\"$(pkgdatadir)/pixmaps\"" \
-DGLADE_LOCALEDIR="\"$(datadir)/locale\""
lib_LTLIBRARIES = libgladeui-1.la
BUILT_SOURCES = glade-marshallers.c glade-marshallers.h
EXTRA_DIST = glade-marshallers.list gladeui.rc.in icon-naming-spec.c
# The glade-3 core library
libgladeui_1_la_SOURCES = \
glade-widget-adaptor.c \
glade-debug.c \
glade-project.c \
glade-parameter.c \
glade-placeholder.c \
glade-custom.c \
glade-inspector.c \
glade-xml-utils.c \
glade-palette.c \
glade-palette-item.c \
glade-palette-box.c \
glade-palette-expander.c \
glade-design-layout.c \
glade-design-view.c \
glade-named-icon-chooser-dialog.c \
glade-named-icon-chooser-dialog.h \
glade-cursor.c \
glade-catalog.c \
glade-property.c \
glade-property-class.c \
glade-popup.c \
glade-widget.c \
glade-editor-property.c \
glade-editor.c \
glade-utils.c \
glade-signal.c \
glade-signal-editor.c \
glade-clipboard.c \
glade-clipboard-view.c \
glade-command.c \
glade-id-allocator.c \
glade-id-allocator.h \
glade-marshallers.c \
glade-accumulators.c \
glade-builtins.c \
glade-app.c \
glade-fixed.c \
glade-base-editor.c \
glade-palette-item.h \
glade-palette-box.h \
glade-palette-expander.h \
glade-popup.h \
glade-catalog.h \
glade-marshallers.h \
glade-accumulators.h \
glade-widget-action.c \
glade-name-context.c \
glade-displayable-values.c \
glade-editable.c \
glade-editor-table.c
libgladeui_1_la_CPPFLAGS = \
$(common_defines) \
-I$(top_srcdir) \
-I$(top_builddir) \
$(AM_CPPFLAGS)
libgladeui_1_la_CFLAGS = \
$(GTK_CFLAGS) \
$(WARN_CFLAGS) \
$(AM_CFLAGS)
libgladeui_1_la_LDFLAGS = -version-info $(GLADE_CURRENT):$(GLADE_REVISION):$(GLADE_AGE) $(AM_LDFLAGS)
libgladeui_1_la_LIBADD = $(GTK_LIBS)
libgladeuiincludedir=$(includedir)/libgladeui-1.0/gladeui
libgladeuiinclude_HEADERS = \
glade.h \
glade-debug.h \
glade-project.h \
glade-inspector.h \
glade-parameter.h \
glade-placeholder.h \
glade-custom.h \
glade-editor.h \
glade-editor-property.h \
glade-signal-editor.h \
glade-palette.h \
glade-palette-item.h \
glade-design-layout.h \
glade-design-view.h \
glade-widget.h \
glade-widget-adaptor.h \
glade-property.h \
glade-property-class.h \
glade-utils.h \
glade-clipboard.h \
glade-clipboard-view.h \
glade-command.h \
glade-app.h \
glade-builtins.h \
glade-fixed.h \
glade-base-editor.h \
glade-xml-utils.h \
glade-signal.h \
glade-cursor.h \
glade-catalog.h \
glade-widget-action.h \
glade-name-context.h \
glade-displayable-values.h \
glade-editable.h \
glade-editor-table.h
if PLATFORM_WIN32
libgladeui_1_la_LDFLAGS += -no-undefined
endif
if NATIVE_WIN32
libgladeui_1_la_LDFLAGS += -Wl,gladeui-win32-res.o -export-symbols gladeui.def
libgladeui_1_la_DEPENDENCIES = gladeui-win32-res.o gladeui.def
endif
gladeui-win32-res.o: gladeui.rc
$(WINDRES) $< $@
# gladeui.def: auto-generated DEF file for linker input
# The routines below will scan the header files and extracts symbol declarations.
# The symbol 'custom_get_type' is added manually. It's naming deviates from
# the pattern set by all other public symbols in the glade namespace.
#
gladeui.def: $(libgladeuiinclude_HEADERS)
@echo Generating $@
@(echo EXPORTS; \
echo 'custom_get_type'; \
(cd $(srcdir); cat $(libgladeuiinclude_HEADERS) || echo 'glade_ERROR ()' ) | \
grep -v -E '^# *include' | \
grep -v -E '^# *define' | \
grep -E '[^\(]glade_.*[[:space:]]+\(.*' | \
sed -e 's/[ ]*(.*//' | \
sed -e 's/.*glade_/glade_/' | \
sort; \
) >$@
@ ! grep -q glade_ERROR $@ || ($(RM) $@; false)
#
# 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 )
CLEANFILES = $(BUILT_SOURCES) gladeui.def

Binary file not shown.

Before

Width:  |  Height:  |  Size: 914 B

View File

@ -1,3 +1,4 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* glade-clipboard.c - An object for handling Cut/Copy/Paste.
*
@ -18,7 +19,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.
*/
@ -30,86 +31,57 @@
gboolean
_glade_single_object_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
glade_single_object_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
{
GObject *object = g_value_get_object (handler_return);
g_value_set_object (return_accu, object);
return (object == NULL);
}
gboolean
_glade_integer_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
{
gboolean continue_emission;
gint retval;
retval = g_value_get_int (handler_return);
g_value_set_int (return_accu, retval >> 1);
continue_emission = !(retval & 1);
return continue_emission;
GObject *object = g_value_get_object (handler_return);
g_value_set_object (return_accu, object);
return (object == NULL);
}
/* From gtkmain.c */
gboolean
_glade_boolean_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
glade_boolean_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
{
gboolean continue_emission;
gboolean signal_handled;
signal_handled = g_value_get_boolean (handler_return);
g_value_set_boolean (return_accu, signal_handled);
continue_emission = !signal_handled;
return continue_emission;
gboolean continue_emission;
gboolean signal_handled;
signal_handled = g_value_get_boolean (handler_return);
g_value_set_boolean (return_accu, signal_handled);
continue_emission = !signal_handled;
return continue_emission;
}
gboolean
_glade_string_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
glade_string_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
{
const gchar *handler_str;
g_free ((void *) g_value_get_string (return_accu));
handler_str = g_value_get_string (handler_return);
g_value_set_string (return_accu, handler_str);
return (handler_str == NULL);
const gchar *handler_str;
g_free ((void *)g_value_get_string (return_accu));
handler_str = g_value_get_string (handler_return);
g_value_set_string (return_accu, handler_str);
return (handler_str == NULL);
}
gboolean
_glade_strv_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return, gpointer dummy)
glade_stop_emission_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
{
const gchar **handler_strv;
handler_strv = g_value_get_boxed (handler_return);
g_value_set_boxed (return_accu, handler_strv);
return (handler_strv == NULL);
}
gboolean
_glade_stop_emission_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy)
{
g_value_copy (handler_return, return_accu);
return FALSE;
g_value_copy (handler_return, return_accu);
return FALSE;
}

View File

@ -1,27 +1,4 @@
/*
* 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.
*/
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
#ifndef __GLADE_ACCUMULATORS_H__
#define __GLADE_ACCUMULATORS_H__
@ -29,35 +6,25 @@
G_BEGIN_DECLS
gboolean _glade_single_object_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean glade_single_object_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean glade_boolean_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean _glade_integer_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean _glade_boolean_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean glade_string_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean _glade_string_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean _glade_strv_handled_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean _glade_stop_emission_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean glade_stop_emission_accumulator (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
G_END_DECLS
#endif /* __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>

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,4 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2001 Ximian, Inc.
*
@ -29,62 +30,182 @@
G_BEGIN_DECLS
#define GLADE_TYPE_APP glade_app_get_type ()
G_DECLARE_DERIVABLE_TYPE (GladeApp, glade_app, GLADE, APP, GObject)
#define GLADE_TYPE_APP (glade_app_get_type())
#define GLADE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_APP, GladeApp))
#define GLADE_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_APP, GladeAppClass))
#define GLADE_IS_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_APP))
#define GLADE_IS_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_APP))
#define GLADE_APP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GLADE_APP, GladeAppClass))
#define GLADE_ENV_CATALOG_PATH "GLADE_CATALOG_SEARCH_PATH"
#define GLADE_ENV_MODULE_PATH "GLADE_MODULE_SEARCH_PATH"
#define GLADE_ENV_TESTING "GLADE_TESTING"
#define GLADE_ENV_PIXMAP_DIR "GLADE_PIXMAP_DIR"
#define GLADE_ENV_ICON_THEME_PATH "GLADE_ICON_THEME_PATH"
#define GLADE_ENV_BUNDLED "GLADE_BUNDLED"
#define GLADE_TYPE_POINTER_MODE (glade_pointer_mode_get_type())
#define GLADE_ENV_CATALOG_PATH "GLADE_CATALOG_PATH"
#define GLADE_ENV_MODULE_PATH "GLADE_MODULE_PATH"
typedef struct _GladeApp GladeApp;
typedef struct _GladeAppPrivate GladeAppPrivate;
typedef struct _GladeAppClass GladeAppClass;
/**
* GladePointerMode:
* @GLADE_POINTER_SELECT: Mouse pointer used for selecting widgets
* @GLADE_POINTER_ADD_WIDGET: Mouse pointer used for adding widgets
* @GLADE_POINTER_DRAG_RESIZE: Mouse pointer used for dragging and
* resizing widgets in containers
*
* Indicates what the pointer is used for in the workspace.
*/
enum _GladePointerMode
{
GLADE_POINTER_SELECT = 0,
GLADE_POINTER_ADD_WIDGET,
GLADE_POINTER_DRAG_RESIZE
};
typedef enum _GladePointerMode GladePointerMode;
struct _GladeApp
{
GObject parent_instance;
GladeAppPrivate *priv;
};
struct _GladeAppClass
{
GObjectClass parent_class;
GObjectClass parent_class;
/* class methods */
void (* show_properties) (GladeApp* app,
gboolean raise);
void (* hide_properties) (GladeApp* app);
gpointer padding[6];
/* signals */
void (* update_ui_signal) (GladeApp *app);
};
void glade_init (void);
GladeApp* glade_app_new (void);
GladeApp* glade_app_get (void);
GKeyFile* glade_app_get_config (void);
gint glade_app_config_save (void);
gboolean glade_app_do_event (GdkEvent *event);
gboolean glade_app_get_catalog_version (const gchar *name,
gint *major,
gint *minor);
GList *glade_app_get_catalogs (void);
GladeCatalog *glade_app_get_catalog (const gchar *name);
GladeClipboard* glade_app_get_clipboard (void);
void glade_app_add_project (GladeProject *project);
void glade_app_remove_project (GladeProject *project);
GList* glade_app_get_projects (void);
gboolean glade_app_is_project_loaded (const gchar *project_path);
GladeProject* glade_app_get_project_by_path (const gchar *project_path);
void glade_app_set_window (GtkWidget *window);
GtkWidget* glade_app_get_window (void);
void glade_app_set_accel_group (GtkAccelGroup *accel_group);
GtkAccelGroup *glade_app_get_accel_group (void);
GType glade_app_get_type (void) G_GNUC_CONST;
void glade_app_search_docs (const gchar *book,
const gchar *page,
const gchar *search);
GladeApp* glade_app_new (void);
GType glade_pointer_mode_get_type (void) G_GNUC_CONST;
GladeApp* glade_app_get (void);
void glade_app_update_ui (void);
void glade_app_set_window (GtkWidget *window);
GtkWidget* glade_app_get_window (void);
gboolean glade_app_get_catalog_version (const gchar *name, gint *major, gint *minor);
GList *glade_app_get_catalogs (void);
GladeCatalog *glade_app_get_catalog (const gchar *name);
GladeEditor* glade_app_get_editor (void);
GladePalette* glade_app_get_palette (void);
GladeClipboard* glade_app_get_clipboard (void);
GtkWidget* glade_app_get_clipboard_view (void);
GladeProject* glade_app_get_project (void);
GladeProject* glade_app_check_get_project (void);
void glade_app_set_project (GladeProject *project);
GladePointerMode glade_app_get_pointer_mode (void);
void glade_app_set_pointer_mode (GladePointerMode mode);
void glade_app_add_project (GladeProject *project);
void glade_app_remove_project (GladeProject *project);
GList* glade_app_get_projects (void);
GKeyFile* glade_app_get_config (void);
gboolean glade_app_is_project_loaded (const gchar *project_path);
GladeProject* glade_app_get_project_by_path (const gchar *project_path);
void glade_app_show_properties (gboolean raise);
void glade_app_hide_properties (void);
void glade_app_command_copy (void);
void glade_app_command_cut (void);
void glade_app_command_paste (GladePlaceholder *placeholder);
void glade_app_command_delete (void);
void glade_app_command_delete_clipboard (void);
void glade_app_command_undo (void);
void glade_app_command_redo (void);
gint glade_app_config_save (void);
void glade_app_set_transient_parent (GtkWindow *parent);
GtkWindow *glade_app_get_transient_parent (void);
void glade_app_set_accel_group (GtkAccelGroup *accel_group);
GtkAccelGroup *glade_app_get_accel_group (void);
void glade_app_update_instance_count (GladeProject *project);
GtkWidget *glade_app_undo_button_new (void);
GtkWidget *glade_app_redo_button_new (void);
GList *glade_app_get_selection (void);
/* These handle selection on a global scope and take care
* of multiple project logic.
*/
gboolean glade_app_is_selected (GObject *object);
void glade_app_selection_set (GObject *object,
gboolean emit_signal);
void glade_app_selection_add (GObject *object,
gboolean emit_signal);
void glade_app_selection_remove (GObject *object,
gboolean emit_signal);
void glade_app_selection_clear (gboolean emit_signal);
void glade_app_selection_changed (void);
/* package paths */
const gchar *glade_app_get_catalogs_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_modules_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_pixmaps_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_locale_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_bin_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_lib_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_catalogs_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_modules_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_plugins_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_pixmaps_dir (void) G_GNUC_CONST;
const gchar *glade_app_get_locale_dir (void) G_GNUC_CONST;
G_END_DECLS

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,4 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2006 Juan Pablo Ugarte.
*
@ -18,7 +19,6 @@
* Authors:
* Juan Pablo Ugarte <juanpablougarte@gmail.com>
*/
#ifndef __GLADE_BASE_EDITOR_H__
#define __GLADE_BASE_EDITOR_H__
@ -28,53 +28,69 @@
G_BEGIN_DECLS
#define GLADE_TYPE_BASE_EDITOR glade_base_editor_get_type ()
G_DECLARE_DERIVABLE_TYPE (GladeBaseEditor, glade_base_editor, GLADE, BASE_EDITOR, GtkBox)
#define GLADE_TYPE_BASE_EDITOR (glade_base_editor_get_type ())
#define GLADE_BASE_EDITOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GLADE_TYPE_BASE_EDITOR, GladeBaseEditor))
#define GLADE_BASE_EDITOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GLADE_TYPE_BASE_EDITOR, GladeBaseEditorClass))
#define GLADE_IS_BASE_EDITOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GLADE_TYPE_BASE_EDITOR))
#define GLADE_IS_BASE_EDITOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GLADE_TYPE_BASE_EDITOR))
#define GLADE_BASE_EDITOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GLADE_TYPE_BASE_EDITOR, GladeBaseEditorClass))
typedef struct _GladeBaseEditor GladeBaseEditor;
typedef struct _GladeBaseEditorPrivate GladeBaseEditorPrivate;
typedef struct _GladeBaseEditorClass GladeBaseEditorClass;
struct _GladeBaseEditor
{
GtkVBox parent;
GladeBaseEditorPrivate *priv;
};
struct _GladeBaseEditorClass
{
GtkBoxClass parent_class;
GtkVBoxClass parent_class;
void (*child_selected) (GladeBaseEditor *editor, GladeWidget *gchild);
gboolean (*change_type) (GladeBaseEditor *editor, GladeWidget *gchild, GType type);
gchar * (*get_display_name) (GladeBaseEditor *editor, GladeWidget *gchild);
GladeWidget * (*build_child) (GladeBaseEditor *editor, GladeWidget *parent, GType type);
gboolean (*delete_child) (GladeBaseEditor *editor, GladeWidget *parent, GladeWidget *gchild);
gboolean (*move_child) (GladeBaseEditor *editor, GladeWidget *gparent, GladeWidget *gchild);
gpointer padding[6];
void (*child_selected) (GladeBaseEditor *, GladeWidget *);
gboolean (*change_type) (GladeBaseEditor *, GladeWidget *, GType);
gchar * (*get_display_name) (GladeBaseEditor *, GladeWidget *);
GladeWidget * (*build_child) (GladeBaseEditor *, GladeWidget *, GType);
gboolean (*delete_child) (GladeBaseEditor *, GladeWidget *, GladeWidget *);
gboolean (*move_child) (GladeBaseEditor *, GladeWidget *, GladeWidget *);
};
GType glade_base_editor_get_type (void);
GladeBaseEditor *glade_base_editor_new (GObject *container,
GladeEditable *main_editable,
...);
GladeEditable *main_editable,
...);
void glade_base_editor_append_types (GladeBaseEditor *editor,
GType parent_type,
...);
GType parent_type,
...);
void glade_base_editor_add_editable (GladeBaseEditor *editor,
GladeWidget *gchild,
GladeEditorPageType page);
GladeWidget *gchild,
GladeEditorPageType page);
void glade_base_editor_add_default_properties (GladeBaseEditor *editor,
GladeWidget *gchild);
GladeWidget *gchild);
void glade_base_editor_add_properties (GladeBaseEditor *editor,
GladeWidget *gchild,
gboolean packing,
...);
GladeWidget *gchild,
gboolean packing,
...);
void glade_base_editor_add_label (GladeBaseEditor *editor,
gchar *str);
gchar *str);
void glade_base_editor_set_show_signal_editor (GladeBaseEditor *editor,
gboolean val);
gboolean val);
/* Convenience functions */
GtkWidget *glade_base_editor_pack_new_window (GladeBaseEditor *editor,
gchar *title,
gchar *help_markup);
gchar *title,
gchar *help_markup);
G_END_DECLS

View File

@ -1,259 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.21.0 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<requires lib="gladeui" version="0.0"/>
<template class="GladeBaseEditor" parent="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events"/>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<signal name="realize" handler="glade_base_editor_realize_callback" swapped="no"/>
<child>
<object class="GtkPaned" id="paned">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events"/>
<property name="orientation">vertical</property>
<property name="wide_handle">True</property>
<child>
<object class="GtkPaned">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="wide_handle">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events"/>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events"/>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">always</property>
<child>
<object class="GtkTreeView" id="treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events">GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_TOUCH_MASK</property>
<property name="reorderable">True</property>
<property name="rules_hint">True</property>
<property name="search_column">2</property>
<signal name="button-press-event" handler="glade_base_editor_popup_handler" swapped="no"/>
<signal name="cursor-changed" handler="glade_base_editor_treeview_cursor_changed" swapped="no"/>
<signal name="key-press-event" handler="glade_base_editor_treeview_key_press_event" swapped="no"/>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">4</property>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">expand</property>
<child>
<object class="GtkButton" id="help_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">help-browser</property>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButtonBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="layout_style">expand</property>
<child>
<object class="GtkButton" id="add_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events"/>
<signal name="clicked" handler="glade_base_editor_add_activate" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">list-add</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="GtkButton" id="delete_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events"/>
<signal name="clicked" handler="glade_base_editor_delete_activate" swapped="no"/>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">list-remove</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="tip_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">4</property>
<property name="margin_right">4</property>
<property name="use_markup">True</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="events"/>
<property name="hscrollbar_policy">never</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events"/>
<child>
<object class="GtkGrid" id="table">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events"/>
<property name="margin_left">4</property>
<property name="margin_right">4</property>
<property name="orientation">vertical</property>
<property name="row_spacing">4</property>
<property name="column_spacing">4</property>
<child>
<object class="GtkLabel" id="message_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
<child>
<object class="GladeSignalEditor" id="signal_editor">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events"/>
</object>
<packing>
<property name="resize">True</property>
<property name="shrink">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</template>
</interface>

View File

@ -1,3 +1,4 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* glade-clipboard.c - An object for handling Cut/Copy/Paste.
*
@ -18,7 +19,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.
*/
@ -33,54 +34,47 @@
#include "glade-displayable-values.h"
struct _GladeParamSpecObjects
{
GParamSpec parent_instance;
GType type; /* Object or interface type accepted
* in this object list.
*/
struct _GladeParamSpecObjects {
GParamSpec parent_instance;
GType type; /* Object or interface type accepted
* in this object list.
*/
};
typedef struct _GladeStockItem
{
gchar *value_name;
gchar *value_nick;
gchar *clean_name;
gint value;
typedef struct _GladeStockItem {
gchar *value_name;
gchar *value_nick;
gchar *clean_name;
gint value;
} GladeStockItem;
/************************************************************
* Auto-generate the enum type for stock properties *
************************************************************/
/* Hard-coded list of stock images (and displayable translations) from gtk+ that are not stock "items" */
static const gchar *builtin_stock_images[] = {
"gtk-dialog-authentication", /* GTK_STOCK_DIALOG_AUTHENTICATION */
"gtk-dnd", /* GTK_STOCK_DND */
"gtk-dnd-multiple", /* GTK_STOCK_DND_MULTIPLE */
"gtk-color-picker", /* GTK_STOCK_COLOR_PICKER */
"gtk-directory", /* GTK_STOCK_DIRECTORY */
"gtk-file", /* GTK_STOCK_FILE */
"gtk-missing-image" /* GTK_STOCK_MISSING_IMAGE */
static const gchar *builtin_stock_images[] =
{
"gtk-dialog-authentication", /* GTK_STOCK_DIALOG_AUTHENTICATION */
"gtk-dnd", /* GTK_STOCK_DND */
"gtk-dnd-multiple", /* GTK_STOCK_DND_MULTIPLE */
"gtk-color-picker", /* GTK_STOCK_COLOR_PICKER */
"gtk-directory", /* GTK_STOCK_DIRECTORY */
"gtk-file", /* GTK_STOCK_FILE */
"gtk-missing-image" /* GTK_STOCK_MISSING_IMAGE */
};
static const gchar *builtin_stock_displayables[] = {
/* GTK_STOCK_DIALOG_AUTHENTICATION */
N_("Authentication"),
/* GTK_STOCK_DND */
N_("Drag and Drop"),
/* GTK_STOCK_DND_MULTIPLE */
N_("Drag and Drop Multiple"),
/* GTK_STOCK_COLOR_PICKER */
N_("Color Picker"),
/* GTK_STOCK_DIRECTORY */
N_("Directory"),
/* GTK_STOCK_FILE */
N_("File"),
/* GTK_STOCK_MISSING_IMAGE */
N_("Missing Image")
static const gchar *builtin_stock_displayables[] =
{
N_("Authentication"), /* GTK_STOCK_DIALOG_AUTHENTICATION */
N_("DnD"), /* GTK_STOCK_DND */
N_("DnD Multiple"), /* GTK_STOCK_DND_MULTIPLE */
N_("Color Picker"), /* GTK_STOCK_COLOR_PICKER */
N_("Directory"), /* GTK_STOCK_DIRECTORY */
N_("File"), /* GTK_STOCK_FILE */
N_("Missing Image") /* GTK_STOCK_MISSING_IMAGE */
};
static GSList *stock_prefixs = NULL;
@ -89,306 +83,254 @@ static gboolean stock_prefixs_done = FALSE;
/* FIXME: func needs documentation
*/
void
glade_standard_stock_append_prefix (const gchar * prefix)
glade_standard_stock_append_prefix (const gchar *prefix)
{
if (stock_prefixs_done)
{
g_warning
("glade_standard_stock_append_prefix should be used in catalog init-function");
return;
}
stock_prefixs = g_slist_append (stock_prefixs, g_strdup (prefix));
if (stock_prefixs_done)
{
g_warning ("glade_standard_stock_append_prefix should be used in catalog init-function");
return;
}
stock_prefixs = g_slist_append (stock_prefixs, g_strdup (prefix));
}
static GladeStockItem *
new_from_values (const gchar * name, const gchar * nick, gint value)
new_from_values (const gchar *name, const gchar *nick, gint value)
{
GladeStockItem *new_gsi = NULL;
gchar *clean_name;
size_t len = 0;
guint i = 0;
guint j = 0;
GladeStockItem *new_gsi = NULL;
gchar *clean_name;
size_t len = 0;
guint i = 0;
guint j = 0;
new_gsi = (GladeStockItem *) g_malloc0 (sizeof(GladeStockItem));
new_gsi = (GladeStockItem *) g_malloc0 (sizeof (GladeStockItem));
new_gsi->value_name = g_strdup (name);
new_gsi->value_nick = g_strdup (nick);
new_gsi->value = value;
new_gsi->value_name = g_strdup (name);
new_gsi->value_nick = g_strdup (nick);
new_gsi->value = value;
clean_name = g_strdup (name);
len = strlen (clean_name);
clean_name = g_strdup (name);
len = strlen (clean_name);
while (i + j <= len)
{
if (clean_name[i + j] == '_')
j++;
while (i+j <= len)
{
if (clean_name[i+j] == '_')
j++;
clean_name[i] = clean_name[i+j];
i++;
}
clean_name[i] = clean_name[i + j];
i++;
}
new_gsi->clean_name = g_utf8_collate_key (clean_name, i - j);
g_free (clean_name);
new_gsi->clean_name = g_utf8_collate_key (clean_name, i - j);
g_free (clean_name);
return new_gsi;
return new_gsi;
}
static gint
compare_two_gsi (gconstpointer a, gconstpointer b)
{
GladeStockItem *gsi1 = (GladeStockItem *) a;
GladeStockItem *gsi2 = (GladeStockItem *) b;
GladeStockItem *gsi1 = (GladeStockItem *) a;
GladeStockItem *gsi2 = (GladeStockItem *) b;
return strcmp (gsi1->clean_name, gsi2->clean_name);
return strcmp (gsi1->clean_name, gsi2->clean_name);
}
static GArray *
list_stock_items (gboolean include_images)
{
GtkStockItem item;
GSList *l = NULL, *stock_list = NULL, *p = NULL;
gchar *stock_id = NULL, *prefix = NULL;
gint stock_enum = 0, i = 0;
GEnumValue value;
GArray *values = NULL;
GladeStockItem *gsi;
GSList *gsi_list = NULL;
GSList *gsi_list_list = NULL;
GtkStockItem item;
GSList *l = NULL, *stock_list = NULL, *p = NULL;
gchar *stock_id = NULL, *prefix = NULL;
gint stock_enum = 0, i = 0;
GEnumValue value;
GArray *values = NULL;
GladeStockItem *gsi;
GSList *gsi_list = NULL;
GSList *gsi_list_list = NULL;
if (gdk_display_get_default () == NULL)
{
values = g_array_sized_new (TRUE, TRUE, sizeof (GEnumValue), 1);
stock_list = g_slist_reverse (gtk_stock_list_ids ());
value.value = 0;
value.value_name = "dummy";
value.value_nick = "Dummy";
g_array_append_val (values, value);
values = g_array_sized_new (TRUE, TRUE, sizeof (GEnumValue),
g_slist_length (stock_list));
return values;
}
/* We want gtk+ stock items to appear first */
if ((stock_prefixs && strcmp (stock_prefixs->data, "gtk-")) ||
stock_prefixs == NULL)
stock_prefixs = g_slist_prepend (stock_prefixs, g_strdup ("gtk-"));
for (p = stock_prefixs; p; p = g_slist_next (p))
{
prefix = p->data;
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
stock_list = g_slist_reverse (gtk_stock_list_ids ());
G_GNUC_END_IGNORE_DEPRECATIONS
for (l = stock_list; l; l = g_slist_next (l))
{
stock_id = l->data;
if (g_str_has_prefix (stock_id, prefix) == FALSE ||
gtk_stock_lookup (stock_id, &item) == FALSE )
continue;
values = g_array_sized_new (TRUE, TRUE, sizeof (GEnumValue),
g_slist_length (stock_list));
gsi = new_from_values (item.label, stock_id, stock_enum++ );
gsi_list = g_slist_insert_sorted (gsi_list, gsi, (GCompareFunc) compare_two_gsi);
}
/* We want gtk+ stock items to appear first */
if ((stock_prefixs && strcmp (stock_prefixs->data, "gtk-")) ||
stock_prefixs == NULL)
stock_prefixs = g_slist_prepend (stock_prefixs, g_strdup ("gtk-"));
gsi_list_list = g_slist_append (gsi_list_list, gsi_list);
gsi_list = NULL;
for (p = stock_prefixs; p; p = g_slist_next (p))
{
prefix = p->data;
/* Images are appended after the gtk+ group of items */
if (include_images && !strcmp (prefix, "gtk-"))
{
for (i = 0; i < G_N_ELEMENTS (builtin_stock_images); i++)
{
gsi = new_from_values (builtin_stock_images[i], builtin_stock_images[i], stock_enum++);
gsi_list = g_slist_insert_sorted (gsi_list, gsi, (GCompareFunc) compare_two_gsi);
}
gsi_list_list = g_slist_append (gsi_list_list, gsi_list);
gsi_list = NULL;
}
}
for (l = stock_list; l; l = g_slist_next (l))
{
stock_id = l->data;
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
if (g_str_has_prefix (stock_id, prefix) == FALSE ||
gtk_stock_lookup (stock_id, &item) == FALSE)
continue;
G_GNUC_END_IGNORE_DEPRECATIONS
for (p = gsi_list_list; p; p = g_slist_next (p))
{
for (l = (GSList *) p->data; l; l = g_slist_next (l))
{
gsi = (GladeStockItem *) l->data;
value.value = gsi->value;
value.value_name = g_strdup (gsi->value_name);
value.value_nick = g_strdup (gsi->value_nick);
values = g_array_append_val (values, value);
gsi = new_from_values (item.label, stock_id, stock_enum++);
gsi_list =
g_slist_insert_sorted (gsi_list, gsi,
(GCompareFunc) compare_two_gsi);
}
g_free (gsi->value_nick);
g_free (gsi->value_name);
g_free (gsi->clean_name);
g_free (gsi);
}
g_slist_free ((GSList *) p->data);
}
gsi_list_list = g_slist_append (gsi_list_list, gsi_list);
gsi_list = NULL;
g_slist_free (gsi_list_list);
/* Images are appended after the gtk+ group of items */
if (include_images && !strcmp (prefix, "gtk-"))
{
for (i = 0; i < G_N_ELEMENTS (builtin_stock_images); i++)
{
gsi =
new_from_values (builtin_stock_images[i],
builtin_stock_images[i], stock_enum++);
gsi_list =
g_slist_insert_sorted (gsi_list, gsi,
(GCompareFunc) compare_two_gsi);
}
gsi_list_list = g_slist_append (gsi_list_list, gsi_list);
gsi_list = NULL;
}
}
stock_prefixs_done = TRUE;
g_slist_free (stock_list);
for (p = gsi_list_list; p; p = g_slist_next (p))
{
for (l = (GSList *) p->data; l; l = g_slist_next (l))
{
gsi = (GladeStockItem *) l->data;
value.value = gsi->value;
value.value_name = g_strdup (gsi->value_name);
value.value_nick = g_strdup (gsi->value_nick);
values = g_array_append_val (values, value);
g_free (gsi->value_nick);
g_free (gsi->value_name);
g_free (gsi->clean_name);
g_free (gsi);
}
g_slist_free ((GSList *) p->data);
}
g_slist_free (gsi_list_list);
stock_prefixs_done = TRUE;
g_slist_free_full (stock_list, g_free);
return values;
return values;
}
static gchar *
clean_stock_name (const gchar * name)
clean_stock_name (const gchar *name)
{
gchar *clean_name, *str;
size_t len = 0;
guint i = 0;
guint j = 0;
gchar *clean_name, *str;
size_t len = 0;
guint i = 0;
guint j = 0;
g_assert (name && name[0]);
g_assert (name && name[0]);
str = g_strdup (name);
len = strlen (str);
str = g_strdup (name);
len = strlen (str);
while (i+j <= len)
{
if (str[i+j] == '_')
j++;
str[i] = str[i+j];
i++;
}
clean_name = g_strndup (str, i - j);
g_free (str);
while (i + j <= len)
{
if (str[i + j] == '_')
j++;
str[i] = str[i + j];
i++;
}
clean_name = g_strndup (str, i - j);
g_free (str);
return clean_name;
return clean_name;
}
GType
glade_standard_stock_get_type (void)
{
static GType etype = 0;
static GType etype = 0;
if (etype == 0)
{
GArray *values = list_stock_items (FALSE);
gint i, n_values = values->len;
GEnumValue *enum_values = (GEnumValue *) values->data;
GtkStockItem item;
if (etype == 0) {
GArray *values = list_stock_items (FALSE);
gint i, n_values = values->len;
GEnumValue *enum_values = (GEnumValue *)values->data;
GtkStockItem item;
etype = g_enum_register_static ("GladeStock",
(GEnumValue *) g_array_free (values,
FALSE));
etype = g_enum_register_static ("GladeStock",
(GEnumValue *)g_array_free (values, FALSE));
if (gdk_display_get_default () == NULL)
return etype;
/* Register displayable by GType, i.e. after the types been created. */
for (i = 0; i < n_values; i++)
{
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
gboolean valid_item = gtk_stock_lookup (enum_values[i].value_nick, &item);
G_GNUC_END_IGNORE_DEPRECATIONS
if (valid_item)
{
gchar *clean_name = clean_stock_name (item.label);
if (!glade_get_displayable_value (etype, enum_values[i].value_nick))
glade_register_translated_value (etype, enum_values[i].value_nick, clean_name);
g_free (clean_name);
}
}
}
return etype;
/* Register displayable by GType, i.e. after the types been created. */
for (i = 0; i < n_values; i++)
{
if (gtk_stock_lookup (enum_values[i].value_nick, &item))
{
gchar *clean_name = clean_stock_name (item.label);
glade_register_translated_value (etype, enum_values[i].value_nick, clean_name);
g_free (clean_name);
}
}
}
return etype;
}
GType
glade_standard_stock_image_get_type (void)
{
static GType etype = 0;
static GType etype = 0;
if (etype == 0)
{
GArray *values = list_stock_items (TRUE);
gint i, n_values = values->len;
GEnumValue *enum_values = (GEnumValue *) values->data;
GtkStockItem item;
if (etype == 0) {
GArray *values = list_stock_items (TRUE);
gint i, n_values = values->len;
GEnumValue *enum_values = (GEnumValue *)values->data;
GtkStockItem item;
etype = g_enum_register_static ("GladeStockImage",
(GEnumValue *) g_array_free (values,
FALSE));
etype = g_enum_register_static ("GladeStockImage",
(GEnumValue *)g_array_free (values, FALSE));
if (gdk_display_get_default () == NULL)
return etype;
/* Register displayable by GType, i.e. after the types been created. */
for (i = 0; i < n_values; i++)
{
if (gtk_stock_lookup (enum_values[i].value_nick, &item))
{
gchar *clean_name = clean_stock_name (item.label);
/* Register displayable by GType, i.e. after the types been created. */
for (i = 0; i < n_values; i++)
{
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
gboolean valid_item = gtk_stock_lookup (enum_values[i].value_nick, &item);
G_GNUC_END_IGNORE_DEPRECATIONS
if (valid_item)
{
gchar *clean_name = clean_stock_name (item.label);
/* These are translated, we just cut out the mnemonic underscores */
glade_register_translated_value (etype, enum_values[i].value_nick, clean_name);
g_free (clean_name);
}
}
/* These are translated, we just cut out the mnemonic underscores */
if (!glade_get_displayable_value (etype, enum_values[i].value_nick))
glade_register_translated_value (etype, enum_values[i].value_nick, clean_name);
g_free (clean_name);
}
}
for (i = 0; i < G_N_ELEMENTS (builtin_stock_images); i++)
{
/* these ones are translated from glade */
if (!glade_get_displayable_value (etype, builtin_stock_images[i]))
glade_register_displayable_value (etype,
builtin_stock_images[i],
GETTEXT_PACKAGE,
builtin_stock_displayables[i]);
}
}
return etype;
for (i = 0; i < G_N_ELEMENTS (builtin_stock_images); i++)
{
/* these ones are translated from glade3 */
glade_register_displayable_value (etype,
builtin_stock_images[i], GETTEXT_PACKAGE,
builtin_stock_displayables[i]);
}
}
return etype;
}
/**
* glade_standard_stock_spec:
*
* Returns: (transfer full): a #GParamSpec describing a list of builtin stock item
*/
GParamSpec *
glade_standard_stock_spec (void)
{
return g_param_spec_enum ("stock", _("Stock"),
_("A builtin stock item"),
GLADE_TYPE_STOCK, 0, G_PARAM_READWRITE);
return g_param_spec_enum ("stock", _("Stock"),
_("A builtin stock item"),
GLADE_TYPE_STOCK,
0, G_PARAM_READWRITE);
}
/**
* glade_standard_stock_image_spec:
*
* Returns: (transfer full): a #GParamSpec describing a list of builtin stock image
*/
GParamSpec *
glade_standard_stock_image_spec (void)
{
return g_param_spec_enum ("stock-image", _("Stock Image"),
_("A builtin stock image"),
GLADE_TYPE_STOCK_IMAGE, 0, G_PARAM_READWRITE);
return g_param_spec_enum ("stock-image", _("Stock Image"),
_("A builtin stock image"),
GLADE_TYPE_STOCK_IMAGE,
0, G_PARAM_READWRITE);
}
/****************************************************************
@ -398,71 +340,81 @@ glade_standard_stock_image_spec (void)
GType
glade_glist_get_type (void)
{
static GType type_id = 0;
static GType type_id = 0;
if (!type_id)
type_id = g_boxed_type_register_static
("GladeGList",
(GBoxedCopyFunc) g_list_copy, (GBoxedFreeFunc) g_list_free);
return type_id;
if (!type_id)
type_id = g_boxed_type_register_static
("GladeGList",
(GBoxedCopyFunc) g_list_copy,
(GBoxedFreeFunc) g_list_free);
return type_id;
}
/****************************************************************
* Built-in GladeParamSpecObjects for object list properties *
* (Used as a pspec to describe an AtkRelationSet, but can *
* (Used as a pspec to desctibe an AtkRelationSet, but can *
* for any object list property) *
****************************************************************/
static void
param_objects_init (GParamSpec * pspec)
param_objects_init (GParamSpec *pspec)
{
GladeParamSpecObjects *ospec = GLADE_PARAM_SPEC_OBJECTS (pspec);
ospec->type = G_TYPE_OBJECT;
GladeParamSpecObjects *ospec = GLADE_PARAM_SPEC_OBJECTS (pspec);
ospec->type = G_TYPE_OBJECT;
}
static void
param_objects_set_default (GParamSpec * pspec, GValue * value)
param_objects_set_default (GParamSpec *pspec,
GValue *value)
{
if (value->data[0].v_pointer != NULL)
{
g_free (value->data[0].v_pointer);
}
value->data[0].v_pointer = NULL;
if (value->data[0].v_pointer != NULL)
{
g_free (value->data[0].v_pointer);
}
value->data[0].v_pointer = NULL;
}
static gboolean
param_objects_validate (GParamSpec * pspec, GValue * value)
param_objects_validate (GParamSpec *pspec,
GValue *value)
{
GladeParamSpecObjects *ospec = GLADE_PARAM_SPEC_OBJECTS (pspec);
GList *objects, *list, *toremove = NULL;
GObject *object;
GladeParamSpecObjects *ospec = GLADE_PARAM_SPEC_OBJECTS (pspec);
GList *objects, *list, *toremove = NULL;
GObject *object;
objects = value->data[0].v_pointer;
objects = value->data[0].v_pointer;
for (list = objects; list; list = list->next)
{
object = list->data;
for (list = objects; list; list = list->next)
{
object = list->data;
if (!(G_OBJECT_TYPE (object) == ospec->type ||
g_type_is_a (G_OBJECT_TYPE (object), ospec->type)))
toremove = g_list_prepend (toremove, object);
}
if (G_TYPE_IS_INTERFACE (ospec->type) &&
glade_util_class_implements_interface
(G_OBJECT_TYPE (object), ospec->type) == FALSE)
toremove = g_list_prepend (toremove, object);
else if (G_TYPE_IS_INTERFACE (ospec->type) == FALSE &&
g_type_is_a (G_OBJECT_TYPE (object),
ospec->type) == FALSE)
toremove = g_list_prepend (toremove, object);
for (list = toremove; list; list = list->next)
{
object = list->data;
objects = g_list_remove (objects, object);
}
if (toremove)
g_list_free (toremove);
}
value->data[0].v_pointer = objects;
for (list = toremove; list; list = list->next)
{
object = list->data;
objects = g_list_remove (objects, object);
}
if (toremove) g_list_free (toremove);
value->data[0].v_pointer = objects;
return toremove != NULL;
return toremove != NULL;
}
static gint
param_objects_values_cmp (GParamSpec * pspec,
const GValue * value1, const GValue * value2)
param_objects_values_cmp (GParamSpec *pspec,
const GValue *value1,
const GValue *value2)
{
guint8 *p1 = value1->data[0].v_pointer;
guint8 *p2 = value2->data[0].v_pointer;
@ -475,179 +427,160 @@ param_objects_values_cmp (GParamSpec * pspec,
GType
glade_param_objects_get_type (void)
{
static GType objects_type = 0;
static GType objects_type = 0;
if (objects_type == 0)
{
static /* const */ GParamSpecTypeInfo pspec_info = {
sizeof (GladeParamSpecObjects), /* instance_size */
16, /* n_preallocs */
param_objects_init, /* instance_init */
0xdeadbeef, /* value_type, assigned further down */
NULL, /* finalize */
param_objects_set_default, /* value_set_default */
param_objects_validate, /* value_validate */
param_objects_values_cmp, /* values_cmp */
};
pspec_info.value_type = GLADE_TYPE_GLIST;
if (objects_type == 0)
{
static /* const */ GParamSpecTypeInfo pspec_info = {
sizeof (GladeParamSpecObjects), /* instance_size */
16, /* n_preallocs */
param_objects_init, /* instance_init */
0xdeadbeef, /* value_type, assigned further down */
NULL, /* finalize */
param_objects_set_default, /* value_set_default */
param_objects_validate, /* value_validate */
param_objects_values_cmp, /* values_cmp */
};
pspec_info.value_type = GLADE_TYPE_GLIST;
objects_type = g_param_type_register_static
("GladeParamObjects", &pspec_info);
}
return objects_type;
objects_type = g_param_type_register_static
("GladeParamObjects", &pspec_info);
}
return objects_type;
}
/**
* glade_param_spec_objects:
*
* Returns: (transfer full): a #GParamSpec describing a list of #GObject
*/
GParamSpec *
glade_param_spec_objects (const gchar * name,
const gchar * nick,
const gchar * blurb,
GType accepted_type, GParamFlags flags)
glade_param_spec_objects (const gchar *name,
const gchar *nick,
const gchar *blurb,
GType accepted_type,
GParamFlags flags)
{
GladeParamSpecObjects *pspec;
pspec = g_param_spec_internal (GLADE_TYPE_PARAM_OBJECTS,
name, nick, blurb, flags);
name, nick, blurb, flags);
pspec->type = accepted_type;
return G_PARAM_SPEC (pspec);
}
void
glade_param_spec_objects_set_type (GladeParamSpecObjects * pspec, GType type)
glade_param_spec_objects_set_type (GladeParamSpecObjects *pspec,
GType type)
{
pspec->type = type;
pspec->type = type;
}
GType
glade_param_spec_objects_get_type (GladeParamSpecObjects * pspec)
glade_param_spec_objects_get_type (GladeParamSpecObjects *pspec)
{
return pspec->type;
return pspec->type;
}
/**
* glade_standard_objects_spec:
*
* This was developed for the purpose of holding a list
/* This was developed for the purpose of holding a list
* of 'targets' in an AtkRelation (we are setting it up
* as a property)
*
* Returns: (transfer full): a #GParamSpec describing a list of #GObject
*/
GParamSpec *
glade_standard_objects_spec (void)
{
return glade_param_spec_objects ("objects", _("Objects"),
_("A list of objects"),
G_TYPE_OBJECT, G_PARAM_READWRITE);
return glade_param_spec_objects ("objects", _("Objects"),
_("A list of objects"),
G_TYPE_OBJECT,
G_PARAM_READWRITE);
}
/**
* glade_standard_pixbuf_spec:
*
* Returns: (transfer full): a #GParamSpec describing a #GdkPixbuf
*/
/* Pixbuf Type */
GParamSpec *
glade_standard_pixbuf_spec (void)
{
return g_param_spec_object ("pixbuf", _("Image File Name"),
_("Enter a filename, relative path or full path to "
"load the image"), GDK_TYPE_PIXBUF,
G_PARAM_READWRITE);
return g_param_spec_object ("pixbuf", _("Image File Name"),
_("Enter a filename, relative or fullpath to "
"load the image"), GDK_TYPE_PIXBUF,
G_PARAM_READWRITE);
}
/**
* glade_standard_gdkcolor_spec:
*
* Returns: (transfer full): a #GParamSpec describing a #GdkColor
*/
/* GdkColor */
GParamSpec *
glade_standard_gdkcolor_spec (void)
{
return g_param_spec_boxed ("gdkcolor", _("Color"),
_("A GDK color value"), GDK_TYPE_COLOR,
G_PARAM_READWRITE);
return g_param_spec_boxed ("gdkcolor", _("GdkColor"),
_("A gdk color value"), GDK_TYPE_COLOR,
G_PARAM_READWRITE);
}
/****************************************************************
* Basic types follow *
****************************************************************/
/**
* glade_standard_int_spec:
*
* Returns: (transfer full): a #GParamSpec describing an int
*/
GParamSpec *
glade_standard_int_spec (void)
{
return g_param_spec_int ("int", "Integer",
"An integer value",
G_MININT, G_MAXINT, 0, G_PARAM_READWRITE);
return g_param_spec_int ("int", _("Integer"),
_("An integer value"),
G_MININT, G_MAXINT,
0, G_PARAM_READWRITE);
}
/**
* glade_standard_uint_spec:
*
* Returns: (transfer full): a #GParamSpec describing an uint
*/
GParamSpec *
glade_standard_uint_spec (void)
{
return g_param_spec_uint ("uint", "Unsigned Integer",
"An unsigned integer value",
0, G_MAXUINT, 0, G_PARAM_READWRITE);
return g_param_spec_uint ("uint", _("Unsigned Integer"),
_("An unsigned integer value"),
0, G_MAXUINT, 0, G_PARAM_READWRITE);
}
/**
* glade_standard_string_spec:
*
* Returns: (transfer full): a #GParamSpec describing a string
*/
GParamSpec *
glade_standard_string_spec (void)
{
return g_param_spec_string ("string", _("String"),
_("An entry"), "", G_PARAM_READWRITE);
return g_param_spec_string ("string", _("String"),
_("An entry"), "",
G_PARAM_READWRITE);
}
/**
* glade_standard_strv_spec:
*
* Returns: (transfer full): a #GParamSpec describing an array of strings
*/
GParamSpec *
glade_standard_strv_spec (void)
{
return g_param_spec_boxed ("strv", "Strv",
"String array", G_TYPE_STRV, G_PARAM_READWRITE);
return g_param_spec_boxed ("strv", _("Strv"),
_("String array"),
G_TYPE_STRV,
G_PARAM_READWRITE);
}
/**
* glade_standard_float_spec:
*
* Returns: (transfer full): a #GParamSpec describing a float
*/
GParamSpec *
glade_standard_float_spec (void)
{
return g_param_spec_float ("float", "Float",
"A floating point entry",
0.0F, G_MAXFLOAT, 0.0F, G_PARAM_READWRITE);
return g_param_spec_float ("float", _("Float"),
_("A floating point entry"),
0.0F, G_MAXFLOAT, 0.0F,
G_PARAM_READWRITE);
}
/**
* glade_standard_boolean_spec:
*
* Returns: (transfer full): a #GParamSpec describing a boolean
*/
GParamSpec *
glade_standard_boolean_spec (void)
{
return g_param_spec_boolean ("boolean", "Boolean",
"A boolean value", FALSE, G_PARAM_READWRITE);
return g_param_spec_boolean ("boolean", _("Boolean"),
_("A boolean value"), FALSE,
G_PARAM_READWRITE);
}
GType
glade_item_appearance_get_type (void)
{
static GType etype = 0;
if (etype == 0)
{
static const GEnumValue values[] = {
{ GLADE_ITEM_ICON_AND_LABEL, "GLADE_ITEM_ICON_AND_LABEL", "icon-and-label" },
{ GLADE_ITEM_ICON_ONLY, "GLADE_ITEM_ICON_ONLY", "icon-only" },
{ GLADE_ITEM_LABEL_ONLY, "GLADE_ITEM_LABEL_ONLY", "label-only" },
{ 0, NULL, NULL }
};
etype = g_enum_register_static ("GladeItemAppearance", values);
}
return etype;
}

View File

@ -1,27 +1,4 @@
/*
* glade-clipboard.c - An object for handling Cut/Copy/Paste.
*
* 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.
*/
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
#ifndef __GLADE_BUILTINS_H__
#define __GLADE_BUILTINS_H__
@ -35,8 +12,9 @@ typedef struct _GladeParamSpecObjects GladeParamSpecObjects;
#define GLADE_TYPE_STOCK (glade_standard_stock_get_type())
#define GLADE_TYPE_STOCK_IMAGE (glade_standard_stock_image_get_type())
#define GLADE_TYPE_GLIST (glade_glist_get_type())
#define GLADE_TYPE_PARAM_OBJECTS (glade_param_objects_get_type())
#define GLADE_TYPE_GLIST (glade_glist_get_type())
#define GLADE_TYPE_PARAM_OBJECTS (glade_param_objects_get_type())
#define GLADE_TYPE_ITEM_APPEARANCE (glade_item_appearance_get_type())
#define GLADE_IS_STOCK(pspec) \
(G_TYPE_CHECK_INSTANCE_TYPE ((pspec), GLADE_TYPE_STOCK))
@ -55,15 +33,16 @@ GType glade_standard_stock_get_type (void) G_GNUC_CONST;
GType glade_standard_stock_image_get_type (void) G_GNUC_CONST;
GType glade_glist_get_type (void) G_GNUC_CONST;
GType glade_param_objects_get_type (void) G_GNUC_CONST;
GType glade_item_appearance_get_type (void) G_GNUC_CONST;
GParamSpec *glade_param_spec_objects (const gchar *name,
const gchar *nick,
const gchar *blurb,
GType accepted_type,
GParamFlags flags);
const gchar *nick,
const gchar *blurb,
GType accepted_type,
GParamFlags flags);
void glade_param_spec_objects_set_type (GladeParamSpecObjects *pspec,
GType type);
GType type);
GType glade_param_spec_objects_get_type (GladeParamSpecObjects *pspec);
GParamSpec *glade_standard_pixbuf_spec (void);

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,4 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* Copyright (C) 2001 Ximian, Inc.
* Copyright (C) 2004 Imendio AB
@ -42,32 +43,44 @@ typedef struct _GladeWidgetGroup GladeWidgetGroup;
* @name: The name of the catalog
*
* Called once at glade startup time for every catalog, catalogs
* are initialized in order of dependencies.
* are initialized in order of dependancies.
*/
typedef void (*GladeCatalogInitFunc) (const gchar *name);
/**
* GladeProjectConvertFunc:
* @project: A #GladeProject
* @new_format: The format to convert @project to
*
* Generally format transperency is implemented at load/save time,
* but if some objects need to be setup differently, or some new
* objects created (like real GtkAdjustment objects for old inline
* property values) this is the place to do those things, be careful
* to use the GladeCommand api because conversions are undoable.
*
* Returns: FALSE if any errors occurred during the conversion.
*/
typedef gboolean (*GladeProjectConvertFunc) (GladeProject *project,
GladeProjectFormat new_format);
typedef struct {
gint major;
gint minor;
gint major;
gint minor;
} GladeTargetableVersion;
void glade_catalog_add_path (const gchar *path);
void glade_catalog_remove_path (const gchar *path);
const GList *glade_catalog_get_extra_paths (void);
const GList *glade_catalog_load_all (void);
const gchar *glade_catalog_get_name (GladeCatalog *catalog);
const gchar *glade_catalog_get_prefix (GladeCatalog *catalog);
const gchar *glade_catalog_get_icon_prefix(GladeCatalog *catalog);
const gchar *glade_catalog_get_domain (GladeCatalog *catalog);
const gchar *glade_catalog_get_book (GladeCatalog *catalog);
G_CONST_RETURN gchar *glade_catalog_get_name (GladeCatalog *catalog);
G_CONST_RETURN gchar *glade_catalog_get_icon_prefix(GladeCatalog *catalog);
G_CONST_RETURN gchar *glade_catalog_get_domain (GladeCatalog *catalog);
G_CONST_RETURN gchar *glade_catalog_get_book (GladeCatalog *catalog);
GList *glade_catalog_get_targets (GladeCatalog *catalog);
guint16 glade_catalog_get_major_version (GladeCatalog *catalog);
guint16 glade_catalog_get_minor_version (GladeCatalog *catalog);
gint glade_catalog_get_major_version (GladeCatalog *catalog);
gint glade_catalog_get_minor_version (GladeCatalog *catalog);
GList *glade_catalog_get_widget_groups (GladeCatalog *catalog);
@ -86,6 +99,14 @@ gboolean glade_widget_group_get_expanded (GladeWidgetGroup *group);
const GList *glade_widget_group_get_adaptors (GladeWidgetGroup *group);
gboolean glade_catalog_convert_project (GladeCatalog *catalog,
GladeProject *project,
GladeProjectFormat new_format);
gboolean glade_catalog_supports_libglade (GladeCatalog *catalog);
gboolean glade_catalog_supports_gtkbuilder (GladeCatalog *catalog);
G_END_DECLS
#endif /* __GLADE_CATALOG_H__ */

View File

@ -1,239 +0,0 @@
/*
* Copyright (C) 2008 Tristan Van Berkom.
*
* 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 <tvb@gnome.org>
*/
#include "config.h"
#include "glade-cell-renderer-icon.h"
#include "glade-marshallers.h"
static void glade_cell_renderer_icon_get_property (GObject *object,
guint param_id,
GValue *value,
GParamSpec *pspec);
static void glade_cell_renderer_icon_set_property (GObject *object,
guint param_id,
const GValue *value,
GParamSpec *pspec);
static gboolean glade_cell_renderer_icon_activate (GtkCellRenderer *cell,
GdkEvent *event,
GtkWidget *widget,
const gchar *path,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
GtkCellRendererState flags);
typedef struct _GladeCellRendererIconPrivate
{
guint active : 1;
guint activatable : 1;
} GladeCellRendererIconPrivate;
enum
{
ACTIVATE,
LAST_SIGNAL
};
enum
{
PROP_0,
PROP_ACTIVATABLE,
PROP_ACTIVE,
N_PROPERTIES
};
static GParamSpec *properties[N_PROPERTIES];
static guint icon_cell_signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE_WITH_PRIVATE (GladeCellRendererIcon,
glade_cell_renderer_icon,
GTK_TYPE_CELL_RENDERER_PIXBUF)
static void glade_cell_renderer_icon_init (GladeCellRendererIcon *cellicon)
{
GladeCellRendererIconPrivate *priv = glade_cell_renderer_icon_get_instance_private (cellicon);
priv->activatable = TRUE;
priv->active = FALSE;
g_object_set (G_OBJECT (cellicon), "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE,
NULL);
}
static void
glade_cell_renderer_icon_class_init (GladeCellRendererIconClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (class);
object_class->get_property = glade_cell_renderer_icon_get_property;
object_class->set_property = glade_cell_renderer_icon_set_property;
cell_class->activate = glade_cell_renderer_icon_activate;
properties[PROP_ACTIVE] =
g_param_spec_boolean ("active", "Icon state",
"The icon state of the button",
FALSE,
G_PARAM_READABLE | G_PARAM_WRITABLE);
properties[PROP_ACTIVATABLE] =
g_param_spec_boolean ("activatable",
"Activatable",
"The icon button can be activated",
TRUE,
G_PARAM_READABLE | G_PARAM_WRITABLE);
/* Install all properties */
g_object_class_install_properties (object_class, N_PROPERTIES, properties);
icon_cell_signals[ACTIVATE] =
g_signal_new ("activate",
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GladeCellRendererIconClass, activate),
NULL, NULL,
_glade_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING);
}
static void
glade_cell_renderer_icon_get_property (GObject *object,
guint param_id,
GValue *value,
GParamSpec *pspec)
{
GladeCellRendererIcon *cellicon = GLADE_CELL_RENDERER_ICON (object);
GladeCellRendererIconPrivate *priv = glade_cell_renderer_icon_get_instance_private (cellicon);
switch (param_id)
{
case PROP_ACTIVE:
g_value_set_boolean (value, priv->active);
break;
case PROP_ACTIVATABLE:
g_value_set_boolean (value, priv->activatable);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
}
static void
glade_cell_renderer_icon_set_property (GObject *object,
guint param_id,
const GValue *value,
GParamSpec *pspec)
{
GladeCellRendererIcon *cellicon = GLADE_CELL_RENDERER_ICON (object);
GladeCellRendererIconPrivate *priv = glade_cell_renderer_icon_get_instance_private (cellicon);
switch (param_id)
{
case PROP_ACTIVE:
priv->active = g_value_get_boolean (value);
break;
case PROP_ACTIVATABLE:
priv->activatable = g_value_get_boolean (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
break;
}
}
GtkCellRenderer *
glade_cell_renderer_icon_new (void)
{
return g_object_new (GLADE_TYPE_CELL_RENDERER_ICON, NULL);
}
static gint
glade_cell_renderer_icon_activate (GtkCellRenderer *cell,
GdkEvent *event,
GtkWidget *widget,
const gchar *path,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
GtkCellRendererState flags)
{
GladeCellRendererIcon *cellicon = GLADE_CELL_RENDERER_ICON (cell);
GladeCellRendererIconPrivate *priv = glade_cell_renderer_icon_get_instance_private (cellicon);
if (priv->activatable)
{
g_signal_emit (cell, icon_cell_signals[ACTIVATE], 0, path);
return TRUE;
}
return FALSE;
}
gboolean
glade_cell_renderer_icon_get_active (GladeCellRendererIcon *icon)
{
GladeCellRendererIconPrivate *priv = glade_cell_renderer_icon_get_instance_private (icon);
g_return_val_if_fail (GLADE_IS_CELL_RENDERER_ICON (icon), FALSE);
return priv->active;
}
void
glade_cell_renderer_icon_set_active (GladeCellRendererIcon *icon,
gboolean setting)
{
GladeCellRendererIconPrivate *priv = glade_cell_renderer_icon_get_instance_private (icon);
g_return_if_fail (GLADE_IS_CELL_RENDERER_ICON (icon));
if (priv->active != setting)
{
priv->active = setting ? TRUE : FALSE;
g_object_notify_by_pspec (G_OBJECT (icon), properties[PROP_ACTIVE]);
}
}
gboolean
glade_cell_renderer_icon_get_activatable (GladeCellRendererIcon *icon)
{
GladeCellRendererIconPrivate *priv = glade_cell_renderer_icon_get_instance_private (icon);
g_return_val_if_fail (GLADE_IS_CELL_RENDERER_ICON (icon), FALSE);
return priv->activatable;
}
void
glade_cell_renderer_icon_set_activatable (GladeCellRendererIcon *icon,
gboolean setting)
{
GladeCellRendererIconPrivate *priv = glade_cell_renderer_icon_get_instance_private (icon);
g_return_if_fail (GLADE_IS_CELL_RENDERER_ICON (icon));
if (priv->activatable != setting)
{
priv->activatable = setting ? TRUE : FALSE;
g_object_notify_by_pspec (G_OBJECT (icon), properties[PROP_ACTIVATABLE]);
}
}

View File

@ -1,54 +0,0 @@
/*
* Copyright (C) 2010 Tristan Van Berkom.
*
* 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 <tvb@gnome.org>
*/
#ifndef __GLADE_CELL_RENDERER_ICON_H__
#define __GLADE_CELL_RENDERER_ICON_H__
#include <gtk/gtk.h>
G_BEGIN_DECLS
#define GLADE_TYPE_CELL_RENDERER_ICON glade_cell_renderer_icon_get_type ()
G_DECLARE_DERIVABLE_TYPE (GladeCellRendererIcon, glade_cell_renderer_icon, GLADE, CELL_RENDERER_ICON, GtkCellRendererPixbuf)
struct _GladeCellRendererIconClass
{
GtkCellRendererPixbufClass parent_class;
void (* activate) (GladeCellRendererIcon *cell_renderer_icon,
const gchar *path);
};
GtkCellRenderer *glade_cell_renderer_icon_new (void);
gboolean glade_cell_renderer_icon_get_active (GladeCellRendererIcon *icon);
void glade_cell_renderer_icon_set_active (GladeCellRendererIcon *icon,
gboolean setting);
gboolean glade_cell_renderer_icon_get_activatable (GladeCellRendererIcon *icon);
void glade_cell_renderer_icon_set_activatable (GladeCellRendererIcon *icon,
gboolean setting);
G_END_DECLS
#endif /* __GLADE_CELL_RENDERER_ICON_H__ */

View File

@ -0,0 +1,388 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* glade-clipboard-view.c - The View for the Clipboard.
*
* Copyright (C) 2001 The GNOME Foundation.
*
* Author(s):
* Archit Baweja <bighead@users.sourceforge.net>
*
* 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.
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
/**
* SECTION:glade-clipboard-view
* @Short_Description: A widget to view and control the #GladeClipboard.
*
* The #GladeClipboardView is a widget to view the #GladeWidget objects
* in the #GladeClipboard; the user can paste or delete objects on the clipboard.
*/
#include <glib/gi18n-lib.h>
#include "glade.h"
#include "glade-clipboard.h"
#include "glade-clipboard-view.h"
#include "glade-widget.h"
#include "glade-widget-adaptor.h"
#include "glade-popup.h"
const gint GLADE_CLIPBOARD_VIEW_WIDTH = 230;
const gint GLADE_CLIPBOARD_VIEW_HEIGHT = 200;
static void
glade_clipboard_view_class_init (GladeClipboardViewClass *klass)
{
}
static void
glade_clipboard_view_init (GladeClipboardView *view)
{
view->widget = NULL;
view->clipboard = NULL;
view->model = NULL;
}
GType
glade_clipboard_view_get_type ()
{
static GType type = 0;
if (!type) {
static const GTypeInfo info = {
sizeof (GladeClipboardViewClass),
(GBaseInitFunc) NULL,
(GBaseFinalizeFunc) NULL,
(GClassInitFunc) glade_clipboard_view_class_init,
(GClassFinalizeFunc) NULL,
NULL,
sizeof (GladeClipboardView),
0,
(GInstanceInitFunc) glade_clipboard_view_init
};
type = g_type_register_static (GTK_TYPE_WINDOW, "GladeClipboardView", &info, 0);
}
return type;
}
static void
gcv_foreach_add_selection (GtkTreeModel *model,
GtkTreePath *path,
GtkTreeIter *iter,
gpointer data)
{
GladeWidget *widget = NULL;
GladeClipboardView *view = (GladeClipboardView *)data;
gtk_tree_model_get (model, iter, 0, &widget, -1);
glade_clipboard_selection_add (view->clipboard, (widget));
}
static void
glade_clipboard_view_selection_changed_cb (GtkTreeSelection *sel,
GladeClipboardView *view)
{
if (view->updating == FALSE)
{
glade_clipboard_selection_clear (view->clipboard);
gtk_tree_selection_selected_foreach
(sel, gcv_foreach_add_selection, view);
}
}
static void
glade_clipboard_view_populate_model (GladeClipboardView *view)
{
GladeClipboard *clipboard;
GtkTreeModel *model;
GladeWidget *widget;
GList *list;
GtkTreeIter iter;
clipboard = GLADE_CLIPBOARD (view->clipboard);
model = GTK_TREE_MODEL (view->model);
for (list = clipboard->widgets; list; list = list->next)
{
widget = list->data;
view->updating = TRUE;
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, widget, -1);
view->updating = FALSE;
}
}
static void
glade_clipboard_view_cell_function (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
{
gboolean is_icon = GPOINTER_TO_INT (data);
GladeWidget *widget;
gtk_tree_model_get (tree_model, iter, 0, &widget, -1);
g_return_if_fail (GLADE_IS_WIDGET (widget));
g_return_if_fail (widget->name != NULL);
if (is_icon)
g_object_set (G_OBJECT (cell),
"icon-name", widget->adaptor->icon_name,
"stock-size", GTK_ICON_SIZE_MENU,
NULL);
else
g_object_set (G_OBJECT (cell),
"text", widget->name,
NULL);
}
static gint
glade_clipboard_view_button_press_cb (GtkWidget *widget,
GdkEventButton *event,
GladeClipboardView *view)
{
GtkTreeView *tree_view = GTK_TREE_VIEW (widget);
GtkTreePath *path = NULL;
gboolean handled = FALSE;
if (event->window == gtk_tree_view_get_bin_window (tree_view) &&
gtk_tree_view_get_path_at_pos (tree_view,
(gint) event->x, (gint) event->y,
&path, NULL,
NULL, NULL) && path != NULL)
{
GtkTreeIter iter;
GladeWidget *widget = NULL;
if (gtk_tree_model_get_iter (GTK_TREE_MODEL (view->model),
&iter, path))
{
/* Alright, now we can obtain
* the widget from the iter.
*/
gtk_tree_model_get (GTK_TREE_MODEL (view->model), &iter,
0, &widget, -1);
if (widget != NULL &&
event->button == 3)
{
glade_popup_clipboard_pop (widget, event);
handled = TRUE;
}
gtk_tree_path_free (path);
}
}
return handled;
}
static void
glade_clipboard_view_create_tree_view (GladeClipboardView *view)
{
GtkTreeSelection *sel;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
view->widget =
gtk_tree_view_new_with_model (GTK_TREE_MODEL (view->model));
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, _("Widget"));
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_start (column, renderer, FALSE);
gtk_tree_view_column_set_cell_data_func (column, renderer,
glade_clipboard_view_cell_function,
GINT_TO_POINTER (1), NULL);
renderer = gtk_cell_renderer_text_new ();
g_object_set (G_OBJECT (renderer),
"xpad", 6, NULL);
gtk_tree_view_column_pack_start (column, renderer, TRUE);
gtk_tree_view_column_set_cell_data_func (column, renderer,
glade_clipboard_view_cell_function,
GINT_TO_POINTER (0), NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (view->widget), column);
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->widget));
gtk_tree_selection_set_mode (sel, GTK_SELECTION_MULTIPLE);
g_signal_connect_data (G_OBJECT (sel), "changed",
G_CALLBACK (glade_clipboard_view_selection_changed_cb),
view, NULL, 0);
/* Popup menu */
g_signal_connect (G_OBJECT (view->widget), "button-press-event",
G_CALLBACK (glade_clipboard_view_button_press_cb), view);
}
static void
glade_clipboard_view_construct (GladeClipboardView *view)
{
GtkWidget *scrolled_window, *viewport;
view->model = gtk_list_store_new (1, G_TYPE_POINTER);
glade_clipboard_view_populate_model (view);
glade_clipboard_view_create_tree_view (view);
glade_clipboard_view_refresh_sel (view);
viewport = gtk_viewport_new (NULL, NULL);
gtk_viewport_set_shadow_type (GTK_VIEWPORT (viewport), GTK_SHADOW_OUT);
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type
(GTK_SCROLLED_WINDOW (scrolled_window), GTK_SHADOW_IN);
gtk_container_set_border_width (GTK_CONTAINER (scrolled_window),
6);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (scrolled_window), view->widget);
gtk_container_add (GTK_CONTAINER (viewport), scrolled_window);
gtk_container_add (GTK_CONTAINER (view), viewport);
gtk_window_set_default_size (GTK_WINDOW (view),
GLADE_CLIPBOARD_VIEW_WIDTH,
GLADE_CLIPBOARD_VIEW_HEIGHT);
gtk_window_set_type_hint (GTK_WINDOW (view), GDK_WINDOW_TYPE_HINT_UTILITY);
gtk_widget_show_all (scrolled_window);
return;
}
/**
* glade_clipboard_view_new:
* @clipboard: a #GladeClipboard
*
* Create a new #GladeClipboardView widget for @clipboard.
*
* Returns: a new #GladeClipboardView cast to be a #GtkWidget
*/
GtkWidget *
glade_clipboard_view_new (GladeClipboard *clipboard)
{
GladeClipboardView *view;
g_return_val_if_fail (GLADE_IS_CLIPBOARD (clipboard), NULL);
view = gtk_type_new (glade_clipboard_view_get_type ());
view->clipboard = clipboard;
glade_clipboard_view_construct (view);
return GTK_WIDGET (view);
}
/**
* glade_clipboard_view_add:
* @view: a #GladeClipboardView
* @widget: a #GladeWidget
*
* Adds @widget to @view.
*/
void
glade_clipboard_view_add (GladeClipboardView *view, GladeWidget *widget)
{
GtkTreeIter iter;
g_return_if_fail (GLADE_IS_CLIPBOARD_VIEW (view));
g_return_if_fail (GLADE_IS_WIDGET (widget));
view->updating = TRUE;
gtk_list_store_append (view->model, &iter);
gtk_list_store_set (view->model, &iter, 0, widget, -1);
view->updating = FALSE;
}
/**
* glade_cliboard_view_remove:
* @view: a #GladeClipboardView
* @widget: a #GladeWidget
*
* Removes @widget from @view.
*/
void
glade_clipboard_view_remove (GladeClipboardView *view, GladeWidget *widget)
{
GtkTreeIter iter;
GtkTreeModel *model;
GladeWidget *clip_widget;
g_return_if_fail (GLADE_IS_CLIPBOARD_VIEW (view));
g_return_if_fail (GLADE_IS_WIDGET (widget));
model = GTK_TREE_MODEL (view->model);
if (gtk_tree_model_get_iter_first (model, &iter))
{
do
{
gtk_tree_model_get (model, &iter, 0, &clip_widget, -1);
if (widget == clip_widget)
break;
}
while (gtk_tree_model_iter_next (model, &iter));
}
view->updating = TRUE;
gtk_list_store_remove (view->model, &iter);
view->updating = FALSE;
}
/**
* glade_clipboard_view_refresh_sel:
* @view: a #GladeClipboardView
*
* Synchronizes the treeview selection to the clipboard selection.
*/
void
glade_clipboard_view_refresh_sel (GladeClipboardView *view)
{
GladeWidget *widget;
GtkTreeSelection *sel;
GList *list;
GtkTreeIter *iter;
g_return_if_fail (GLADE_IS_CLIPBOARD_VIEW (view));
if (view->updating) return;
view->updating = TRUE;
sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (view->widget));
gtk_tree_selection_unselect_all (sel);
for (list = view->clipboard->selection;
list && list->data; list = list->next)
{
widget = list->data;
if ((iter = glade_util_find_iter_by_widget
(GTK_TREE_MODEL (view->model), widget, 0)) != NULL)
{
gtk_tree_selection_select_iter (sel, iter);
/* gtk_tree_iter_free (iter); */
}
}
view->updating = FALSE;
}

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