Compare commits

...

400 Commits

Author SHA1 Message Date
Tong Hui 4dd10b5ca5 Update zh_CN translation 2018-03-24 00:08:32 +08:00
Ignacio Casal Quinteiro 8c27e3e1cd gtkselectionprivate: minor style fix
This seems to make some issue with the gtk# scanner.
2016-05-19 16:59:37 +02:00
Matej Urbančič 2ae6fd192f Updated Slovenian translation 2016-03-05 20:51:02 +01:00
Benjamin Otte 334893c6c6 cssstyle: Don't crash if properties are added at runtime
Just return the default value for those properties.

Testcase included.

https://bugzilla.redhat.com/show_bug.cgi?id=1281234
2016-01-11 06:53:39 -05:00
Matthias Clasen 90a1a3c0f4 entry completion: Only grab the device if we have one
When the entry completion is popped up from a timeout, we may
not have a device. In that case, don't call gdk_device_grab,
do avoid criticals.
2015-11-16 19:34:54 -05:00
Christian Kirbach 52b88b29fb Updated German translation 2015-11-11 18:16:53 +00:00
Dominique Leuenberger d90e9e4058 placessidebar: do not crash if uris is NULL
On Drag'n'Drop actions across system boundaries (VM host to guest), the
happen to be null.

https://bugzilla.gnome.org/show_bug.cgi?id=757298
2015-10-29 17:33:34 +01:00
Carlos Garnacho a4b2626ecb GtkMenuButton: explicitly protect against recursion
The visibility toggling happening on ::click() relied implicitly
on the popover animation, but breaks on disabled animations. The
recursion happening within gtk_toggle_button_set_active() (which
triggers ::clicked when changing state) makes this vfunc to run
again, inverting the visibility of the popover in result.

Fix this by explicitly checking about recursion, we want the
button to be toggled to the right state, but we don't want the
callback running again.

https://bugzilla.gnome.org/show_bug.cgi?id=752577
2015-10-23 19:54:58 +02:00
Kjartan Maraas 9092cc8851 Updated Norwegian bokmål translation. 2015-10-17 11:50:41 +02:00
Kjartan Maraas 76d4d1cfbb Updated Norwegian bokmål translation with fixes from Einar Ulvsløkk. 2015-10-17 11:19:14 +02:00
Jiri Grönroos 185a00b512 Updated Finnish translation 2015-10-05 16:48:22 +00:00
Hannie Dumoleyn 57858976c7 Updated Dutch translation properties 3.16 2015-10-05 11:55:25 +02:00
Hannie Dumoleyn 5cdffae939 Updated Dutch translation 3.16 2015-10-05 10:44:36 +02:00
Carlos Garnacho c2589026ae widget: Make sure we only run controllers on realized widgets
The default event bubbling paths are prone to just running event controllers
even after the widget was potentially unrealized/destroyed in an event
handler callback, so bail out early if that's the case.

https://bugzilla.gnome.org/show_bug.cgi?id=755352
2015-09-21 16:45:28 +02:00
Carlos Garnacho 35a4fd0996 gesture: strengthen against destroyed windows
Bail out when we receive an event with an already destroyed window,
we'll hopefully get reset/cancelled afterwards on grab broken events.

https://bugzilla.gnome.org/show_bug.cgi?id=755352
2015-09-21 16:45:28 +02:00
Hajime Taira 930addf5a6 Updated Japanese translation 2015-09-20 17:44:05 +09:00
Matthias Clasen 4191592856 3.16.7 2015-09-17 20:45:22 -04:00
Matthias Clasen f30322bd98 Plug another memory leak 2015-09-17 20:25:22 -04:00
Matthias Clasen 369ae4d9b1 Plug a memory leak 2015-09-17 20:25:13 -04:00
Matthias Clasen 67c49a5d46 Update the gtk3-demo man page
We have options now !
2015-09-17 20:16:08 -04:00
Matthias Clasen b7d9cd8f4e gtk-demo:Add a --list option
This just shows the available examples and then exists.
2015-09-17 20:16:01 -04:00
Matthias Clasen 0676846783 gtk-demo: Make --autoquit a simple option
No real need to specify the amount of delay, just make this
a plain boolean.
2015-09-17 20:15:54 -04:00
Matthias Clasen 99f3d861d9 gtk-demo: Add a way to launch individual demos
Add a --run option which takes the name of an example and
launches it. Also add a --autoquit option which can be used
to quit after a given number of seconds.
2015-09-17 20:15:10 -04:00
Matthias Clasen c733be4913 text view: Drop an unused variable 2015-09-17 20:14:01 -04:00
Matthias Clasen 6b9edc43af text view: Improve cursor hiding logic
Same as we did for the entry in the previous commit.

Previously, we just hid the cursor if a key event was adding text,
but not when you used backspace, or Ctrl-V. Rearrange things so that
we obscure the cursor whenever the buffer contents change while we
are handling key events.

https://bugzilla.gnome.org/show_bug.cgi?id=754535
2015-09-17 20:13:38 -04:00
Matthias Clasen bf7fc2fc59 entry: Improve cursor hiding logic
Previously, we just hid the cursor if a key event was adding text,
but not when you used backspace, or Ctrl-V. Rearrange things so that
we obscure the cursor whenever the buffer contents change while we
are handling key events.

https://bugzilla.gnome.org/show_bug.cgi?id=754535
2015-09-17 20:13:31 -04:00
Matthias Clasen 52f896e373 Avoid some duplicate test names
GLib considers these an bug now.
2015-09-17 20:12:42 -04:00
Benjamin Otte ae0469987d gtk-demo: Update listbox example with longer list
Add all 388 tweets of the @GTKtoolkit account. This shows the
performance behavior of the listbox (not good with that many rows) and
allows us to quickly notice when things get worse (or better).

And just so I have a place where I can dump how I generated this file:

First, I got Timm Bäder to download me the json for the twitter feed
into a file gtk.json, then I ran the jq tool on it like this:

jq ".[] | if .retweeted_status then .retweeted_status.user.name + \"|\"
+ .retweeted_status.user.screen_name else .user.name + \"|\" +
.user.screen_name end + \"|\" + .text" gtk.json | cat -n | sed
"s/\\s*\([0-9]*\)\t\"\(.*\)\"/\\1|\\2/" > messages.start

jq ".[] | .created_at" gtk.json | sed "s/\"\(.*\)\"/\1/" | while read
in; do date +%s -d "$in"; done > dates

jq ".[] | \"0|\" + if .retweeted_status then .user.screen_name else \"\"
end + \"|\" + (.favorite_count | tostring) + \"|\" + (.retweet_count |
tostring)" gtk.json | sed "s/\"\(.*\)\"/\\1/" > messages.end

paste -d\| messages.start dates messages.end > messages.txt

This whole machinery of going through 3 intermediate files was only
necessary to onvert the dates from ISO format to unix timestamps,
otherwise this could have been a single line.
2015-09-17 20:08:35 -04:00
Benjamin Otte 7fc170a879 gtk-demo: Order tweets newest first in listbox example 2015-09-17 20:08:28 -04:00
Christian Hergert 119fc5242e treeview: check for pixel cache before setting property
Code exists in the wild that calls this function after the widget has
been destroyed (and the pixel cache released). Simply check that the
pixel cache exists to preserve the existing state.
2015-09-17 20:07:25 -04:00
Matthias Clasen cf2a41cb52 multipress: Only emit preedit signals if needed
When clearing the compose buffer, don't emit preedit-changed
unconditionally. This triggers a recursion which leads to
a crash.

https://bugzilla.gnome.org/show_bug.cgi?id=753644
2015-09-17 20:06:25 -04:00
Paolo Borelli 47964f360f print operation: let subclasses use a custom paginate
GtkPrintOperation was emitting paginate only if a signal was
connected, this meant that subclassing and overriding the
paginate vfunc lead to the unexpected result that paginate did
not run.
Instead we always emit the signal and use a custom accumulator:
if there is a signal we just run that and avoid the default
handler, otherwise we run the default handler which can be the
one by the subclass or the default handler that just skips
pagination.

Patch by Yevgen Muntyan, fixes #345345
2015-09-17 20:06:15 -04:00
Matthias Clasen 7b80655821 Add a note to gdk_screen_get_width/height_mm
The values returned by these functions are not very well defined,
recommend to use the monitor dimensions instead.
2015-09-17 20:05:17 -04:00
Carlos Garnacho 30a62f1929 wayland: calculate screen physical size
A simple calculation is done so far (assuming monitor areas never overlap)
so gdk_screen_get_width/height_mm return meaningful values.

https://bugzilla.gnome.org/show_bug.cgi?id=753621
2015-09-17 20:05:09 -04:00
Christian Dywan 0fb13e3650 entry completion: Clarify index in documentation
https://bugzilla.gnome.org/show_bug.cgi?id=579466
2015-09-17 20:01:50 -04:00
Michael Weghorn 6db121da89 Improve printer distinction for option retrieval
In order to retrieve the user options for a printer, the respective
printer name is used.
This fixes the comparison of printer names to avoid that the options of
another printer are accidently read whose name starts with the same
letters, but is longer (e.g. "myprinterlongername" instead of
"myprinter").

This fixes Bug 753628.
2015-09-11 15:21:44 +02:00
Lapo Calamandrei ff9ee56ec0 Adwaita: fix documents and the like rubberband 2015-09-09 18:17:03 +02:00
Lapo Calamandrei 40622c6924 Adwaita: set -GtkRange-trough-border: 0 for scrollbars
which fixes firefox scrollbar not being fittsy when maximixed.
2015-09-08 22:21:18 +02:00
Christian Kirbach b41e24b330 Updated German translation 2015-09-02 21:04:40 +00:00
Balázs Úr 64fb8deb1f Updated Hungarian translation 2015-08-31 17:00:10 +00:00
Christian Kirbach 9898e81d43 Updated German translation 2015-08-27 21:59:45 +00:00
Anders Jonsson 669699e4cf Updated Swedish translation 2015-08-16 19:16:42 +00:00
Andika Triwidada 50eb8d9b42 Updated Indonesian translation 2015-08-03 05:35:15 +00:00
Andika Triwidada 72f35cc361 Updated Indonesian translation 2015-08-03 05:13:47 +00:00
Aurimas Černius ed78fc391a Updated Lithuanian properties 2015-08-02 17:53:12 +03:00
Pedro Albuquerque 1c66c4b385 Updated Portuguese translation 2015-07-28 08:10:45 +00:00
Pedro Albuquerque 6e95d4cb17 Updated Portuguese translation 2015-07-28 08:07:36 +00:00
Pedro Albuquerque 1b67f3e399 Updated Portuguese translation 2015-07-28 07:15:17 +00:00
Felipe Braga a1f15bd9cb Updated Brazilian Portuguese translation 2015-07-24 17:46:58 +00:00
Chun-wei Fan 05fcff8e73 MSVC Builds: Fix Introspection Build
The deprecated and a11y sources of GTK+ were spun off some time ago into
their own Makefile.inc, which is then included by gtk/Makefile.am.  Fix the
generation of file sources for the GTK+ .gir.
2015-07-24 17:41:05 +08:00
Pavel Grunt bb9401f35a gdk-win32: Send fake release key event for shift key
Windows does not send any release key event for one of the shift keys
when both shift keys were pressed together. This commit solves
the problem by sending the extra release key event for the shift key
which was released as first, when the other shift key is released.

Other modifiers (e.g. Ctrl, Alt) do not have this problem.

https://bugzilla.gnome.org/show_bug.cgi?id=751721
(cherry picked from commit 44608dadc6)
2015-07-23 17:56:19 +02:00
Marek Černocký 9cea93847f Updated Czech translation 2015-07-22 00:48:13 +02:00
Matthias Clasen a6144ebe54 Avoid g_set_object
One of the backported fixes brought in a dependency on new glib
that I didn't mean to introduce here. Avoid it.
2015-07-21 12:04:45 -04:00
Piotr Drąg 6950ac7cc9 Updated Polish translation 2015-07-21 17:21:17 +02:00
Matthias Clasen 0749199d4c 3.16.6 2015-07-21 08:37:02 -04:00
Stefan Sauer 434c7220d7 gtkimagemenuitem: improve the replacement docs even more
Since the stock strings usually have menmosics suggest
gtk_menu_item_new_with_mnemonic().
2015-07-21 08:22:01 -04:00
Stefan Sauer 64954444ae gtkimagemenuitem: fix suggestion for replacement
gtk_menu_item_new(9 would create an empty menu item. While the stock deprecation
aims to unclutter the menus, I feel this goes too far.
2015-07-21 08:21:49 -04:00
Matthias Clasen 6978db3a52 GtkListBox: Listen for adjustment changes
We automatically pick up an adjustment from our parent
scrollable, but we failed to update it when it changes.
This is happening in the places sidebar, and it was causing
the focus-tracking to fail there, letting the focus move
out of view. With this change, the focus remains visible.
2015-07-21 08:21:17 -04:00
Daniel Hams 1debaed676 GdkGLContext little fix to property names and descriptions.
https://bugzilla.gnome.org/show_bug.cgi?id=752502
2015-07-21 08:20:46 -04:00
Ignacio Casal Quinteiro b695d7392a gdk: fix crash if visual is NULL
cairo_xlib_surface_get_visual might return NULL so we need to
check for NULL before trying to use it.

https://bugzilla.gnome.org/show_bug.cgi?id=752520
2015-07-21 08:19:34 -04:00
Emmanuele Bassi fe783cf271 tests/gears: Ensure we don't use unavailable GL resources
We need to check on realize if we have access to a GL context, before
calling GL functions. We use gtk_gl_area_get_error() for that.

We also need to tear down the resources during unrealization, instead
of leaking them.
2015-07-21 08:16:37 -04:00
Eric Williams b9e0a54a42 Added an additional explanation and code snippet for GtkImageMenuItem.c
https://bugzilla.gnome.org/show_bug.cgi?id=752093
2015-07-21 08:12:59 -04:00
Ryan Lortie 0002a8a604 testgmenu: use the menu binding code
The menu tracker does a better job of this than we can, so move over to
using it instead.

This fixes issues with './testgmenu --import' not properly displaying
the language submenu.

https://bugzilla.gnome.org/show_bug.cgi?id=752016
2015-07-21 08:08:49 -04:00
Carlos Garnacho b46b40bbc6 gtkdnd: Fix introspection annotations in some functions
The GdkEvent field is nullable on gtk_drag_begin*, and gtk_drag_cancel()
is a method, like the rest of the DnD API.
2015-07-21 08:08:42 -04:00
Carlos Garnacho 542413feca gtkdnd: Account for setting a same icon helper
g_set_object() will take care of ref'ing before destroying the previous
instance, which might actually be the same pointer.

https://bugzilla.gnome.org/show_bug.cgi?id=751401
2015-07-21 08:08:36 -04:00
nick fe104915e4 settings: Include pangofc-fontmap.h header on Wayland
In case the X11 backend is not enabled, we still need to include the
pangofc-fontmap.h header file, as we use the Pango/FontConfig API in
both the X11 and Wayland case.

https://bugzilla.gnome.org/show_bug.cgi?id=751625
2015-07-21 00:06:13 +01:00
Marek Černocký 4d049c989b Updated Czech translation 2015-07-18 09:42:01 +02:00
Matthias Clasen 34a2c6a2ee Fix the build 2015-07-17 20:46:11 -04:00
Matthias Clasen 074fd13350 testgtk: Remove pointless code
The display is getting overwritten immediately. Pointed out by
coverity.
2015-07-17 19:55:11 -04:00
Matthias Clasen c9267b30d7 inspector: Avoid a NULL deref
Coverity pointed out that getting a class name requires
dereferencing the pointer, so only don't do it if it is NULL.
2015-07-17 19:55:04 -04:00
Matthias Clasen 6ea7c290a3 GtkWindow: Fix a use-after-free
We were printing a string in a warning after freeing it.
Also, fix an x/y typo that might cause popovers to be
mispositioned.
2015-07-17 19:24:02 -04:00
Matthias Clasen 0993cdf79f file chooser: remove an unused GError variable
Pointed out by coverity
2015-07-17 19:23:43 -04:00
Matthias Clasen 32c81cfd65 inspector: Remove some dead code
Not sure what I was thinking here. Coverity pointed this out.
2015-07-17 19:22:24 -04:00
Matthias Clasen 575f334ce5 inspector: Avoid a NULL deref 2015-07-17 19:22:13 -04:00
Matthias Clasen 48fba6911a treeview: Add an explicit return for clarity
I believe that first_column can only ever be NULL here if
last_column is NULL too, in which case we'd exited already.
But coverity doesn't see that, so add an explicit exit.
2015-07-17 19:22:05 -04:00
Matthias Clasen d833c05f6e tooltip: Remove unnecessary checks
Coverity uses these as clues to complain.
2015-07-17 19:21:55 -04:00
Matthias Clasen 66f9dcd93b list box: Remove unnecessary checks
Again, coverity takes these as clues to complain.
2015-07-17 19:21:48 -04:00
Matthias Clasen 236d2d3cf1 GtkLabel: Remove an unnecessary check
Coverity has the annoying habit of guessing backwards that
if we check the value here, it might be NULL earlier.
2015-07-17 19:21:36 -04:00
Matthias Clasen ff9349bfdd GtkActionHelper: Avoid null deref in debug code 2015-07-17 19:21:24 -04:00
Matthias Clasen 2f817322fd GtkGrid: Add a few NULL checks
Coverity complained about these.
2015-07-17 19:21:12 -04:00
Matthias Clasen 5557dd8fce gdk: Add some parameter checking
This may help coverity recognize that we're not called with
invalid combinations.
2015-07-17 19:21:03 -04:00
Matthias Clasen ff7d67b33c testdialog: Error out if templates are missing
Coverity complained about us ignoring the return value
here, and it is nicer to get an error message about this.
2015-07-17 16:10:30 -04:00
Matthias Clasen 3460a4d507 cups: Annotate a call whose return value we don't care about
We're closing this fd, but we're not going to do anything else
if that fails. Annotate to let coverity see this.
2015-07-17 16:09:47 -04:00
Matthias Clasen 5bbf0baa7f inspector: Check a return value
We don't care about the error here, but we were relying on
g_resources_get_info to zero the size even in case of error.
No need to do that, we can just check the return value. Plus,
it makes coverity happy.
2015-07-17 16:09:39 -04:00
Matthias Clasen 2c7974a69d inspector: Annotate a call whose return value we don't need
The way this code is written, we know that there is an item in
the hash table and the iter_next call will give it to us, so
no need to check the return value. Annotate the call to tell
coverity.
2015-07-17 16:09:32 -04:00
Matthias Clasen 64affb0406 gtkicontheme: Check a return value
We were already looking at the error anyway, but rewriting things
this way lets coverity see the light.
2015-07-17 16:09:23 -04:00
Matthias Clasen 0558b0c439 gtkbuilderparser: Add some assertions
Add some assertions that things are non-NULL when we know they
are, so that coverity gets it.
2015-07-17 16:09:11 -04:00
Matthias Clasen 7566066000 gtk-demo: Check a return value
Found by coverity.
2015-07-17 16:08:54 -04:00
Balázs Úr 683ccd28e8 Updated Hungarian translation 2015-07-17 14:14:46 +00:00
Carlos Garnacho 7c35d52f3c Revert "x11: Query pointer devices' scroll valuators on toplevel enter events"
This reverts commit 3d9cce79cf.

The commit broke more scenarios than fixed, better to go back to square one.
2015-07-15 23:45:49 +02:00
Owen W. Taylor 1a8e9dbb8f GdkDisplayX11: Properly translate server timestamps from _NET_WM_FRAME_* messages
When using frame times from _NET_WM_FRAME_DRAWN and _NET_WM_FRAME_TIMINGS, we
were treating them as local monotonic times, but they are actually extended-precision
versions of the server time, and need to be translated to monotonic times in the
case where the X server and client aren't running on the same system.

This fixes rendering stalls when using X over a remote ssh connection.
https://bugzilla.gnome.org/show_bug.cgi?id=741800
2015-07-15 12:47:55 -04:00
Aurimas Černius bb1750c05f Updated Lithuanian translation 2015-07-10 00:08:44 +03:00
Matej Urbančič afa82a63a9 Updated Slovenian translation 2015-07-08 15:39:00 +02:00
Piotr Drąg 657d0d79b3 Updated Polish translation 2015-07-07 20:26:24 +02:00
Tom Schoonjans 1539cdd783 gdkwindow-quartz: partial aspect ratio support
Support was added for GDK_HINT_ASPECT in
gdk_quartz_window_set_geometry_hints though with one restriction:
min_aspect and max_aspect have to be equal, which I believe corresponds
to the most common usage. A warning will be printed if this condition is
not met but min_aspect will be used anyway.
2015-07-07 10:22:11 -07:00
Matthias Clasen 85ff269adf 3.16.5 2015-07-07 11:23:39 -04:00
Cosimo Cecchi 92933fd3ad reftests: fix style class syntax in CSS file
Fixes reftests.

https://bugzilla.gnome.org/show_bug.cgi?id=750605
2015-07-07 11:23:39 -04:00
Jasper St. Pierre 28e7721075 gdkdisplay-x11: The leader window should be an input-only window
This prevents it from creating a _NET_WM_USER_TIME_WINDOW, which can
confuse mutter / other window managers, and also me, when debugging.
2015-07-07 10:31:13 -04:00
Emmanuele Bassi a074d86842 docs: Drop deprecated symbolic icon names
Do not suggest using icons that do not exist.
2015-07-07 10:30:46 -04:00
Emmanuele Bassi 9ff88ce2c7 container: Update the add() warning
Now that gtk_widget_reparent() has been deprecated, we should not
suggest it.
2015-07-07 10:30:37 -04:00
Matthias Clasen d509888580 GtkSwitch: fix a reentry issue
The introduction of state broke some users which relied on
being able to set active in a notify::active handler.

https://bugzilla.gnome.org/show_bug.cgi?id=751754
2015-07-07 10:30:00 -04:00
Carlos Garnacho 3d9cce79cf x11: Query pointer devices' scroll valuators on toplevel enter events
We used to "invalidate" scroll valuators, so the next scroll event could
be used as the base for the next scroll deltas. This has the inconvenience
that it invariably consumes the first event received after enter and,
due to interactions with WM overeager passive button grabs, there's a
possibility we don't scroll at all if we receive interleaved "smooth
scroll" XI_Motion events and XI_Enter events (Normally triggered by regular
scroll wheels in mice).

In order to fix this, and at the expense of some sync-call overhead on
XI_Enter events (one XIQueryDevice call per slave device), query the
current scroll valuator state for all the slaves of the entered pointer,
so we do know beforehand the right base values. If new devices are plugged
while the pointer is on top of the client, the initialized scroll values
will match the valuators'.

https://bugzilla.gnome.org/show_bug.cgi?id=750994
https://bugzilla.gnome.org/show_bug.cgi?id=750870
2015-07-07 10:29:39 -04:00
Carlos Garnacho a90c7f191f x11: Avoid X error traps within server grabs
gdk_x11_device_xi2_window_at_position() may attempt to push/pop
a few error trap pairs while traversing the window tree. Move it
outside the server grab, and around the multiple XIQueryPointer
calls we may do here.

https://bugzilla.gnome.org/show_bug.cgi?id=751739
2015-07-07 10:29:16 -04:00
Krzesimir Nowak 45767b8eaa broadway: Fix memleak in error case
https://bugzilla.gnome.org/show_bug.cgi?id=751752
2015-07-07 10:29:10 -04:00
Jasper St. Pierre 4223812fdc window: Don't send startup notifications for offscreen / popup windows
The WM isn't aware of O-R (popup) or offscreen windows. If somebody
maps an offscreen or a popup GTK+ window before the main window, we'll
complete the sequence before a "real" window is mapped. Make sure to
ignore these for startup notifies.
2015-07-07 10:28:48 -04:00
Alexander Larsson facf2ac2bb broadway: Handle shm_open failing by falling back on tmp files
This is required if /dev/shm is not mounted on your system, which can
happen for instance in certain container configurations.
2015-07-07 10:28:19 -04:00
cedlemo 533f4bf966 GtkImage: Make resource property work properly
gtk_image_set_from_resource was setting the resource_path,
only to have it overwritten again before returning. That
is not as it should be, so change things to set the resource
path late.

https://bugzilla.gnome.org/show_bug.cgi?id=751443
2015-07-07 10:27:50 -04:00
Matthias Clasen 905ccd1862 GtkRange: Improve zoom handling a bit
The calculation to update the initial slider position on zoom
changes was not working correctly when using keys to toggle
zoom on and off for scales. Avoid it by updating the position
beforehand.
2015-07-07 10:26:45 -04:00
Matthias Clasen 8d3fb714f0 GtkRange: Make drag gesture less agressive
Moving the mouse while pressing one of the steppers was making
the slider jump to the end, unexpectedly. This was caused by the
drag gesture kicking in when it shouldn't. Fix this by making
all drag gesture signal handlers only do something if we are in
a drag thats started on the slider.

https://bugzilla.gnome.org/show_bug.cgi?id=751050
2015-07-07 10:26:35 -04:00
Caolán McNamara 8da9fc8d4f file chooser: Avoid tall combos
The filter combo box in the file chooser was stretching to match
the height of the extra widgets next to it. Since, stretched combo
boxes are not a pretty sight, make it stick to the top instead.

Patch by Caolán McNamara,

https://bugzilla.gnome.org/show_bug.cgi?id=751227
2015-07-07 10:26:21 -04:00
Alexander Larsson 5abc4af10a configure: test have_docbook_style != yes, not have_docbook_dtd 2015-07-07 10:25:07 -04:00
Christian Hergert 22d0c317c2 treeview: always pixelcache widget contents
GtkTreeView has a particularly expensive drawing path. This can cause
issues when part of animated widget sequences. Caching the content while
a model is attached helps reduce the number of full redraws during
exposure greatly.

https://bugzilla.gnome.org/show_bug.cgi?id=751082
2015-07-07 10:24:38 -04:00
Christian Hergert b33270aa7c pixelcache: allow widgets to always require cached content
Some widgets have very expensive drawing paths. So caching the content
can be useful even when not scrolling.

This can help speed up widgets that are part of animation sequences and
thereby go through spurious expose events.

https://bugzilla.gnome.org/show_bug.cgi?id=751082
2015-07-07 10:24:30 -04:00
Christian Hergert 0af53e9d5a gdkwindow: avoid updating background pattern if it matches previous
Background patterns are often updated when style changes. In many cases,
the new pattern will match the previous. We can optimize out the
invalidation that will occur upon resetting the same pattern.
2015-07-07 10:24:04 -04:00
Matthias Clasen db690c621d Deal with events from wrong display
GtkInspector is opening a separate display connection, which makes
it more likely that gtk_get_current_event() returns an event from
the "wrong" display.
2015-07-07 10:23:46 -04:00
Matthias Clasen cf120a0fa8 GtkMenuButton: Make programmatic toggling work again
This was broken in 0796d7b6ff.

https://bugzilla.gnome.org/show_bug.cgi?id=751018
2015-07-07 10:23:31 -04:00
Matthias Clasen f770957d6a GtkMenuButton: Avoid direct button access
We were getting ourselves in trouble by casting touch events
to GdkEventButton and poking directly at their internals. Instead,
use GdkEvent API to get what we need.

This fixes a crash when using the gear menu in epiphany with
touch. The same crash also occurred in testmenubutton.
2015-07-07 10:23:22 -04:00
Matthias Clasen 37e36e7f1d color editor: make popups toggleable
The popups on the color editor are somewhat hard to get rid of.
Arrange things so that clicking the same control again dismisses
the current popup.
2015-07-07 10:22:51 -04:00
Matthias Clasen 356edc5483 Don't show a menu on the color editor swatch
There's nothing to customize here, so no need to show a menu.
2015-07-07 10:22:46 -04:00
Matthias Clasen 6f7f1028fa Add a way to avoid menu on color swatches 2015-07-07 10:22:38 -04:00
Ting-Wei Lan 72d298229f Fix 'void function should not return void expression' warning for clang
https://bugzilla.gnome.org/show_bug.cgi?id=750888
2015-07-07 10:21:44 -04:00
Cosimo Cecchi 3139588797 testsuite: add a test for non-square symbolic icons
To verify the previous fix.

https://bugzilla.gnome.org/show_bug.cgi?id=750605
2015-07-07 10:20:58 -04:00
Cosimo Cecchi 5cd3714de4 icontheme: don't modify symbolic SVG dimensions when recoloring
When recoloring symbolic SVG, do not modify the original width and
height of the passed-in file; the function later will scale the image
through gdk_pixbuf_new_from_stream_at_scale(), but we should still
use the original size to create the proxy SVG, or the image will
possibly be doubly-resized or blurry.

https://bugzilla.gnome.org/show_bug.cgi?id=750605
2015-07-07 10:20:50 -04:00
Matthias Clasen f123bd92bb recent chooser: Make it expand
It is expected that the list fills the available space.

https://bugzilla.gnome.org/show_bug.cgi?id=750690
2015-07-07 10:20:38 -04:00
Emmanuele Bassi 39cb51bb07 settings: Fix the type annotation for color-hash
The (element-type) annotation cannot be used with properties that return
container types like GHashTable; we need to use the (type) annotation.

https://bugzilla.gnome.org/show_bug.cgi?id=750489
2015-07-07 10:20:06 -04:00
Emmanuele Bassi ba750ec9d2 builder: Skip introspecting lookup_callback_symbol()
Opaque function pointers as return values are not really usable in high
level languages, even via introspection.
2015-07-07 10:19:59 -04:00
Emmanuele Bassi 21b616e2b3 docs: Fix annotation for GtkGLArea::resize signal
We need to document all arguments for the signal, for both gtk-doc and
introspection.
2015-07-07 10:19:50 -04:00
Emmanuele Bassi 13b84cd35f docs: Improve deprecation notices for GtkSettings
The button and menu item icons settings are deprecated; application
developers should control whether or not a widget should show an icon,
using the existing API.

https://bugzilla.gnome.org/show_bug.cgi?id=750718
2015-07-07 10:19:41 -04:00
Emmanuele Bassi 5ae01c4f2c docs: Improve deprecation notices for GtkMisc
Point to the replacement properties and functions.

https://bugzilla.gnome.org/show_bug.cgi?id=750718
2015-07-07 10:19:33 -04:00
Emmanuele Bassi dacdf753bf docs: Improve deprecation notice for rules-hint property
Specify that the theme is wholly in control.

https://bugzilla.gnome.org/show_bug.cgi?id=750718
2015-07-07 10:19:27 -04:00
Emmanuele Bassi ddade37d79 docs: Improve deprecation notices for GtkImageMenuItem properties
Should help porting code away from the deprecated GtkImageMenuItem
class.

https://bugzilla.gnome.org/show_bug.cgi?id=750718
2015-07-07 10:19:21 -04:00
Emmanuele Bassi 3b0be42f72 docs: Add deprecation notices for GtkAlignment properties
We want people to port their code away from deprecated classes, and this
helps finding a replacement.

https://bugzilla.gnome.org/show_bug.cgi?id=750718
2015-07-07 10:19:14 -04:00
Carlos Soriano d67cf43be9 gtklistboxrow: propagate in the draw vfunc
So objects connected by g_signal_connect_after actually get
the signal.
This was causing an issue in the dnd highlight, since there
a cairo rectangle is draw using g_signal_connect_after on the draw
signal.
2015-07-07 10:18:57 -04:00
Benjamin Otte 227b5a81bc render: Fix ridge/groove border rendering
The typo strikes again!
2015-06-23 22:31:25 +02:00
Niels Nesse 3258d5ba2e x11/gl: Removing some more legacy GL calls
They are not required any more.

http://bugzilla.gnome.org/show_bug.cgi?id=746668
(cherry picked from commit 641e280311)
Signed-off-by: Emmanuele Bassi <ebassi@gnome.org>
2015-06-22 12:35:59 +01:00
Emmanuele Bassi b45caa8999 x11/gl: Do not call glEnable/glDisable with GL_TEXTURE_2D
These are fixed pipeline functions, and Mesa will warn (if debugging
messages are enabled). At best, they are poinless calls.

(cherry picked from commit 6bd7526ee7)
Signed-off-by: Emmanuele Bassi <ebassi@gnome.org>
2015-06-22 12:35:44 +01:00
Christian Kirbach 8e4cd4cc7a Updated German translation 2015-06-14 08:53:41 +00:00
Benjamin Otte ebdd24ac3a fontchooser: Don't cause "row-changed" signal in cell data func
The font chooser delays creating the font description from the font face
as long as possible (it's slow). Because we use fixed height mode, we
only have to create font descriptions for rows we are actually going to
show.

This was achieved by looking at the font description column and if it
was NULL, we created a font description and gtk_list_stiore_set() it.
Unfortunately this caused a "row-changed" signal to be emitted and this
emission could happen during the cell data func.
And that caused infinite loops with accessibility when you were unlucky.

This change replaces the NULL font description with an empty one and
instead of setting the correct font description, we
pango_font_description_merge() it in. This way, the list store doesn't
change and no signals are emitted.

https://bugzilla.redhat.com/show_bug.cgi?id=1197267
2015-06-12 21:23:34 +02:00
Matthias Clasen 93abfb10ad 3.16.4 2015-06-10 10:47:19 -04:00
Matthias Clasen 3ef53101ab gtk-demo: Make hypertext demo work with touch
Make tapping on the links work.
2015-06-10 10:37:58 -04:00
Benjamin Otte 2cf5eddceb widget: Clarify docs on gtk_widget_set_double_buffered()
Also make them more scary so people really really don't use it as a
random knob when trying to make things go fast.

//bugzilla.gnome.org/show_bug.cgi?id=750505
2015-06-10 10:37:42 -04:00
Timm Bäder b867f1970c gtkfilechooserbutton: Align the label to the left
Using GtkLabel's xalign property so the label doesn't jump around when
the button gets resized.

https://bugzilla.gnome.org/show_bug.cgi?id=750477
2015-06-10 10:34:22 -04:00
Rui Matos d87769dcd5 main: Push the current event on the stack before we start needing it
The changes in commit 13e22e2030 made
_gtk_window_check_handle_wm_event() indirectly depend on
gtk_get_current_event_time() which relies on the current event being
available on the current_events stack.

Since the current event is only pushed on the stack afterwards we get
an invalid timestamp which breaks ewmh window moving.

This fixes the issue by pushing the current event before we start
relying on it being there in gtk_main_do_event() and, as a byproduct,
also fixes a potential memory leak when we have a rewritten event and
return early due to _gtk_window_check_handle_wm_event() being TRUE.

https://bugzilla.gnome.org/show_bug.cgi?id=750384
2015-06-08 13:44:30 +02:00
John Ralls 6ff49ee93d Bug 745957 - GTK+/Quartz >= 3.14.8: Symbol not found: _gtk_drag_cancel
Implement gtk_drag_cancel, made public in c160ba069 and 62616a71, in
gtkdnd-quartz.c.
2015-05-31 11:52:35 -07:00
John Ralls 673013ac67 Fix DnD Introspection on Quartz Backend.
Don't exclude the -quartz.c files from introspection_files.
2015-05-29 13:40:25 -07:00
Cédric Valmary e2b9ac89b0 Updated Occitan translation 2015-05-29 20:27:17 +00:00
Matthias Clasen bb0561f356 Fix a cornercase crash
If gtk_text_layout_move_cursor_visually is called with a
count of 0, we were passing NULL to a free function that
can't handle it. Don't do that.

https://bugzilla.gnome.org/show_bug.cgi?id=750058
2015-05-29 00:00:38 -04:00
Cosimo Cecchi de93dd85e0 Use built-in gtk-update-icon-cache
To generate the icon cache files.

We want to avoid a dependency loop if possible; additionally, on some
Debian-based systems gtk-update-icon-cache maps to the GTK2 version of
the utility and the GTK3 version is renamed to
gtk-update-icon-cache-3.0.

To avoid a build dependency on GTK2, use the binary that we just built
in-tree.

https://bugzilla.gnome.org/show_bug.cgi?id=749593
2015-05-28 23:59:35 -04:00
Cosimo Cecchi c73715db09 parse-sass: don't hardcode bash path
It's /bin/bash on some systems; just use /bin/sh instead.

https://bugzilla.gnome.org/show_bug.cgi?id=749593
2015-05-28 23:59:26 -04:00
Cosimo Cecchi daa8320d45 tests: wait for draw before fetching tree view style
On some slower machines (e.g. an ARM OBS builder), this test is failing
with a race condition where we're trying to fetch the style before it's
applied.

https://bugzilla.gnome.org/show_bug.cgi?id=749593
2015-05-28 23:59:17 -04:00
Cosimo Cecchi 4e40260d73 placessidebar: escape tooltip text before setting it
gtk_tree_view_set_tooltip_column() specifies that markup in the text
should be escaped.
This fixes critical warnings when hovering over items in the sidebar for
bookmarks that have markup characters in their names.

https://bugzilla.gnome.org/show_bug.cgi?id=719683
2015-05-28 23:58:58 -04:00
Carlos Garnacho 873cc0e352 notebook: Fix assert in ::drag-motion
The drag destination might be empty, we shouldn't be checking whether
it contains pages at all. Instead, check the source notebook, which
ought to have a selected page if you're dragging something from there.

https://bugzilla.gnome.org/show_bug.cgi?id=749893
2015-05-26 18:02:03 +01:00
Carlos Garnacho cef7b4670f scrolledwindow: reset more Indicator state on ::unmap
If a GtkScrolledWindow is just unmapped and promptly mapped again, the
indicators are left in a semi-visible state, so the GdkWindow isn't raised
properly above scrolledwindow content. This inconsistent state went away
the next time the indicator is hidden.

So, reset all state about indicator window visibility, animation
progress and conceil timer on ::unmap, this will be enough to make the
indicators start out hidden like on newly created scrolledwindows.
2015-05-22 21:24:32 +02:00
Jonas Ådahl 90ee25f8e9 GtkWindow: Don't assume no shadow width even when not supported
Even if a window doesn't support client side shadow
(gtk_window_supports_client_shadow returns FALSE), don't assume the
shadow width is zero, as CSD may have been enabled anyway (meaning
priv->client_decorated is TRUE). In that case we still need to report
the correct width.

https://bugzilla.gnome.org/show_bug.cgi?id=749451
2015-05-22 00:15:46 -04:00
Matthias Clasen c0f0874cf9 Don't add strings on the stable branch
No need to upset translators with a temporary string that will
hopefully be replaced by an implementation at some point.
2015-05-18 08:59:02 -04:00
Martin Srebotnjak aaee5f77ca Updated Slovenian translation 2015-05-17 20:49:44 +02:00
Martin Srebotnjak 64eead25c0 Updated Slovenian translation 2015-05-17 20:44:50 +02:00
Marek Černocký 5185ba38bb Updated Czech translation 2015-05-17 10:32:59 +02:00
Piotr Drąg 23374f9f83 Updated Polish translation 2015-05-15 17:56:44 +02:00
Piotr Drąg 509741b1d7 Updated POTFILES.in 2015-05-15 17:50:57 +02:00
Marek Kasik 40b489b6e2 printing: Check connection to remote CUPS server on correct port
Add parameter for specification of port to gtk_cups_connection_cups_new().
Use default port returned by ippPort() if the given port is lower than 0.

https://bugzilla.gnome.org/show_bug.cgi?id=693738
2015-05-13 12:30:15 +02:00
Matthias Clasen 4217fccbc9 3.16.3 2015-05-11 14:47:17 -04:00
Matthias Clasen 086e885c02 Fix a11y tests
The output of the about dialog test is affected by the keynav
fixes.
2015-05-11 14:47:17 -04:00
Lars Uebernickel b737bfec24 Allow overriding WM_CLASS from the command line
Even when the program itself calls gdk_set_program_class(). There's
currently no way for this function to be called without breaking gdk's
--class command line option, because you cannot call it before
gtk_init().

https://bugzilla.gnome.org/show_bug.cgi?id=747634
2015-05-11 14:22:15 -04:00
Matthias Clasen 570fd6c185 gtk-demo: Remove an unncessary define
The changedisplay example no longer uses and deprecated
API, so don't disable deprecations.
2015-05-11 14:22:08 -04:00
Matthias Clasen 151e74c12d Revert "Work around a pkg-config bug"
This reverts commit 57751fa391.

I've been told that this is not, in fact, a pkg-config bug,
but a pkg-config feature.
2015-05-11 14:21:40 -04:00
Philip Chimento 09408aca1e quartz: Non-implementation of GdkGLContext
This makes sure the Quartz backend returns an error when asked to create
a GL context, rather than crashing because of a NULL vfunc.

https://bugzilla.gnome.org/show_bug.cgi?id=740199
2015-05-11 14:21:32 -04:00
Sjoerd Simons 103346c780 notify test: Don't test object relying on dbus connections
Don't test types that rely on a pre-existing dbus session bus.

https://bugzilla.gnome.org/show_bug.cgi?id=749009
2015-05-11 14:21:04 -04:00
Matthias Clasen ed9b598e9b GtkRecentChooser: Use a better busy cursor 2015-05-11 14:20:57 -04:00
Matthias Clasen 927d8e84dc GtkPrintUnixDialog: Use a better busy cursor 2015-05-11 14:20:49 -04:00
Garrett Regier 9c307fedc9 GtkFontChooserWidget: Remove unused struct field
This was added accidentally in a recent patch.

Signed-off-by: Garrett Regier <garrettregier@gmail.com>

https://bugzilla.gnome.org/show_bug.cgi?id=748992
2015-05-11 14:20:27 -04:00
Jakub Steiner 27130ab6b1 Adwaita: tone down popover dropshadow 2015-05-11 14:20:08 -04:00
Jonas Ådahl 0f18e90734 GtkWindow: Manually set CSD should enable shadow width calculation
If CSD is enabled with shadow even though it "shouldn't"*, the width
should still be calculated correctly. This fixes a regression caused by
b1e5ad469c.

* gtk_window_should_use_csd () returns false

https://bugzilla.gnome.org/show_bug.cgi?id=748615
2015-05-11 14:19:47 -04:00
Jonas Ådahl be8ff8e56a GtkWindow: Get the correct shadow width even before window is realized
The window state 'client_decorated' will only be set the window is being
realized. If anyone tries to get the shadow size before that it'd get
the with as if there always was no shadow.

This avoids negative sized opaque regions caused by the allocation being
smaller than shadow.

https://bugzilla.gnome.org/show_bug.cgi?id=748615
2015-05-11 14:19:32 -04:00
Matthias Clasen 6e92757ed0 GtkFontChooserWidget: Listen for fontconfig changes
We were relying on indirectly getting notify when fontconfig
configuration changes, by GtkSettings translating the timestamp
change into a style-invalidation, which gets fed through the
css invalidation machinery. That machinery has gotten good enough
at optimizing away redundant changes that it no longer emits
::style-updated in this case.

So, instead make the font chooser listen directly to what it
cares about: the fontconfig change notification from GtkSettings.
2015-05-11 14:19:21 -04:00
Emmanuele Bassi d2df0aa7ca fontchooser: Use gtk-fontconfig-timestamp setting
We can use the GtkSettings:gtk-fontconfig-timestamp property to decide
whether or not we should reload fonts on style and screen changes. This
should avoid doing a lot of work with large font collections when only
the theme has changed.

https://bugzilla.gnome.org/show_bug.cgi?id=748782
2015-05-11 14:19:14 -04:00
Emmanuele Bassi db4b1e62fe settings: Wayland-only systems also use fontconfig
We're relying on the X11 backend being compiled in, but that may not be
the case.

https://bugzilla.gnome.org/show_bug.cgi?id=748782
2015-05-11 14:18:46 -04:00
Christian Hergert 68e31e19fe inspector: allow object read-only properties in prop-editor
If we have a GObject property that is also a GObject, we should be able
to view additional information on that object (even if the param spec
is read-only).
2015-05-11 14:18:11 -04:00
Руслан Ижбулатов 9cbcd541d9 W32: Add a mapping for "left_ptr_watch" cursor
This is purely to support gdk_cursor_new_from_name().
In particular, its counterpart, gdk_cursor_new_for_display(), will not
be affected, because there's no GDK_LEFT_PTR_WATCH cursor type,
and because i don't have a fallback cursor bitmask for gdk/win32/xcursors.h
2015-05-11 14:17:51 -04:00
Jakub Steiner 3d9f024deb HC: implement overlay scrollbar theming
while the behavior was in place, the specific theming for
overlay scrollbars was missing, and content was hidden.
2015-05-11 14:17:31 -04:00
Matthias Clasen 2252876614 Drop PANGO_ENABLE_BACKEND
Not needed for a long time now.

https://bugzilla.gnome.org/show_bug.cgi?id=748783
2015-05-11 14:16:40 -04:00
Matthias Clasen 2d873f3449 docs: Add a note about button 4 & 5 2015-05-11 14:16:09 -04:00
Matthias Clasen adeca58af7 xi2: Don't set button mask 4 and 5
We interpret buttons 4-7 as old-school scroll events, so it does
not make sense to add these to the mask. Also fix an off-by-one
in the loop here, buttons_mask is 1-based.
2015-05-11 14:16:02 -04:00
Matthias Clasen ee184e895a GtkAboutDialog: Make credits section keyboard navigatable
Its the right thing to do.
2015-05-11 14:15:51 -04:00
Matthias Clasen 2f91f31b1a GtkAboutDialog: Fix some focus issues
Making a container focusable is rarely the right thing to do.
It typically breaks the focus chain, and makes the container
contents unfocusable, as was the case here.
2015-05-11 14:15:45 -04:00
Timm Bäder 6f7e6f68be inspector/misc-info: Fix typo 2015-05-11 14:15:30 -04:00
Matthias Clasen 7802bbd9c5 GtkSearchEngine: Use all search engines
Just using tracker does not work well if you are searching in
non-indexed locations, such as git checkouts or network mounts.

Ideally, we'd decide the 'best' engine to use for each location.
Since that is not easy to do, just run them in parallel for now,
which is the same strategy that nautilus uses.
2015-05-11 14:14:44 -04:00
Руслан Ижбулатов 1bb0c94767 Rewrite simple search engine to use GFile and breadth order
https://bugzilla.gnome.org/show_bug.cgi?id=746916
2015-05-11 14:14:38 -04:00
Matthias Clasen 1062be1115 GtkSearchEngine: Drop unused functionality 2015-05-11 14:13:08 -04:00
Matthias Clasen 2954c9c09b Drop a redundant call
g_thread_supported() is always TRUE nowadays, so drop the call.
2015-05-11 14:12:51 -04:00
Matthias Clasen f9bf9295c5 GtkFileChooser: Use a better busy cursor
It is possible to interact with the file chooser while
things are loading, so use a cursor that indicates this,
if we have one.
2015-05-11 14:12:44 -04:00
Руслан Ижбулатов d041ff409a Fix use-after-free in gdk_window_end_paint()
It's a miracle that this code ever worked.
2015-05-11 14:12:12 -04:00
Alexander Larsson efaaa3a4a8 wayland: Don't send bogus values for cursor surface buffer/scale
I was getting really weird values for scale for the blank cursor used
when hiding the cursor in a GtkEntry when typing, this was caused
by gdk_wayland_device_update_window_cursor sending random values
when the returned buffer was NULL.

We fix this by just not sending any buffer or scale updates in this
case.
2015-05-11 14:11:44 -04:00
Matthias Clasen 385798c89f Fix inclusion of examples in docs in non-srcdir builds
This is a bit messy, since xsltproc insists on stripping relative
paths to the basename before consulting the paths.

https://bugzilla.gnome.org/show_bug.cgi?id=748640
2015-05-11 14:11:17 -04:00
Jakub Steiner d597d5beca HC: include a missing sass function
- used in the color widget
2015-05-11 14:10:39 -04:00
Jakub Steiner 32e7d5ae59 HC: tone down backdrop for gtk switches
https://bugzilla.gnome.org/show_bug.cgi?id=746925
2015-05-11 14:10:25 -04:00
Matthias Clasen cc03e3319c docs: Add an cross-reference to template docs 2015-05-11 14:08:04 -04:00
Matthias Clasen 5efed59da1 Improve the docs for gdk_window_set_opaque_region
Fix several typos and annotate the region parameter
as allow-none.
2015-05-11 13:37:59 -04:00
Carlos Garnacho 5174ad9001 wayland: Don't unset the selected mimetype on drop_reply
gdk_wayland_drop_context_set_status() can't do much else currently besides
picking a mimetype (the first one is currently chosen). This may incorrectly
unset the mimetype chosen on .receive(), so the transfer is cancelled before
it even starts.

At the time drop_reply happens, we should have already picked a mimetype
along the way, so only cover for accepted=FALSE in order to unset it.
2015-05-11 13:37:53 -04:00
Carlos Garnacho 732e313a7a wayland: Plug leak
We leak refs on the dest window if it gets set multiple times, expected to
happen as the DnD operation moves across the window.
2015-05-11 13:37:48 -04:00
Carlos Garnacho 77c5cef932 wayland: Create internal GdkWindow to be set as the DnD source
During drag operations from another client, we currently set no window as
the DnD source. There's paths in upper layers though that rely on it being
set, just that we don't trigger these yet.
2015-05-11 13:37:42 -04:00
Lapo Calamandrei 21216fc8b1 Adwaita: scrollbar contrast bump 2015-05-11 13:36:07 -04:00
Руслан Ижбулатов 932ed7cd51 W32: Support horizontal mouse wheel scrolling
https://bugzilla.gnome.org/show_bug.cgi?id=748014
2015-05-11 13:35:50 -04:00
Lapo Calamandrei e9d65c9d51 Adwaita: colorpicker fixes.
Added another :not() to fix the first and last swatches in the
first section of colorpicker.
Dodge the artifacts due to stacked anti-aliased rounded corners by
increasing the radius of the base object by 1px.
2015-05-11 13:34:25 -04:00
Jakub Steiner ee6f29ae19 HighContrast: sync color picker changes with Adwaita 2015-05-11 13:34:18 -04:00
Lapo Calamandrei 5d3c596a84 Adwaita: clearer comment for colorbutton hack 2015-05-11 13:34:06 -04:00
Lapo Calamandrei c6c56f387a Adwaita: colorpicker and colorbutton fixes.
With nasty gross ugly code, no other ways, sorry.
2015-05-11 13:33:54 -04:00
Lapo Calamandrei 8069712a0e Adwaita: GtkPlacesSidebar insensitive items.
Set the right colors there.
2015-05-11 13:33:43 -04:00
Alexandre Franke f971d4e4f6 Updated French translation 2015-05-09 09:45:14 +00:00
Alexandre Franke bf7e5d48a3 Updated French translation 2015-05-09 08:19:47 +00:00
Petr Kovar 201918c501 Update Czech translation 2015-05-07 16:23:13 +02:00
Debarshi Ray afb1132f7a GtkStack: Don't emit notify::visible-child during destruction
https://bugzilla.gnome.org/show_bug.cgi?id=749012
2015-05-07 15:19:24 +02:00
Debarshi Ray 9270638f38 GtkStackSwitcher: Don't emit notify::visible-child when setting a stack
Synchronizing the visible child with the switcher's toggle buttons can
lead to GtkButton::clicked being emitted twice. Once for the button
that was active before, and once for the button that we just activated.
This leads to notify::visible-child being called twice and one of
them is with the wrong child.

Let's deal with this in the same way we handle the visible child
changing underneath us.

https://bugzilla.gnome.org/show_bug.cgi?id=749021
2015-05-07 15:15:54 +02:00
Daniel van Vugt ae8fe51669 configure: specify that mir backend needs gio-unix 2015-05-07 11:46:37 +02:00
Yuri Myasoedov 122d72f5da Fixed Russian translation 2015-05-06 13:54:30 +03:00
Lapo Calamandrei 2e6c86310f Adwaita: .title and .subtitle paddings
Only set side paddings for title and subtitle classes, we had 0
vertical padding set there, no idea why, so let's find out...
2015-05-06 10:09:09 +02:00
Lapo Calamandrei 259fc130fd Adwaita: fix selected backdrop list rows.
A misplaced selector was making backdrop selected list rows vanish
on hover, fixed. Thanks to Florian for spotting.
2015-05-06 10:08:34 +02:00
Руслан Ижбулатов 996a4f3d82 Use GDK_KEY_KP_Decimal instead of GDK_KP_Decimal
Fixes the FTBFS introduced in 578043f97e
2015-05-04 17:04:04 +00:00
Cédric Valmary d732df385f Updated Occitan translation 2015-05-02 15:26:50 +00:00
Matthias Clasen 165684fb7a win32: Support the decimal point on the keypad
Based on a patch by John Emmas.
2015-05-01 07:33:51 -04:00
Daiki Ueno 6fc72c423d build: Avoid xgettext crash on MSYS2
isatty() on MSYS2 returns non-zero if the fd is stdout and is redirected
to /dev/null.  That lets xgettext to produce colorized output and leads
to an assertion failure during terminal type detection.

Although the problem should be fixed in MSYS2, isatty() could behave
wrongly in many ways on Windows.  Since gtk+ doesn't need colorized
output, it would be safer to bypass the terminal dependent code.

See also:
https://lists.gnu.org/archive/html/bug-gettext/2015-04/msg00004.html

https://bugzilla.gnome.org/show_bug.cgi?id=748346
2015-04-27 13:26:09 -04:00
Christian Hergert 171448e4c4 gdk: don't segfault on beep with offscreen window
https://bugzilla.gnome.org/show_bug.cgi?id=748341
2015-04-27 13:26:04 -04:00
Kai Willadsen 5ff8f6824d docs: Fix incorrect cross-reference to GtkSearchBar
https://bugzilla.gnome.org/show_bug.cgi?id=748500
2015-04-27 13:25:57 -04:00
Matthias Clasen 9a75337b5f GtkDialog: Fix up docs
The ui fragment in the example was causing a critical
warning, which is not nice. Fix it to work properly.
2015-04-27 13:25:22 -04:00
Matthias Clasen cc74421272 GtkActionable: Fix small doc formatting issues 2015-04-27 13:24:45 -04:00
Matthias Clasen 17b5ee4067 GtkApplicationWindow: Fix small doc formatting issues 2015-04-27 13:24:38 -04:00
Matthias Clasen 43c10fd785 GtkApplication: Fix some small doc formatting issues 2015-04-27 13:24:31 -04:00
Matthias Clasen d74502e81f gl area: Add a few missing docs 2015-04-27 13:24:23 -04:00
Michael Catanzaro 8cd76cdd08 GtkMessageDialog: Minor documentation update
Icons went away in 3.12

https://bugzilla.gnome.org/show_bug.cgi?id=748061
2015-04-27 13:23:06 -04:00
Federico Mena Quintero 62cdbb85aa gdkcolor.h: Use GDK_DEPRECATED_IN_3_14_FOR() throughout
So that lazy people like me can see in the header file which new functions to use.
2015-04-27 13:22:43 -04:00
Sveinn í Felli 105d954946 Updated Icelandic translation 2015-04-23 11:30:34 +00:00
Ask Hjorth Larsen abfd4ddcf6 fix minor error in Danish translation of properties 2015-04-22 00:28:05 +02:00
Ask Hjorth Larsen ae71ac49f2 updated Danish translation of properties 2015-04-22 00:25:10 +02:00
Ask Hjorth Larsen f9ed596de9 Updated Danish translation 2015-04-22 00:18:13 +02:00
Daniel Korostil 8de39d8d46 Updated Ukrainian translation 2015-04-20 20:54:17 +03:00
Lars Uebernickel 456b5e50b5 GtkRange: fix horizontal scrolling
https://bugzilla.gnome.org/show_bug.cgi?id=737175
2015-04-17 17:31:00 +02:00
Rafael Ferreira 6bdcac4c45 Updated Brazilian Portuguese translation 2015-04-17 15:29:37 +00:00
Cosimo Cecchi 7b2f3a0887 window: fix initial shadow width for maximized/fullscreen windows
To calculate the shadow width, we look at the value of priv->fullscreen
and priv->maximized.
Those fields will have the actual value only after GTK receives back a
window state event though, so they will be wrong in _realize(). Look at
priv->fullscreen_initially and priv->maximize_initially too, to avoid
the size changing right after realize, which would make the window
flicker if maximized at startup.

https://bugzilla.gnome.org/show_bug.cgi?id=747808
2015-04-16 22:26:35 -04:00
Sebastian Keller e1e5cd881e Adwaita: fix outline radius for dialog-action-area buttons
https://bugzilla.gnome.org/show_bug.cgi?id=748013
2015-04-16 22:10:25 -04:00
Rafael Ferreira b28868cf72 Updated Brazilian Portuguese translation 2015-04-16 21:07:45 +00:00
Carlos Garnacho 78ba188814 scrolledwindow: Do not round dx/dy to int
Libinput will use 0.0f on the "scrolling finished" event, so check for this
instead of rounding (<1 values are sort of frequent on touchpads). This
impedes bug #745315 to resurface after commit d563b943ed.
2015-04-16 22:55:27 +02:00
Carlos Garnacho ffd944f1c1 scrolledwindow: Ensure the animation is cancelled on arriving scroll events
When the scrolledwindow receives scroll events, it ensures the timeout to
maybe start the "snap back to edges" animation is reset, but it does nothing
about the animation source. It must be reset just the same, to maybe be
started after the timeout fires up.
2015-04-16 18:45:51 +02:00
Matej Urbančič df0f5569d1 Updated Slovenian translation 2015-04-15 22:28:15 +02:00
Matthias Clasen c8dc2dee78 Fix window button updates in split headers
We were only updating window buttons when the headerbar was
a direct child of the window. That is not the case in more
complicated situations, such as the split headers in gedit
or polari. To fix such cases, make the headerbar itself listen
for state changes on its toplevel.

https://bugzilla.gnome.org/show_bug.cgi?id=747805
2015-04-14 17:29:50 -04:00
Matthias Clasen f323633883 3.16.2 2015-04-13 19:16:26 -04:00
Carlos Garnacho 272f43cae7 gesturesingle: Ignore motion/updates from unhandled sequences
This used to do the right thing, practically ignoring those event
if they went all through the event handler, unless this motion event
triggered the cancellation of this gesture from the event handler
of another controllers.

In this case, the controller would be reset, but the motion event
would still go through its handler, setting again
current_button/sequence as the motion event has buttons in its
modifiers. This leaves GtkGestureSingle with inconsistent data
that may interfere with future runs.

https://bugzilla.gnome.org/show_bug.cgi?id=747469
2015-04-13 17:29:25 +02:00
Carlos Garnacho 527d64e68b scrolledwindow: Show scrollbars on tablet devices
The code managing scrollbars visibility was too pervasively checking for
mouse devices, leaving pen/eraser/cursor devices with no scrollbars at
all. Relax these checks a bit, and actually toggle full-width scrollbars
on pen/eraser devices, so it is an easier target.

https://bugzilla.gnome.org/show_bug.cgi?id=747608
2015-04-13 17:29:25 +02:00
Jakub Steiner c986d6ce78 HC: fix selected list-rows
https://bugzilla.gnome.org/show_bug.cgi?id=747689
2015-04-13 17:07:16 +02:00
Evangelos Foutras ee679931ab x11: Relax requirements for setting ParentRelative
XSetWindowBackgroundPixmap() will throw BadMatch only in the case of a
different parent window depth. Different visuals are fine and actually
expected in Gtk+ 3.16 (since we don't stick to the system default visual
but try to pick a better one).

https://bugzilla.gnome.org/show_bug.cgi?id=747524
2015-04-13 08:27:51 -04:00
Carlos Garnacho fb54abb087 plug: Remove size_allocate handler
Since windows can be intermediate containers this is somewhat redundant,
plus gtk_window_size_allocate() will do additional things like allocating
the popovers, which was mistakenly skipped by local plugs not chaining up.

https://bugzilla.gnome.org/show_bug.cgi?id=747553
2015-04-13 12:43:15 +02:00
Khaled Hosny 946cc8ae4d Update Arabic translation 2015-04-12 01:42:31 +02:00
Anders Jonsson e6db3b556e Updated Swedish translation 2015-04-11 20:39:01 +00:00
Anders Jonsson 80881406ef Updated Swedish translation 2015-04-11 20:36:12 +00:00
Jakub Steiner 588c93ff36 HighContrast: insensitive backdrop list rows have a border
https://bugzilla.gnome.org/show_bug.cgi?id=747288
2015-04-10 17:02:26 +02:00
Jakub Steiner 290a31c614 notebook: prevent tab closebutton :hover to change metric 2015-04-10 17:01:00 +02:00
Lapo Calamandrei ac41eb4fac Adwaita: reset .list-row.button props more aggressively...
...otherwise we run into problem with `.button` inherited style
properties, see https://bugzilla.gnome.org/show_bug.cgi?id=747288
which applies to Adwaita as well.
2015-04-10 16:48:52 +02:00
Joanmarie Diggs 06efce6fa2 a11y: Only emit signals when cells change; not upon creation
This is a workaround for atspi-atk behaviour.

atspi-atk uses signal emission hooks. So it to already catches
signal emissions on creation of objects, before anyone could even
think of g_signal_connect()ing.

https://bugzilla.gnome.org/show_bug.cgi?id=746706
2015-04-10 16:44:03 +02:00
Joanmarie Diggs 45fb396343 a11y: Only emit name-changed once
We were emitting it twice, once with deleting the old text, once with
inserting the new text.

https://bugzilla.gnome.org/show_bug.cgi?id=746706
2015-04-10 16:44:03 +02:00
Joanmarie Diggs c7b96d8579 a11y: Free the cell text after emitting text-changed:delete.
This is needed because AT-SPI2's ATK bridge exposes the deleted string
to ATs.

https://bugzilla.gnome.org/show_bug.cgi?id=746706
2015-04-10 16:44:03 +02:00
Joanmarie Diggs 08bf5c4d8c a11y: Refactor code
Put the equality check in front. This allows better detection of when an
insert or delete needs to be emitted.

Also, only emit text-changed:delete if the deleted text is not the empty
string. Only emit text-changed:insert if the inserted text is not the
empty string.

https://bugzilla.gnome.org/show_bug.cgi?id=746706
2015-04-10 16:44:03 +02:00
Joanmarie Diggs 4784d35ec4 a11y: Refactor textcellaccessible code
Compute the new text and its length in advance. This way those
computations will not confuse us when they happen in the middle of the
actual action.

https://bugzilla.gnome.org/show_bug.cgi?id=746706
2015-04-10 16:44:03 +02:00
Matthias Clasen 95e80ef6f8 GtkApplication: Prevent more crashes around shutdown
gtk_application_shutdown clears the impl member, so all
callbacks, signal handlers, etc that might still be triggered
between a shutdown call and the return from the mainloop
better be prepared to deal with impl being NULL.
2015-04-10 08:05:25 -04:00
Sveinn í Felli 53d253d1f0 Updated Icelandic translation 2015-04-10 11:07:55 +00:00
Chun-wei Fan 5be441699b Visual Studio Builds: Fix Header "Installation"
gtksidebar.h was renamed as gtkstacksidebar.h, so fix that in the header
"installation".
2015-04-10 16:19:49 +08:00
Matthias Clasen ccea7799c4 popover: Remove signal handlers in dispose
If we don't, they may get triggered at an inopportune
time later, causing us to crash.

See
https://bugzilla.redhat.com/show_bug.cgi?id=1203499

https://bugzilla.gnome.org/show_bug.cgi?id=747539
2015-04-09 06:40:12 -04:00
Sveinn í Felli 755bda4bf5 Updated Icelandic translation 2015-04-09 10:31:51 +00:00
Matthias Clasen ed36e29ec4 wayland: Wait for output and seat information
When we open the connection, we get the wl_output object,
but we return before all the information such as monitor
geometry has arrived, which causes us to misinform early
users of this information. Do a roundtrip here that causes
us to wait until the information is complete. Do the same
for seats, just in case.
https://bugzilla.gnome.org/show_bug.cgi?id=747471
2015-04-09 06:01:39 -04:00
Matthias Clasen 3a40225872 Make gtk-update-icon-cache not fall over leftover temp files
This is a followup to 0fd185fa6d. There is no
good reason to only try again if --force is passed. Do it
always.

See
https://bugzilla.redhat.com/show_bug.cgi?id=1194957
2015-04-08 20:35:10 -04:00
Matthias Clasen 9753499a77 tree view: Avoid a crash with rubberbanding
When a treeview is destroyed while rubberbanding is going
on, we crash because the rb tree is nuked before we want
to access it to stop the rubberbanding. To avoid this crash
end the rubberbanding early in destroy().

See
https://bugzilla.redhat.com/show_bug.cgi?id=1173904
2015-04-08 18:57:26 -04:00
Matthias Clasen 3894d1923c GtkApplication: avoid a crash
It can apparently happen that we get focus in events
on windows after gtk_application_shutdown() has been
called. Avoid an unnecessary crash in this case.

See
https://bugzilla.redhat.com/show_bug.cgi?id=1176339
2015-04-08 15:46:07 -04:00
Matthias Clasen 7963f68929 Revert "image: Optimize non-resize changes"
This reverts commit fef7d65685.

We're still seeing regressions from this, see
http://bugzilla.redhat.com/show_bug.cgi?id=1208183
2015-04-08 14:18:08 -04:00
Matthias Clasen 2baadce9c6 3.16.1 2015-04-07 08:08:12 -04:00
Matthias Clasen f65d46ff2f Fix indicator proximity checks
The coordinate translations here were not working properly
for window widgets inside the scrolled window, as can be
seen e.g. for the horizontal scrollbar of the 'Tree View'
example in gtk3-demo.

https://bugzilla.gnome.org/show_bug.cgi?id=747406
2015-04-07 06:31:36 -04:00
Victor Ibragimov 28cc8dc745 Updated Tajik translation 2015-04-07 05:11:24 +00:00
Matthias Clasen b6b03e261a Make indicators pop out when needed
When moving over a non-expanded indicator from the outside, we were
not expanding it, due to on_scrollbar being true. This can be seen
e.g. when moving from the content pane over to the sidebar indicator
in gtk3-demo. We must still ensure that the indicator is expanded
when receiving motion events over the indicator.

https://bugzilla.gnome.org/show_bug.cgi?id=747407
2015-04-06 19:37:34 -04:00
Matthias Clasen 3824f7a44c GtkListBox: Make model binding introspectable
Introspection can't deal with bare pointers, so annotate
the callback as taking objects. This is the outcome of
discussion in
https://bugzilla.gnome.org/show_bug.cgi?id=746893
2015-04-05 08:15:56 -04:00
Paolo Borelli 2aec572a2f gtktextbuffer: small cleanup in clipboard handling
Make code shorter and also more efficient since we move the
selection check out of the loop

https://bugzilla.gnome.org/show_bug.cgi?id=747096
2015-04-05 07:54:43 -04:00
Olivier Fourdan b52654b03d x11/gl: Fix use after free
https://bugzilla.gnome.org/show_bug.cgi?id=747305

Signed-off-by: Olivier Fourdan <fourdan@xfce.org>
2015-04-05 07:43:49 -04:00
Victor Ibragimov c9dadf92fe Updated Tajik translation 2015-04-04 05:03:31 +00:00
Dušan Kazik 83d22b4df9 Updated Slovak translation 2015-04-02 08:55:57 +00:00
Victor Ibragimov 2edbbe716d Updated Tajik translation 2015-04-02 05:09:38 +00:00
Carlos Garnacho d563b943ed scrolledwindow: Ignore 0/0 scroll events when possibly cancelling animation
These should be used eventually to start kinetic scrolling, so should definitely
be ignored on cancellation.

https://bugzilla.gnome.org/show_bug.cgi?id=747133
2015-04-01 16:27:52 +02:00
Stas Solovey ac12895430 Updated Russian translation 2015-04-01 12:15:05 +00:00
Stas Solovey fbd9092755 Updated Russian translation 2015-04-01 11:20:59 +00:00
Marek Černocký f39d0ede70 Udated Czech translation 2015-04-01 11:54:24 +02:00
Matej Urbančič 1d54e38818 Updated Slovenian translation 2015-03-31 21:09:08 +02:00
Carlos Garnacho 260c2b7477 scrolledwindow: Remove needless "dragging" field from Indicator struct
The "over" state already stays set while scrollbar dragging happens, there's
no need to double track that.

https://bugzilla.gnome.org/show_bug.cgi?id=746961
2015-03-31 16:08:47 +02:00
Carlos Garnacho 398aeb31b3 scrolledwindow: Check the event widget on captured motion events
This path is only intended to be triggered on events directed towards the
child of the scrolledwindow, so make it explicitly so. This avoids scrollbar
"over" state flashing when dragging finishes within the slider.

https://bugzilla.gnome.org/show_bug.cgi?id=746961
2015-03-31 16:08:47 +02:00
Stas Solovey 846bd99cdd Updated Russian translation 2015-03-30 22:38:14 +00:00
Carlos Garnacho ebca729cd1 gtkdnd: Restore widget opacity after fading out
Otherwise the widget is left fully transparent, and will start as such if
the widget is reused.
2015-03-29 22:59:41 +02:00
Carlos Garnacho 1597e2e6b8 gtkdnd: Set the icon helper from the drag site onto the context
If the icon happened to come from the drag site icon helper (ie. set through
gtk_drag_source_set_icon*), it would be referenced on the GtkDragInfo,
but not hooked into its context. This results on non visible drag windows,
until set_icon_helper() happened to be called on some path.
2015-03-29 22:59:41 +02:00
Benjamin Otte 24be2232b5 roundedbox: Fix a copy/paste error
This caused shadows to not be drawn in certain situations when overlayed
via a popover animation.

https://bugzilla.gnome.org/show_bug.cgi?id=746862
2015-03-29 16:47:39 -04:00
Matthias Clasen 56d509b09b radio button: Fix directional navigation
GtkRadioButton had a deficient copy of the focus sort code
in GtkContainer, causing focus to jump over the next button
in the list. Just use _gtk_container_focus_sort() here,
which fixes the bug _and_ saves 80 lines of code.

https://bugzilla.gnome.org/show_bug.cgi?id=746817
2015-03-29 16:47:31 -04:00
Matthias Clasen 287e2250e0 Fix separator in testsplitheaders 2015-03-29 16:47:24 -04:00
Lars Uebernickel a696ac14f0 gtkprogressbar: fix size allocation
As of 74405cc, progress bars use a new design with values drawn on top
(or to the left) of the through instead of inside of it. This change
brought a number of regressions: the min-horizontal-bar-height and
min-vertical-bar-width style properties are not respected anymore. For
vertical progress bars, the value was drawn too close to the bar and not
centered vertically.

Fix this by respecting the style properties and drawing the value label
at the correct position.

Also, the xspacing and yspacing properties didn't server any apparent
purpose. Change their semantics to mean "the spacing between the label
and the bar". Hence, they only need to be added to the size request when
showing the label. Since we are changing semantics anyway, reduce their
default values from 7 to 2, to avoid and excessive gap.

https://bugzilla.gnome.org/show_bug.cgi?id=746688
2015-03-29 16:47:17 -04:00
Antoine Jacoutot 0c83e6f52a make libcanberra support optional
Make it possible to control libcanberra support so we don't risk ending up with
a cyclic dependency when using packages: gtk+ -> libcanberra-gtk3 -> gtk+

https://bugzilla.gnome.org/show_bug.cgi?id=746904
2015-03-29 16:47:01 -04:00
Will Thompson 9b3af5878f bbox: correct documentation typo 2015-03-29 16:46:11 -04:00
Joanmarie Diggs 862a1c36ef Fix an AtkStateType emitted for GtkBooleanCellAccessible
An apparent copy-and-paste error is resulting in ATs being notified of
changes in ATK_STATE_CHECKED when the cell's "sensitive" state changes.

https://bugzilla.gnome.org/show_bug.cgi?id=746784
2015-03-29 16:45:56 -04:00
Benjamin Otte b77c6b1b97 filechooser: Use same priority everywhere
I managed to stall recent files today while trying to save a GTK
testcase in glade that contained enough spinning spinners that the CPU
was saturated just redrawing things.

I had to navigate the filesystem!
2015-03-29 16:44:47 -04:00
Marcus Karlsson 59861241ad GtkRange: Check "inverted" property when drawing
The direction in which the slider moves can be inverted by setting the
inverted property. But the draw method does not check this, instead it
checks if the direction of the widget is set to be right to left.

Call the should_invert function in order to determine if the direction
of the range should be inverted. It too checks the widget's direction,
but also checks the "inverted" property, and allows the range to be
drawn inverted even if it is vertically oriented.

https://bugzilla.gnome.org/show_bug.cgi?id=746712
2015-03-29 16:44:38 -04:00
Marcus Karlsson 1e8b89a5ce GtkRange: Fix drawing of fill-level
Compute the proportion of the range that should be filled to match the
fill level, and use it to compute the starting point and length of the
area between the slider and the fill level.

https://bugzilla.gnome.org/show_bug.cgi?id=734741
2015-03-29 16:35:54 -04:00
Marek Černocký 7cea667a3e Updated Czech translation 2015-03-29 13:58:07 +02:00
Marek Černocký 293b53bb00 Updated Czech translation 2015-03-29 13:50:37 +02:00
Matej Urbančič 739fdecc09 Updated Slovenian translation 2015-03-28 22:43:48 +01:00
Jordi Mas 390414e635 Upload Catalan translation 2015-03-28 13:37:50 +01:00
Ryan Lortie e1da396e5d NEWS: mention GtkListBoxCreateWidgetFunc API break
This should probably be in the NEWS for the next release...
2015-03-27 12:10:39 -04:00
Ryan Lortie 992ff9818c GtkListBox: fix model binding refcount issue
As it is, GtkListBox model binding will work nicely as long as your
create_widget_func returns a floating reference on the newly-created
widget.

If you try to return a full reference (as any higher-level language
would do) then you will leak that reference.

Fix that up by converting any floating references into full references
and then unconditionally releasing the full reference after adding to
the box.

https://bugzilla.gnome.org/show_bug.cgi?id=746893
2015-03-27 12:08:02 -04:00
Emmanuele Bassi 6d75d452aa docs: Add initialization example for GtkGLArea
Show how to safely check for errors when initializing the OpenGL
pipeline.
2015-03-27 11:33:59 +00:00
Emmanuele Bassi c7dd439d4f x11/gl: Do not use GLX_EXT_texture_from_pixmap if not available
If the GLX_EXT_texture_from_pixmap extension is not available when we
did the extensions check, then there's no point in using the backend
specific code paths that rely on it.
2015-03-27 11:33:52 +00:00
Emmanuele Bassi a7f06d2ae6 demo/glarea: Check errors on GtkGLArea
We should not call OpenGL API if GtkGLArea is in an error state.

https://bugzilla.gnome.org/show_bug.cgi?id=746746
2015-03-27 11:33:41 +00:00
Emmanuele Bassi f72db440b5 glarea: Check that the context is not NULL
The public API should perform more checks when it comes to an NULL
context.

https://bugzilla.gnome.org/show_bug.cgi?id=746746
2015-03-27 11:33:29 +00:00
Emmanuele Bassi 732671f639 x11/gl: Do not try to call MakeCurrent with a NULL context
This should not happen, but better safe than sorry.

https://bugzilla.gnome.org/show_bug.cgi?id=746746
2015-03-27 11:33:22 +00:00
Emmanuele Bassi d4c7fcd050 x11/gl: Trap GL context creation
Avoid an X11 error in case the context creation fails, so we can avoid a
crash and pick it up in the upper layers, and display an error.

https://bugzilla.gnome.org/show_bug.cgi?id=746746
2015-03-27 11:33:19 +00:00
Hans de Goede 318c784b3e scrolledwindow: Extend trackpoint heuristic to ALPS trackpoints
These have a different characteristic device name, look for it too
in order to enable trackpoint features.
2015-03-26 19:52:14 +01:00
Руслан Ижбулатов 80df4f3b1c W32: Only override window miximized position for CSDed windows
This fixes an issue with non-CSDed windows being improperly positioned
when maximized, which was introduced by the previous commit.

https://bugzilla.gnome.org/show_bug.cgi?id=746821
2015-03-26 17:07:34 +00:00
Руслан Ижбулатов 047c6210ad W32: Correctly set maximized window position
Use screen workarea to *also* set the position of a maximized window,
not just its size. Without this the window position defaults to 0:0
(the topleft corner), which is wrong when taskbar is position along the
top or left edge of the screen.

https://bugzilla.gnome.org/show_bug.cgi?id=746821
2015-03-26 15:53:26 +00:00
Aurimas Černius a455c3cc49 Updated Lithuanian translation 2015-03-25 23:55:00 +02:00
Rico Tzschichholz 99a0b320a3 textview: Fix "Since" versions after backport
Fix for 28063ee2e4 which got cherry-picked
to 3.16

(cherry picked from commit 9ca8b71e76)
2015-03-25 20:55:52 +01:00
Fran Dieguez df2c1c4d5d Updated Galician translation 2015-03-24 22:30:02 +00:00
Ignacio Casal Quinteiro 2eab2d79b7 inspector: fix warning about not using the right format for an int64 2015-03-24 14:32:58 +01:00
Daniel Mustieles b83f8bd825 Updated Spanish translation 2015-03-24 10:41:35 +01:00
Daniel Mustieles 9f5eb8f021 Updated Spanish translation 2015-03-24 10:40:21 +01:00
Trần Ngọc Quân e3d64fb0e2 Updated Vietnamese translation
Signed-off-by: Trần Ngọc Quân <vnwildman@gmail.com>
2015-03-24 14:13:39 +07:00
Changwoo Ryu 1a9d78c58d Updated Korean translation 2015-03-24 09:54:04 +09:00
Inaki Larranaga Murgoitio 64c6869708 Updated Basque language 2015-03-23 22:24:38 +01:00
Inaki Larranaga Murgoitio afd8697baa Updated Basque language 2015-03-23 22:24:13 +01:00
Fran Dieguez b652f840f2 Updated Galician translation 2015-03-23 21:14:00 +00:00
Fran Dieguez 349fbb1eac Updated Galician translation 2015-03-23 21:10:45 +00:00
Piotr Drąg 3399395234 Updated Polish translation 2015-03-23 17:33:05 +01:00
Marek Černocký f52e9bffd6 Updated Czech translation 2015-03-23 16:15:28 +01:00
Matthias Clasen 7be4d69868 csd: Fix an oversight for popups
After the recent rework of client-side shadow code, menus,
tooltips and similar popups were ending up with solid decorations.
Fix this oversight.
2015-03-23 10:43:43 -04:00
Balázs Úr 36f02f4041 Updated Hungarian translation 2015-03-23 14:39:35 +00:00
Balázs Úr 08d649de2f Updated Hungarian translation 2015-03-23 14:35:17 +00:00
Yosef Or Boczko 0235e4c7a1 Update properties Hebrew translation 2015-03-23 14:46:19 +02:00
Yosef Or Boczko de00a55751 Updated Hebrew translation 2015-03-23 14:44:04 +02:00
Tom Tryfonidis ba6fd13d38 Updated Greek translation 2015-03-23 10:23:04 +00:00
Tom Tryfonidis 2ecd3b033d Updated Greek translations 2015-03-23 12:09:17 +02:00
Milo Casagrande db7732ee6c Updated Italian translation 2015-03-23 07:28:32 +00:00
Milo Casagrande 9b9aa14ef7 Updated Italian translation 2015-03-23 07:24:33 +00:00
Matthias Clasen bff9f190aa Stop using GDK_POINTER_MOTION_HINT_MASK in widgets
It is deprecated and no longer needed, and,as observed in
https://bugzilla.gnome.org/show_bug.cgi?id=746253 it
interferes with turning off event compression.
2015-03-22 23:03:26 -04:00
Matthias Clasen 867dcd3d67 Silence another compiler warning
Again, our habit of comparing enum values against -1.
2015-03-22 23:03:13 -04:00
Matthias Clasen cb25f48bf6 Don't return G_TYPE_INVALID as a pointer
Use NULL for g_return_val_if_fail checks if the function returns
a pointer. Pointed out by clang.
2015-03-22 23:03:06 -04:00
Matthias Clasen 76a37d542e text view: Avoid clang compiler warnings
Again, our habit to use -1 as an unset value for enum types.
2015-03-22 23:03:00 -04:00
Matthias Clasen c30f74e506 Remove a redundant const
const gchar const is still just const gchar, unless there's
indirections in between.
2015-03-22 23:02:54 -04:00
Matthias Clasen 1768f3e5dd css: Silence a clang warning
Clang complains that this check can never be true. Since this
is a argument range check which we do to catch bad input,
convince clang to not complain instead of taking it out.
2015-03-22 23:02:48 -04:00
Matthias Clasen 28fde2f320 Remove a pointless comparison
Comparing an unsigned value against < 0 is not going to succeed.
Pointed out by clang.
2015-03-22 23:02:43 -04:00
Matthias Clasen 511d7c3304 paper size: Don't use abs() on floats
Use fabs() instead. Pointed out by clang.
2015-03-22 23:02:36 -04:00
Matthias Clasen 885b5bbe30 More of the same
A similar case in GtkIconHelper. Here we were confusing ourselves,
and compared a icon_size against -1, although the variable is
never set to -1.
2015-03-22 23:02:30 -04:00
Matthias Clasen 289a8e824d Avoid some clang compiler warnings
Avoid some compiler warnings from clang in deprecated code.
Most of these are around our habit of using -1 as an 'unset'
value for enumerations.
2015-03-22 23:02:24 -04:00
Matthias Clasen 524ccf6d42 Fix some clang warnings
It complains about double const, and it is right.
2015-03-22 23:02:17 -04:00
Matthias Clasen eaa77f6918 Make the blur code compile with clang
clang complains that the expression involving sqrt() is not
constant, and thus refuses to accept it as a case label. So,
use precomputed values instead.

https://bugzilla.gnome.org/show_bug.cgi?id=746468
2015-03-22 23:01:51 -04:00
Matthias Clasen 2984dcdbe5 tooltip: Minor cleanup
Preserve the symmetry in gtk_tooltip_set_last_window.
2015-03-22 23:01:42 -04:00
Matthias Clasen 111a84bd1c search bar: Clean up weak pointer handling
Break out a setter that manages the weak pointer, and
use it in finalize. This also fixes a bug where we were
forgetting to disconnect the right signal handler in
some cases.
2015-03-22 23:01:41 -04:00
Matthias Clasen 32c4bcbd3e mount operation: Minor formatting cleanup
The pattern for g_object_add_weak_pointer calls is to
have the same expression in both arguments.
2015-03-22 23:00:53 -04:00
Matthias Clasen 31252c1fe4 menu button: Minor cleanup
Preserve the symmetry in set_align_widget_pointer.
2015-03-22 23:00:48 -04:00
Matthias Clasen dd09993f37 Clean up some unfortunate formatting
"if (...) do" just looks wrong.
2015-03-22 23:00:40 -04:00
Matthias Clasen c0727abccc dnd: Introduce a helper to manage the weak pointer
Introduce a setter that takes care of updating the weak ref
whenever we assign info->widget. Just a cleanup of the previous patch.
2015-03-22 23:00:25 -04:00
Tom Hughes 9a27dca38f DND: Clean up weak pointers when they are no longer needed
Failure to do so leads to memory corruption down the road.
This was introduced in commit 650c25e06c.

https://bugzilla.gnome.org/show_bug.cgi?id=746602
2015-03-22 23:00:18 -04:00
Matthias Clasen ca3c79e997 radio-menu-item: Allow arguments to be NULL
Some arguments, like the group and the label of a RadioMenuItem, can be
NULL: the RadioMenuItem has all the code to deal with them. The argument
validation is too strict, though, for instance doing:

  return_if_fail (IS_RADIO_MENU_ITEM (foo))

  if (foo != NULL)
    set_foo (foo)

Which is obviously incorrect.

This commit also modifies the annotations of the API, to ensure that
language bindings do the right thing.

https://bugzilla.gnome.org/show_bug.cgi?id=671362
2015-03-22 23:00:09 -04:00
Emmanuele Bassi 1d24014a8b radio-menu-item: Handle a !NULL group
If we create a RadioMenuItem without a group, and then set a group, the
menu item will still be set as active, which means an inconsistently
drawn radio menu item - as the RadioMenuItem will set the active flag on
itself, but then it won't reset it when it gets a new group.

https://bugzilla.gnome.org/show_bug.cgi?id=671362
2015-03-22 23:00:02 -04:00
Olivier Fourdan 9da241b2d0 Improve CSD decorations without a compositor
It turned out that using mwm hints to instruct wms to
create border-only decorations is not really working
universally. So, instead of doing this, render a solid
frame without shadow on the client-side to handle this
case.

https://bugzilla.gnome.org/show_bug.cgi?id=746222

Signed-off-by: Olivier Fourdan <fourdan@xfce.org>
2015-03-22 22:59:37 -04:00
Matthias Clasen fef7d65685 image: Optimize non-resize changes
When the image content is changed, only queue a resize
if the size is actually changing, otherwise just a
redraw. Suggested by Owen in

https://bugzilla.gnome.org/show_bug.cgi?id=613833
2015-03-22 22:59:30 -04:00
Christian Hergert 0230fff141 a11y: handle atk race condition where widget has been destroyed
If the widget has been destroyed since a DBus message had been sent,
we could be in a condition that the widget pointer exists but it does
not have a window.

This bails as if the widget didn't exist if there is no available
GdkWindow.

We also set the extents to 0 to be defensive since this is a vfunc
implementation.

https://bugzilla.gnome.org/show_bug.cgi?id=746586
2015-03-22 22:59:21 -04:00
Alexander Larsson da5cbcaf86 box-shadow: For top/bottom and left/right parts, repeat a single line
Since these part really are the same in all of the x or y direction
and we don't blur in that direction we can just blur one line and
repeat it during drawing.

https://bugzilla.gnome.org/show_bug.cgi?id=746468
2015-03-22 22:59:04 -04:00
Alexander Larsson 0707a2fa0e shadow-box: Blur only horizontally/vertically for the non-corner parts
There is no need to e.g. blur in the x-direction for the top part
of a box shadow. Also, there is no need to extend the mask in the
non-blurred direction.

https://bugzilla.gnome.org/show_bug.cgi?id=746468
2015-03-22 22:58:54 -04:00
Alexander Larsson d370d130fb shadow-box: Bail out blur early if radius is 1px
For radius 1px the current implementation rounds down to a 1 px box
filter which is a no-op. Rather than creating useless shadow masks
in this case we bail out blurring early.

Another alternative would be to make radius 1px round up to a 2 px box
filter, but that would change the rendering of Adwaita which is probably
not a great idea this late in the cycle.

https://bugzilla.gnome.org/show_bug.cgi?id=746468
2015-03-22 22:58:46 -04:00
Alexander Larsson c96df5a350 gtkcairoblur: Unroll inner loop for common radius values
This unrolls the inner blur loop for radius 1-10, allowing
the compiler to use a divide-by-constant operation instead
of a generic division.

Here is the blur-performance output before:

Radius  1: 124.95 msec, 32.01 kpixels/msec:
Radius  2: 117.27 msec, 34.11 kpixels/msec:
Radius  3: 123.57 msec, 32.37 kpixels/msec:
Radius  4: 118.17 msec, 33.85 kpixels/msec:
Radius  5: 119.32 msec, 33.52 kpixels/msec:
Radius  6: 124.17 msec, 32.21 kpixels/msec:
Radius  7: 121.04 msec, 33.05 kpixels/msec:
Radius  8: 130.64 msec, 30.62 kpixels/msec:
Radius  9: 119.47 msec, 33.48 kpixels/msec:
Radius 10: 117.95 msec, 33.91 kpixels/msec:
Radius 11: 122.38 msec, 32.68 kpixels/msec:
Radius 12: 121.92 msec, 32.81 kpixels/msec:
Radius 13: 125.45 msec, 31.89 kpixels/msec:
Radius 14: 121.63 msec, 32.89 kpixels/msec:
Radius 15: 120.18 msec, 33.28 kpixels/msec:

And after:

Radius  1: 42.26 msec, 94.65 kpixels/msec:
Radius  2: 59.15 msec, 67.62 kpixels/msec:
Radius  3: 60.29 msec, 66.35 kpixels/msec:
Radius  4: 64.53 msec, 61.99 kpixels/msec:
Radius  5: 60.07 msec, 66.59 kpixels/msec:
Radius  6: 62.43 msec, 64.07 kpixels/msec:
Radius  7: 60.36 msec, 66.27 kpixels/msec:
Radius  8: 59.59 msec, 67.13 kpixels/msec:
Radius  9: 76.17 msec, 52.51 kpixels/msec:
Radius 10: 79.41 msec, 50.37 kpixels/msec:
Radius 11: 118.92 msec, 33.64 kpixels/msec:
Radius 12: 121.31 msec, 32.97 kpixels/msec:
Radius 13: 118.30 msec, 33.81 kpixels/msec:
Radius 14: 116.82 msec, 34.24 kpixels/msec:
Radius 15: 116.99 msec, 34.19 kpixels/msec:

I.e. almost double performance for the unrolled radius values.

https://bugzilla.gnome.org/show_bug.cgi?id=746468
2015-03-22 22:58:39 -04:00
Alexander Larsson 41e863a0f0 gtkcairoblur: Minor restructure
This just moves get_box_filter_size to the top and makes
it a macro (so it can be used as a constant later).

https://bugzilla.gnome.org/show_bug.cgi?id=746468
2015-03-22 22:58:33 -04:00
Alexander Larsson 9bc2bbf782 Add performance test for gtkcairoblur
This just creates a large cairo surface and times bluring it
at various values of radius.

https://bugzilla.gnome.org/show_bug.cgi?id=746468
2015-03-22 22:58:27 -04:00
Matthias Clasen 586cdb63e4 HighContrast: Fix a typo
Commit 0a39d7d9 introduced a selected_bg_color with a missing $
in front of it.
2015-03-22 22:58:19 -04:00
Matthias Clasen 2506683cc3 reftests: Add a way to compare different runs
gtk-reftest already had an --output=DIR option to tell it where
to save all the resulting images. Now you can combine this with
the --compare-with=DIR option in a second run to make gtk-reftest
compare the .out.png files from the first run with the .out.png
files of the current run, instead of producing .ref.png files.

The intended use for this is to verify that changes do not affect
the generated output.
2015-03-22 22:58:09 -04:00
Matthias Clasen bcfa4eec25 gtk-demo: Plug a memory leak 2015-03-22 22:57:13 -04:00
Matthias Clasen 59674ba8f4 widget-factory: Fix toolbar on page 3
Set toolbar-style to 'icons' to avoid rectangular buttons.
2015-03-22 22:57:05 -04:00
Vadim Rutkovsky e497363d60 inspector: show accessible name and description 2015-03-22 22:56:55 -04:00
Bastien Nocera e166747170 inspector: Make it easier to cut'n'paste advice message
The message says "Enable statistics with GOBJECT_DEBUG=instance-count"
but the message itself isn't selectable, making it hard to cut'n'paste.

https://bugzilla.gnome.org/show_bug.cgi?id=746391
2015-03-22 22:56:41 -04:00
Benjamin Otte 79ab6c8963 notebook: Protect against invalid allocations
A widget can be mapped but not have a size allocated yet. In that case
avoid computing a broken rectangle.

https://bugzilla.gnome.org/show_bug.cgi?id=746301
2015-03-22 22:55:57 -04:00
Christian Hergert 2d5b801a28 textview: add support for underline and strikethrough colors
This commit adds the GtkTextTag:underline-rgba and :strikethrough-rgba
properties and the necessary plumbing to apply these colors in GtkTextLayout.
With this change, you can alter the color of underlines including those
of type PANGO_UNDERLINE_ERROR.

You might want to alter the underline color to differentiate between
spelling and grammer mistakes. In code editors, it is convenient to
differentiate between errors and warnings.

Note that the GtkTextAppearance struct is public ABI and has no spare
room for new fields, so we are resorting to some tricky packing to store
the colors in the unused pixel field of the fg_color and bg_color structs.
This packing is accomplished by the macros in gtktextattributesprivate.h.

Signed-off-by: Christian Hergert <christian@hergert.me>

https://bugzilla.gnome.org/show_bug.cgi?id=402168
2015-03-22 22:55:29 -04:00
Matthias Clasen beb19b389b GtkRange: Fix scroll wheel direction for horizontal ranges
The expected behavior here is that scrolling up goes towards
larger values, ie to the right. This matches e.g. volume
sliders in gnome-shell.

https://bugzilla.gnome.org/show_bug.cgi?id=737175
2015-03-22 22:55:17 -04:00
Matthias Clasen 539caa897a scrolled window: Use shift to modify scroll direction
It has been a long-standing request to interpret scroll events
with Shift held down as horizontal instead of vertical, and
some applications are already doing this on their own.

https://bugzilla.gnome.org/show_bug.cgi?id=132197
2015-03-22 22:55:06 -04:00
Matthias Clasen a816ccd496 3.16.0 2015-03-22 21:50:55 -04:00
Matthias Clasen 3a2f5634ee Updates 2015-03-22 21:50:55 -04:00
Andika Triwidada 4cee145764 Updated Indonesian translation 2015-03-23 00:06:08 +00:00
Jiro Matsuzawa 14289cfb3e l10n: Update Japanese translation 2015-03-23 02:54:19 +09:00
Andika Triwidada 9c45420bd8 Updated Indonesian translation 2015-03-22 09:30:19 +00:00
Samir Ribic b4c6fb6334 Updated Bosnian translation 2015-03-22 07:54:46 +00:00
Muhammet Kara 686fec77cb Updated Turkish translation 2015-03-21 21:29:43 +00:00
Inaki Larranaga Murgoitio f5051cca83 Updated Basque language 2015-03-21 17:01:29 +01:00
Inaki Larranaga Murgoitio 6f748c31ca Updated Basque language 2015-03-21 16:57:50 +01:00
Matthias Clasen 56583717fe HighContrast: Fix a typo
Commit 0a39d7d9 introduced a selected_bg_color with a missing $
in front of it.
2015-03-20 20:50:55 -04:00
Gábor Kelemen 1d93297a3a Updated Hungarian translation 2015-03-20 23:20:39 +00:00
Rico Tzschichholz 7c63374093 mir: Fix version annotation, the mir-backend is available since 3.16 2015-03-20 20:18:44 +01:00
Jakub Steiner 0a39d7d91e HighContrast: fix insensitive and backdrop states
- checkboxes, labels, menus/modelbuttons and buttons were
  a mixed bag for :insensitive and :backdrop

https://bugzilla.gnome.org/show_bug.cgi?id=746188
2015-03-20 13:08:17 +01:00
Carlos Garnacho 139ed7409f wayland: Silence warnings on clipboard data sending cancellation
During copy/paste, it may be common that we receive several property changes
around the selection atom, this results in warnings when cancelling the previous
write attempt. We already honor the last request properly, so we should just
cancel silently.
2015-03-19 20:15:55 -04:00
Carlos Garnacho e995c0d1bf wayland: Ensure we re-request the target if the fd changes
If we receive wl_data_source.target before .send, the target would already
be cached, but we'd take no action on the new fd.
2015-03-19 20:15:55 -04:00
Carlos Garnacho 9ec5b3f9a1 wayland: Don't accept the "TARGETS" target on the wl_data_offer
This is handled separately through the data already cached from the
wl_data_offer.offer handler, we can avoid this request entirely then.
2015-03-19 20:15:55 -04:00
Kjartan Maraas 223209ecaa Updated Norwegian bokmål translation. 2015-03-19 21:26:44 +01:00
Милош Поповић 8d6b19533f Updated Serbian translation 2015-03-19 13:23:10 +00:00
Carlos Garnacho 17b65d3c8a wayland: Fix thinko in wl_data_source.cancelled handler
The wl_data_source may be the clipboard's. Looking up the drag context in
order to get the display isn't going to fare well there. So, just use the
default display, and only look up the drag context when we know we need it.

https://bugzilla.gnome.org/show_bug.cgi?id=746386
2015-03-18 12:13:18 +01:00
Chao-Hsiung Liao 847a79c5f9 Updated Chinese (Taiwan) translation 2015-03-18 01:54:29 +00:00
Chao-Hsiung Liao 24db6d5518 Updated Chinese (Taiwan) translation 2015-03-18 01:51:13 +00:00
262 changed files with 128164 additions and 111188 deletions
+244
View File
@@ -1,3 +1,247 @@
Overview of changes in GTK+ 3.16.7
==================================
* Bugs fixed:
345345 PrintOperation::paginate is not emitted for class handler
579466 gtk_entry_completion_insert_action documentation is misleading
751721 No release event for shift key when both shift keys were pressed
753621 Calculate screen physical size
753628 user options of wrong printer are used
753644 Switching from Multipress input method to None immediately kills...
754535 Cursor disappears only on adding characters
* Translation updates:
Brazilian Portuguese
Czech
German
Hungarian
Indonesian
Lithuanian
Polish
Portuguese
Swedish
Overview of changes in GTK+ 3.16.6
==================================
* OS X: Partial aspect ratio support
* Revert a problematic change to scroll event handling
* Bug fixes:
741800 GTK3 apps have huge rendering pauses/hangs over SSH connection
751401 crash on DnD
751625 build error with pure wayland
752016 testgmenu: use the menu binding code
752093 Improvement to GtkImageMenuItem long description and code snippet
752520 Crash getting a NULL visual in glx_pixmap_get
* Translation updates:
Czech
Hungarian
Lithuanian
Polish
Slovenian
Overview of changes in GTK+ 3.16.5
==================================
* Bug fixes:
750489 gtk settings c910 warning unexpected annotation element type command
750605 icontheme: don't modify symbolic SVG dimensions when recoloring
750690 Recent Chooser Widget doesn't expand
750718 Improve documentation for deprecated properties
750870 gtk3 does apparently ignore replayed events?
750888 Fix return value error in _gtk_text_handle_set_direction
750994 X11: First mouse wheel event ignored after right click or Alt+Tab...
751018 Widget: GtkMenuButton+GtkPopover gtk_toggle_button_set_active() n...
751050 Moving the mouse while a stepper is activated causes the scrollba...
751082 GtkTreeView draw performance is bad when contents are not larger ...
751227 file picker list box height stretches to match extra widgets area...
751443 resource_path value cleared in gtk_image_set_from_resource
751739 Deadlock in X11 when setting XSetErrorHandler while another threa...
751752 Memleak when both opening shm and opening file in tmp fail
751754 GtkSwitch: calling gtk_switch_set_active in the handler for notif...
Fix ridge/groove border rendering
GtkListBoxRow: propagate in the draw vfunc
* Translation updates:
German
Overview of changes in GTK+ 3.16.4
==================================
* Bug fixes:
693738 gtk print dialog shows "Getting printer information failed" for...
719683 Escaping issue "Failed to set text from markup due to error par...
745957 GTK+/Quartz >= 3.14.8: Symbol not found: _gtk_drag_cancel (MyPa...
749451 Windows have no border
749593 Miscellaneous test fixes
749893 Crash when trying to drag a tab from a populated GtkNotebook in...
750058 bad options for the keybindings in css instructions generate a ...
750384 GtkDialog can not be moved when gtk_dialog_run from GtkListBox ...
750477 GtkFileChooserButton's label isn't xalign=0'ed
750505 Main grid overlaps GtkPopover
* Translation updates:
Czech
Occitan
Polish
Slovenian
Overview of changes in GTK+ 3.16.3
==================================
* Bug fixes:
737175 most horizontal sliders are inverted when scrolled with mouse...
746916 File chooser search does not work over remote network shares
746925 [HighContrast] Backdrop active (sensitive) GtkSwitch should l...
747634 gdk_set_program_class() breaks --class
747805 Split Headerbar unmaximize
747808 window: fix initial shadow width for maximized/fullscreen win...
748013 Adwaita: keyboard navigation outline on first/last button in ...
748014 W32: Tilting mousewheel left/right does not scroll horizontally
748061 GtkMessageDialog: Minor documentation update
748341 GdkOffscreenWindow should not segfault on gdk_window_beep()
748346 build: Avoid xgettext crash on MSYS2
748500 GtkSearchEntry docs incorrectly link to themselves
748615 GtkWindow: Get the correct shadow width even before window is...
748640 Documentation misses out example source files when not buildi...
748782 fontchooser should reload list of families/styles on theme ch...
748783 Remove PANGO_ENABLE_BACKEND from gtksettings.c
748992 GtkFontChooserWidget: Remove unused struct field
749009 notify test fails without a session bus
749012 GtkStack: Don't emit notify::visible-child during destruction
749021 GtkStackSwitcher: Don't emit notify::visible-child when setti...
* Translation updates:
Brazilian Portuguese
Czech
Danish
French
Icelandic
Occitan
Russian
Slovenian
Ukrainian
Overview of changes in GTK+ 3.16.2
==================================
* Bug fixes:
746706 Serious accessible event spewage from Gtk+ table cells
747288 [HighContrast] Insensitive backdrop ListBoxRow have an...
747471 [wayland] gdk_screen_get_monitor_geometry() returns in...
747539 popover: Remove signal handlers in dispose
747608 Scrollbar hiding / unhiding does not work with a stylus
747689 [HighContrast] Selected ListBoxRows Label is white on...
Avoid a crash in GtkApplication
Avoid a crash with GtkTreeview rubberbanding
GtkApplication: Prevent more crashes around shutdown
Prevent tab close button size changes
* Translation updates:
Icelandic
Swedish
Overview of changes in GTK+ 3.16.1
==================================
* Improve client-side decorations without a compositor
* Bug fixes:
132197 Horizontal Scrolling Using Modifier Key and Scroll Wheel
402168 Add underline-color and strikethrough-color to GtkTextTag properties
613833 Unnecessary queue_resize() for GtkImage
671362 Fixes for GtkRadioMenuItem
734741 GtkScale's fill-level starts at the very left if show-fill-level is set
737175 most horizontal sliders are inverted when scrolled with mouse wheel
746222 Improve CSD windows without a compositor
746253 has-tooltip property interferes with event-compression
746301 Opening "Sound" panel generates pixman error
746391 inspector: Make it easier to cut'n'paste advice message
746468 gtkcairoblur is slow
746586 critical warnings in a11y if focus widget is destroyed
746602 Invalid writes through dangling weak pointers in DND code cause crashes
746688 GtkProgressBar doesn't respect its style properties
746712 Range ignores the "inverted" property
746746 gtk3-demo 'OpenGL Area' crashes on systems with old OpenGL version
746784 GtkBooleanCellAccessible emits state-changed:checked signals instead...
746817 GtkRadioButton keynav uses wrong succession
746821 W32: Maximized window is obscured by the taskbar
746862 popover clears shadow of underlying widgets
746893 gtk_list_box_bind_model is not introspectable
746904 make it possible to disable libcanberra
746961 new scroll bar "hides" after click+drag+release while mouse is still...
747096 small cleanup in textbuffer clipoard handling
747133 overshoot animation is stopped on libinput-managed touchpads
747305 x11/gl: Use after free in glx_pixmap_get()
747406 Fix indicator proximity checks
747407 Make indicators pop out when needed
* GtkListBox
- There has been a minor API break on the return value of the
GtkListBoxCreateWidgetFunc callback. Previously, we would leak a
full reference returned by this callback and now we free it.
* Translation updates:
Basque
Catalan
Czech
Galician
Greek
Hebrew
Hungarian
Italian
Korean
Lithuanian
Polish
Russian
Slovak
Slovenian
Spanish
Tajik
Vietnamese
Overview of Changes in GTK+ 3.16.0
==================================
* Theming: Fixes for the HighContrast theme
* Wayland: Fix Clipboard handling
* Bug fixes:
746148 Overlay controls unusable in HighContrast
746149 “Close tab” buttons change the tab high on hover when using...
746188 insensitive ModelButtons are not drawn insensitive
746358 insensitive active backdrop GtkSwitches should probably loo...
746368 the “selected color” mark is always black, even for black
746369 “no date selection” (white on white)
746370 GtkExpander doesn't show it is expanded when using HighCont...
746386 clipboard crash when other client becomes the selection owner
* Translation updates:
Basque
Bosnian
Bulgarian
Chinese (Taiwan)
Hungarian
Indonesian
Japanese
Norwegian bokmål
Serbian
Swedish
Turkish
Overview of Changes in GTK+ 3.15.12
===================================
+3 -3
View File
@@ -76,8 +76,8 @@ Even better are git-formatted patches. (Use git format-patch)
Release notes for 3.16
======================
* GTK+ now includes an OpenGL rendering widget. To support GL on various
platforms, GTK+ uses libepoxy.
* GTK+ now includes an OpenGL rendering widget. To support GL on
various platforms, GTK+ uses libepoxy.
* GTK+ no longer uses gtk-update-icon-cache during its build. The
--enable-gtk2-dependency configure option has been removed.
@@ -99,7 +99,7 @@ Release notes for 3.16
has non-scrolling parts similar to treeview headers, there is no need
to implement this vfunc.
* The GtkSearchEntry widget has gained a number of new signal that
* The GtkSearchEntry widget has gained a number of new signals that
are emitted when certain key sequences are seen. In particular, it
now handles the Escape key and emits ::stop-search. Applications that
expect to handle Escape themselves will need to be updated.
+16 -3
View File
@@ -54,13 +54,26 @@ def gen_gtk_filelist(srcroot, subdir, dest):
'gtk_base_c_sources',
'gtk_clipboard_dnd_c_sources'])
vars_depr = read_vars_from_AM(os.path.join(srcroot, 'gtk', 'deprecated', 'Makefile.inc'),
vars = {},
conds = {},
filters = ['deprecated_h_sources',
'deprecated_c_sources'])
vars_a11y = read_vars_from_AM(os.path.join(srcroot, 'gtk', 'a11y', 'Makefile.inc'),
vars = {},
conds = {},
filters = ['a11y_h_sources',
'a11y_c_sources'])
vars['gtk_other_src'] = 'gtkprintoperation-win32.c gtktypebuiltins.h gtktypebuiltins.c'
files = vars['gtkinclude_HEADERS'].split() + \
vars['a11yinclude_HEADERS'].split() + \
vars['deprecatedinclude_HEADERS'].split() + \
vars_a11y['a11y_h_sources'].split() + \
vars_depr['deprecated_h_sources'].split() + \
vars['gtk_base_c_sources'].split() + \
vars['gtk_clipboard_dnd_c_sources'].split() + \
vars_a11y['a11y_c_sources'].split() + \
vars_depr['deprecated_c_sources'].split() + \
vars['gtk_other_src'].split()
sources = [i for i in files \
+1 -1
View File
@@ -292,7 +292,7 @@ copy ..\..\..\gtk\gtkseparatormenuitem.h $(CopyDir)\include\gtk-3.0\gtk\gtksepar
copy ..\..\..\gtk\gtkseparatortoolitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkseparatortoolitem.h
copy ..\..\..\gtk\gtksettings.h $(CopyDir)\include\gtk-3.0\gtk\gtksettings.h
copy ..\..\..\gtk\gtkshow.h $(CopyDir)\include\gtk-3.0\gtk\gtkshow.h
copy ..\..\..\gtk\gtksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtksidebar.h
copy ..\..\..\gtk\gtkstacksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtkstacksidebar.h
copy ..\..\..\gtk\gtksizegroup.h $(CopyDir)\include\gtk-3.0\gtk\gtksizegroup.h
copy ..\..\..\gtk\gtksizerequest.h $(CopyDir)\include\gtk-3.0\gtk\gtksizerequest.h
copy ..\..\..\gtk\gtksocket.h $(CopyDir)\include\gtk-3.0\gtk\gtksocket.h
+1 -1
View File
@@ -288,7 +288,7 @@ copy ..\..\..\gtk\gtkseparatormenuitem.h $(CopyDir)\include\gtk-3.0\gtk\gtksepar
copy ..\..\..\gtk\gtkseparatortoolitem.h $(CopyDir)\include\gtk-3.0\gtk\gtkseparatortoolitem.h&#x0D;&#x0A;
copy ..\..\..\gtk\gtksettings.h $(CopyDir)\include\gtk-3.0\gtk\gtksettings.h&#x0D;&#x0A;
copy ..\..\..\gtk\gtkshow.h $(CopyDir)\include\gtk-3.0\gtk\gtkshow.h&#x0D;&#x0A;
copy ..\..\..\gtk\gtksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtksidebar.h&#x0D;&#x0A;
copy ..\..\..\gtk\gtkstacksidebar.h $(CopyDir)\include\gtk-3.0\gtk\gtkstacksidebar.h&#x0D;&#x0A;
copy ..\..\..\gtk\gtksizegroup.h $(CopyDir)\include\gtk-3.0\gtk\gtksizegroup.h&#x0D;&#x0A;
copy ..\..\..\gtk\gtksizerequest.h $(CopyDir)\include\gtk-3.0\gtk\gtksizerequest.h&#x0D;&#x0A;
copy ..\..\..\gtk\gtksocket.h $(CopyDir)\include\gtk-3.0\gtk\gtksocket.h&#x0D;&#x0A;
+35 -11
View File
@@ -9,9 +9,9 @@
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [15])
m4_define([gtk_micro_version], [12])
m4_define([gtk_interface_age], [0])
m4_define([gtk_minor_version], [16])
m4_define([gtk_micro_version], [7])
m4_define([gtk_interface_age], [7])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
m4_define([gtk_version],
@@ -348,8 +348,7 @@ backend_immodules=
have_gio_unix=no
GDK_BACKENDS=
GDK_EXTRA_LIBS=
# expoxy.pc has Cflags: -I${includedir}, but pkg-config swallows that :-(
GDK_EXTRA_CFLAGS="-I${prefix}/include"
GDK_EXTRA_CFLAGS=
GDK_WINDOWING=
PANGO_PACKAGES="pango pangocairo"
@@ -474,6 +473,7 @@ if test "$enable_mir_backend" = "yes"; then
GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_MIR"
MIR_PACKAGES="$MIR_DEPENDENCIES"
have_gio_unix=yes
AM_CONDITIONAL(USE_MIR, true)
else
@@ -667,7 +667,7 @@ ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`"
AM_GLIB_GNU_GETTEXT
AC_MSG_CHECKING([whether xgettext supports ui files])
if $ac_cv_path_XGETTEXT --output=- --language=Glade $srcdir/gtk/ui/gtkfilechooserwidget.ui > /dev/null 2>&1; then
if $ac_cv_path_XGETTEXT --output=- --color=no --language=Glade $srcdir/gtk/ui/gtkfilechooserwidget.ui > /dev/null 2>&1; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
@@ -1660,12 +1660,35 @@ AM_CONDITIONAL(HAVE_COLORD, test "x$have_colord" = "xyes")
# Check for libcanberra (only used in examples)
##################################################
PKG_CHECK_MODULES(LIBCANBERRA, libcanberra-gtk3,
have_libcanberra=yes, have_libcanberra=no)
if test "$have_libcanberra" = "yes"; then
AC_DEFINE(HAVE_LIBCANBERRA, 1, [define if we have libcanberra])
AC_ARG_ENABLE(libcanberra,
[AS_HELP_STRING([--enable-libcanberra],
[enable libcanberra support in examples [default=auto]])],
[enable_libcanberra="$enableval"],
[enable_libcanberra=auto])
AC_MSG_CHECKING([whether to use libcanberra])
if test "$enable_libcanberra" != "no"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
have_libcanberra=no
if test "$enable_libcanberra" != "no"; then
PKG_CHECK_MODULES(LIBCANBERRA, libcanberra-gtk3,
have_libcanberra=yes, have_libcanberra=no)
if test "$enable_libcanberra" = "yes"; then
if test "$have_libcanberra" = "no"; then
AC_MSG_ERROR([--enable-libcanberra specified, but not available])
fi
fi
fi
if test "$have_libcanberra" = "yes"; then
AC_DEFINE(HAVE_LIBCANBERRA, 1, [define if we have libcanberra])
fi
AM_CONDITIONAL(HAVE_LIBCANBERRA, test "x$have_libcanberra" = "xyes")
##################################################
# Checks for gtk-doc and docbook-tools
##################################################
@@ -1703,7 +1726,7 @@ if test "$enable_man" != no; then
dnl check for DocBook XSL stylesheets in the local catalog
JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
[DocBook XSL Stylesheets], [have_docbook_style=yes],[have_docbook_style=no])
if test "$have_docbook_dtd" != yes; then
if test "$have_docbook_style" != yes; then
if test "$enable_man" = yes ; then
AC_MSG_ERROR([DocBook XSL Stylesheets are required for --enable-man])
fi
@@ -1938,6 +1961,7 @@ echo " Print backends: $PRINT_BACKENDS"
echo " Dynamic modules: $build_dynamic_modules"
echo " Included immodules: $included_immodules"
echo " colord support: $have_colord"
echo " libcanberra support: $have_libcanberra"
echo " Introspection: $found_introspection"
echo " Debugging: $enable_debug"
echo " Documentation: $enable_gtk_doc"
+1 -1
View File
@@ -173,7 +173,7 @@ dist_appsicon32_DATA = data/32x32/gtk3-demo.png data/32x32/gtk3-demo-symbolic.sy
dist_appsicon48_DATA = data/48x48/gtk3-demo.png data/48x48/gtk3-demo-symbolic.symbolic.png
dist_appsicon256_DATA = data/256x256/gtk3-demo.png data/256x256/gtk3-demo-symbolic.symbolic.png
update_icon_cache = gtk-update-icon-cache --ignore-theme-index --force
update_icon_cache = $(top_builddir)/gtk/gtk-update-icon-cache --ignore-theme-index --force
install-data-hook: install-update-icon-cache
uninstall-hook: uninstall-update-icon-cache
+1 -4
View File
@@ -2,7 +2,7 @@
*
* Demonstrates migrating a window between different displays.
* A display is a mouse and keyboard with some number of
* associated monitors. The neat thing about having multiple
* associated monitors. The neat thing about having multiple
* displays is that they can be on a completely separate
* computers, as long as there is a network connection to the
* computer where the application is running.
@@ -26,9 +26,6 @@
* - Using GtkDialog
*/
#include <string.h>
#undef GDK_DISABLE_DEPRECATED
#include <glib/gi18n.h>
#include <gtk/gtk.h>
+9
View File
@@ -220,6 +220,9 @@ realize (GtkWidget *widget)
{
gtk_gl_area_make_current (GTK_GL_AREA (widget));
if (gtk_gl_area_get_error (GTK_GL_AREA (widget)) != NULL)
return;
init_buffers (&position_buffer, NULL);
init_shaders (&program, &mvp_location);
}
@@ -230,6 +233,9 @@ unrealize (GtkWidget *widget)
{
gtk_gl_area_make_current (GTK_GL_AREA (widget));
if (gtk_gl_area_get_error (GTK_GL_AREA (widget)) != NULL)
return;
glDeleteBuffers (1, &position_buffer);
glDeleteProgram (program);
}
@@ -271,6 +277,9 @@ static gboolean
render (GtkGLArea *area,
GdkGLContext *context)
{
if (gtk_gl_area_get_error (area) != NULL)
return FALSE;
/* Clear the viewport */
glClearColor (0.5, 0.5, 0.5, 1.0);
glClear (GL_COLOR_BUFFER_BIT);
+23 -8
View File
@@ -128,7 +128,7 @@ key_press_event (GtkWidget *text_view,
return FALSE;
}
/* Links can also be activated by clicking.
/* Links can also be activated by clicking or tapping.
*/
static gboolean
event_after (GtkWidget *text_view,
@@ -136,15 +136,30 @@ event_after (GtkWidget *text_view,
{
GtkTextIter start, end, iter;
GtkTextBuffer *buffer;
GdkEventButton *event;
gdouble ex, ey;
gint x, y;
if (ev->type != GDK_BUTTON_RELEASE)
return FALSE;
if (ev->type == GDK_BUTTON_RELEASE)
{
GdkEventButton *event;
event = (GdkEventButton *)ev;
event = (GdkEventButton *)ev;
if (event->button != GDK_BUTTON_PRIMARY)
return FALSE;
if (event->button != GDK_BUTTON_PRIMARY)
ex = event->x;
ey = event->y;
}
else if (ev->type == GDK_TOUCH_END)
{
GdkEventTouch *event;
event = (GdkEventTouch *)ev;
ex = event->x;
ey = event->y;
}
else
return FALSE;
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
@@ -156,13 +171,13 @@ event_after (GtkWidget *text_view,
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
GTK_TEXT_WINDOW_WIDGET,
event->x, event->y, &x, &y);
ex, ey, &x, &y);
gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (text_view), &iter, x, y);
follow_if_link (text_view, &iter);
return FALSE;
return TRUE;
}
static gboolean hovering_over_link = FALSE;
+3 -1
View File
@@ -164,6 +164,7 @@ gtk_message_row_update (GtkMessageRow *row)
s = g_date_time_format (t, "%X - %e %b %Y");
gtk_label_set_text (priv->detailed_time_label, s);
g_free (s);
g_date_time_unref (t);
gtk_widget_set_visible (GTK_WIDGET(priv->n_favorites_label),
priv->message->n_favorites != 0);
@@ -295,7 +296,7 @@ gtk_message_row_new (GtkMessage *message)
static int
gtk_message_row_sort (GtkMessageRow *a, GtkMessageRow *b, gpointer data)
{
return a->priv->message->time - b->priv->message->time;
return b->priv->message->time - a->priv->message->time;
}
static void
@@ -358,6 +359,7 @@ do_listbox (GtkWidget *do_widget)
}
g_strfreev (lines);
g_bytes_unref (data);
}
if (!gtk_widget_get_visible (window))
+104 -5
View File
@@ -158,9 +158,8 @@ activate_run (GSimpleAction *action,
GtkTreeIter iter;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
gtk_tree_selection_get_selected (selection, &model, &iter);
run_example_for_row (window, model, &iter);
if (gtk_tree_selection_get_selected (selection, &model, &iter))
run_example_for_row (window, model, &iter);
}
/* Stupid syntax highlighting.
@@ -543,7 +542,7 @@ add_data_tab (const gchar *demoname)
* not an image. Let's try something else then.
*/
g_object_ref_sink (widget);
gtk_widget_destroy (widget);
g_object_unref (widget);
bytes = g_resources_lookup_data (resource_name, 0, NULL);
g_assert (bytes);
@@ -1027,6 +1026,101 @@ activate (GApplication *app)
g_object_unref (builder);
}
static gboolean
auto_quit (gpointer data)
{
g_application_quit (G_APPLICATION (data));
return G_SOURCE_REMOVE;
}
static void
list_demos (void)
{
Demo *d, *c;
d = gtk_demos;
while (d->title)
{
c = d->children;
if (d->name)
g_print ("%s\n", d->name);
d++;
while (c && c->title)
{
if (c->name)
g_print ("%s\n", c->name);
c++;
}
}
}
static void
command_line (GApplication *app,
GApplicationCommandLine *cmdline)
{
GVariantDict *options;
const gchar *name = NULL;
gboolean autoquit = FALSE;
gboolean list = FALSE;
Demo *d, *c;
GDoDemoFunc func = 0;
GtkWidget *window, *demo;
activate (app);
options = g_application_command_line_get_options_dict (cmdline);
g_variant_dict_lookup (options, "run", "&s", &name);
g_variant_dict_lookup (options, "autoquit", "b", &autoquit);
g_variant_dict_lookup (options, "list", "b", &list);
if (list)
{
list_demos ();
g_application_quit (app);
return;
}
if (name == NULL)
goto out;
window = gtk_application_get_windows (GTK_APPLICATION (app))->data;
d = gtk_demos;
while (d->title)
{
c = d->children;
if (g_strcmp0 (d->name, name) == 0)
{
func = d->func;
goto out;
}
d++;
while (c && c->title)
{
if (g_strcmp0 (c->name, name) == 0)
{
func = c->func;
goto out;
}
c++;
}
}
out:
if (func)
{
demo = (func) (window);
gtk_window_set_transient_for (GTK_WINDOW (demo), GTK_WINDOW (window));
gtk_window_set_modal (GTK_WINDOW (demo), TRUE);
}
if (autoquit)
g_timeout_add_seconds (1, auto_quit, app);
}
int
main (int argc, char **argv)
{
@@ -1046,14 +1140,19 @@ main (int argc, char **argv)
}
/* -- End of hack -- */
app = gtk_application_new ("org.gtk.Demo", G_APPLICATION_NON_UNIQUE);
app = gtk_application_new ("org.gtk.Demo", G_APPLICATION_NON_UNIQUE|G_APPLICATION_HANDLES_COMMAND_LINE);
g_action_map_add_action_entries (G_ACTION_MAP (app),
app_entries, G_N_ELEMENTS (app_entries),
app);
g_application_add_main_option (G_APPLICATION (app), "run", 0, 0, G_OPTION_ARG_STRING, "Run an example", "EXAMPLE");
g_application_add_main_option (G_APPLICATION (app), "list", 0, 0, G_OPTION_ARG_NONE, "List examples", NULL);
g_application_add_main_option (G_APPLICATION (app), "autoquit", 0, 0, G_OPTION_ARG_NONE, "Quit after a delay", NULL);
g_signal_connect (app, "startup", G_CALLBACK (startup), NULL);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
g_signal_connect (app, "command-line", G_CALLBACK (command_line), NULL);
g_application_run (G_APPLICATION (app), argc, argv);
+388 -8
View File
@@ -1,8 +1,388 @@
1|GTK+ and friends|@GTKtoolkit|GTK+ 3.8.0 (STABLE) released: wayland, Multi-application Broadway, improved CSS support and more ... http://ur1.ca/d6yms #gtk #gtk3|1364338800|0||4|2
2|Daniel Svensson|@dsvensson|Bringing an application up to the new features in GTK 3.x = tons of negative diffs, awesome work by @GTKtoolkit devs <3|1382565600|0|GTK+ and friends|0|1
3|GTK+ and friends|@GTKtoolkit|GLib status update and a warning: http://ur1.ca/awsm1 #glib|1384383600
4|GTK+ and friends|@GTKtoolkit|GProperty status: http://ur1.ca/awslh #glib|1384383300
5|GTK+ and friends|@GTKtoolkit|GTK+ 3.6.2 (STABLE) available: http://ur1.ca/awsl2 #gtk #gtk3|1384383000
6|GTK+ and friends|@GTKtoolkit|GLib 2.34.2 (STABLE) available: http://ur1.ca/awskn #glib|1384383000
7|GTK+ and friends|@GTKtoolkit|GTK+ 3.6.0 (STABLE) released: http://ur1.ca/aj4e0 #gtk #gtk3|1381528800
8|GTK+ and friends|@GTKtoolkit|GLib 2.34.0 (STABLE) released: http://ur1.ca/aj4du #glib|1381522800
1|GTK+ and friends|GTKtoolkit|@breizhodrome yeah, that's for the OpenGL support that has been added recently|1416751697|0||2|1
2|Emmanuele Bassi|ebassi|RT @ebassi: embloggeration happened: http://t.co/9ukkNuSzuc — help out supporting GL on windows and macos in GTK+ 3.16.|1416086824|0|GTKtoolkit|0|9
3|Matthew Waters|ystreet00|RT @ystreet00: .@GTKtoolkit + @gstreamer integration using the new #gtk #opengl support https://t.co/IeBpFjbjes http://t.co/WptPHCfFIb|1416086780|0|GTKtoolkit|0|13
4|Emmanuele Bassi|ebassi|RT @ebassi: embloggeration happened — OpenGL integration lands in GTK+ — http://t.co/sUGwcvZhRg|1413214719|0|GTKtoolkit|0|8
5|Allan Day|allanday|RT @allanday: New Human Interface Guidelines coming for @gnome and @GTKtoolkit . http://t.co/SMNndyo6rl|1408615736|0|GTKtoolkit|0|12
6|Christian Hergert|hergertme|RT @hergertme: being able to set opacity on an individual widget in gtk ... you've come a long way since 2.x days.|1408601183|0|GTKtoolkit|0|2
7|Richard Brown|sysrich|RT @sysrich: hmm, good thing Iike eating with chopsticks #GUADEC http://t.co/7aG9CYpdZg|1406543731|0|GTKtoolkit|0|82
8|Javier Jardón|jjardon|RT @jjardon: #GNOME 3.13.4 has just been released from Strasbourg, this year #GUADEC city. Enjoy! https://t.co/hgHDVOWvRC|1406303072|0|GTKtoolkit|0|6
9|GNOME|gnome|RT @gnome: This year's @guadec schedule has been published. Lots of great talks on there, as usual. https://t.co/rpGPxIRCuB|1405929795|0|GTKtoolkit|0|20
10|GTK+ and friends|GTKtoolkit|New features of GtkInspector : http://t.co/EOgcv1lh8D #gtk #gtk3|1402076874|0||2|3
11|The Valeyard|breizhodrome|RT @breizhodrome: @GTKtoolkit and his multipoint gesture, good thing for mobile applications :) #Gtk|1402076810|0|GTKtoolkit|0|1
12|GTK+ and friends|GTKtoolkit|@Gin_Cheng sorry about that, should be fixed now|1402076785|0||0|0
13|GTK+ and friends|GTKtoolkit|@teadriven sorry about that, should be fixed now|1402076751|0||0|0
14|Javier Jardón|jjardon|RT @jjardon: #GNOME 3.13.2 (developer version) released! Try it, brake it, file bugs! https://t.co/cyCLBCtqKo|1401318926|0|GTKtoolkit|0|2
15|GTK+ and friends|GTKtoolkit|Gtkparasite has been integrated in #GTK+: Introducing gtkinspector: http://t.co/dP3DzgPNM3 #gtk3|1400231807|0||8|11
16|GTK+ and friends|GTKtoolkit|GTK+ 3.12 released! Improvements in Wayland, Broadway, OSX ... New widgets: GtkFlowBox,GtkActionBar and GtkPopover: https://t.co/5hBIlfrxc3|1395842503|0||5|8
17|Javier Jardón|jjardon|RT @jjardon: Second beta of #GNOME 3.12 just released! https://t.co/8oTfZaatVr|1394147916|0|GTKtoolkit|0|3
18|Javier Jardón|jjardon|RT @jjardon: First beta of GNOME 3.12 (3.11.90) has just been released. Enjoy! https://t.co/d5wzYWXUnv #gnome|1393006697|0|GTKtoolkit|0|4
19|GTK+ and friends|GTKtoolkit|Some thoughts on portability by @desrt : http://t.co/zyFT6i4we3 #glib|1392903834|0||1|0
20|GTK+ and friends|GTKtoolkit|Popovers support merged in master: http://t.co/5JE0RLhEDo Thanks @garnacho for getting this done! #gtk3|1390500627|0||5|7
21|GTK+ and friends|GTKtoolkit|The continuous build environment now generates 64-bit #GTK+ Windows bundles! Read the announcement from @tarnyko : https://t.co/wXVOAzCYTt|1386169565|0||6|10
22|GTK+ and friends|GTKtoolkit|GTK+ 3 packages for Windows available! Thanks for the hard work of @tarnyko to make this possible!\nhttp://t.co/U9JgsGoBLm|1382633636|0||7|23
23|GTK+ and friends|GTKtoolkit|Status of support of high resolution displays in #GTK+ (and #GNOME ) http://t.co/SPQN2E6Qxo Thanks to Brion Vibber for the donation!|1372531560|0||2|3
24|Javier Jardón|jjardon|RT @jjardon: Firefox GTK+3 port ready for testing https://t.co/onpxJaTKO5 #gtk #gtk3|1371557291|0|GTKtoolkit|0|22
25|GTK+ and friends|GTKtoolkit|GTK+ 3.8.0 (STABLE) released: wayland, Multi-application Broadway, improved CSS support and more ... http://t.co/RlLmrNPyYs #gtk #gtk3|1364435230|0||0|5
26|Daniel Svensson|dsvensson|RT @dsvensson: Bringing an application up to the new features in GTK 3.x = tons of negative diffs, awesome work by @GTKtoolkit devs <3|1352906611|0|GTKtoolkit|0|3
27|GTK+ and friends|GTKtoolkit|GLib status update and a warning: http://t.co/quQP8dLf #glib|1352905826|0||1|1
28|GTK+ and friends|GTKtoolkit|GProperty status: http://t.co/Nk28V2Rh #glib|1352905797|0||1|1
29|GTK+ and friends|GTKtoolkit|GTK+ 3.6.2 (STABLE) available: http://t.co/ah87o7cC #gtk #gtk3|1352905768|0||1|2
30|GTK+ and friends|GTKtoolkit|GLib 2.34.2 (STABLE) available: http://t.co/yavkTJwr #glib|1352905722|0||2|1
31|GTK+ and friends|GTKtoolkit|GTK+ 3.6.0 (STABLE) released: http://t.co/3NDAT5K9 #gtk #gtk3|1350075620|0||0|4
32|GTK+ and friends|GTKtoolkit|GLib 2.34.0 (STABLE) released: http://t.co/eWRD7hNy #glib|1350075583|0||0|6
33|GTK+ and friends|GTKtoolkit|GLib 2.33.10 (UNSTABLE) released: http://t.co/3BCdOPDy #glib|1347299317|0||2|2
34|Javier Jardón|jjardon|RT @jjardon: GnomeGoals status update: https://t.co/q5j7mJ1c #gnome|1342143404|0|GTKtoolkit|0|1
35|Emmanuele Bassi|ebassi|RT @ebassi: Saturday, 28/07, 11:45 - I'll be talking about Rainbows and Unicorns @ GUADEC https://t.co/WOiF6QU6|1341984820|0|GTKtoolkit|0|2
36|Harvey|cd0|RT @cd0: According to the sourcecode zipball the browser in the samsung smart tvs (UNxxES8xxx) is webkit-gtk 20120109. Not bad. @GTKtoolkit|1341712733|0|GTKtoolkit|0|3
37|Claudio Saavedra|csaavedra|RT @csaavedra: Accelerated compositing in WebKitGTK+: http://t.co/yxl0BooF #webkit #gnome|1341712291|0|GTKtoolkit|0|2
38|GTK+ and friends|GTKtoolkit|GTK+ 3.5.6 (UNSTABLE) released, now featuring GtkSearchEntry and GtkMenuButton http://t.co/adHtm2OA #gtk #gtk3|1341689740|0||0|3
39|GTK+ and friends|GTKtoolkit|GTK+ 3.4.0 (STABLE) released: http://t.co/KPSfJQSg #gtk #gtk3|1332870781|0||0|17
40|Javier Jardón|jjardon|RT @jjardon: GTK+ 2.24.9 (STABLE) released: https://t.co/OgcL5jnR #gtk|1327437929|0|GTKtoolkit|0|2
41|GTK+ and friends|GTKtoolkit|Multitouch is near… by @garnacho http://t.co/68iK8m9S #gtk #gtk3|1327090575|0||1|7
42|GTK+ and friends|GTKtoolkit|@dylanmccall Follow this bug: https://t.co/9vCpBVSm|1326802580|0||0|0
43|GTK+ and friends|GTKtoolkit|@cd0 Nice. Please, report any issue next time ;)|1326802460|0||0|0
44|GTK+ and friends|GTKtoolkit|RFC: new features http://t.co/uiqYWx4O #gtk #gtk3|1326802266|0||1|2
45|GTK+ and friends|GTKtoolkit|@cd0 Did you file a bug?|1326776652|0||0|0
46|GTK+ and friends|GTKtoolkit|@dylanmccall You mean this? http://t.co/BXbocqE9|1326776459|0||0|0
47|GTK+ and friends|GTKtoolkit|@trufae https://t.co/xlq75hDL|1326776153|0||0|0
48|GTK+ and friends|GTKtoolkit|RFC: UI design: http://t.co/Lu8Gnnfg #gtk #gtk3|1326305191|0||2|2
49|GTK+ and friends|GTKtoolkit|#win32 users: GTK+ 2.24.8 bundles available here: http://t.co/WhuY2XoN It not needed to use 2.16 anymore #gtk|1323190462|0||1|4
50|GTK+ and friends|GTKtoolkit|RFC: Model-View-Controller http://t.co/Lmw4lW9V #gtk #gtk3|1321546108|0||1|1
51|GTK+ and friends|GTKtoolkit|RFC:boxes http://t.co/eZABFgTp #gtk #gtk3|1321546061|0||2|1
52|GTK+ and friends|GTKtoolkit|GTK+ 2.24.8 (stable) released: update of the win32 backend, it now works at least as well as the old 2.16.x http://t.co/6wrhs7hm #gtk|1321297367|0||0|2
53|GTK+ and friends|GTKtoolkit|GTK + #Clutter next step(s): http://t.co/UDIezbyW #gtk #gtk4|1318265984|0||3|4
54|GTK+ and friends|GTKtoolkit|Tutorial for #Python, #GStreamer and #GTK 3: http://t.co/hvfRx18E #gtk3|1317781925|0||5|0
55|GTK+ and friends|GTKtoolkit|@jonobacon nice, but pyGTK is deprecated, use pygobject instead|1317353873|0||1|0
56|GTK+ and friends|GTKtoolkit|GTK+ 3.2 (STABLE) released: http://t.co/EqHjTmol #gtk #gtk3|1317043650|0||0|11
57|GTK+ and friends|GTKtoolkit|New D-Bus features in GLib 2.30: http://t.co/rzHui2Q2 #gtk #glib|1316732697|0||3|4
58|Lanedo GmbH|LanedoTweets|RT @TimJanik: New #GTK+ building instructions for #Mac OS X now up in the #GNOME wiki: http://t.co/lLt2fb1B|1316646621|0|GTKtoolkit|0|3
59|GTK+ and friends|GTKtoolkit|GTK+ 3.1.90 (UNSTABLE) released: http://t.co/KRz34jp #gtk #gtk3|1315961535|0||0|3
60|Lanedo GmbH|LanedoTweets|RT @TimJanik: There's a Win32 security advisory for Gtk+, it's recommended to upgrade to latest Gtk+ (2.24.6) if you haven't yet: http:/ ...|1315914861|0|GTKtoolkit|0|5
61|GTK+ and friends|GTKtoolkit|GTK+ 4.0 and #Clutter 2.0: rainbows and unicorns: http://t.co/SKbl0vQ #gtk #gtk4|1314883483|0||2|14
62|GTK+ and friends|GTKtoolkit|Some #Glib plans for the next cycle: http://t.co/a6YybK0 #gtk|1314883427|0||0|3
63|Nat Friedman|natfriedman|RT @natfriedman: Any Gtk+ experts who want to make some consulting money fixing bugs in Gtk/Mac, email me: nat@xamarin.com.|1314355269|0|GTKtoolkit|0|28
64|Kristian Rietveld|krietvel|RT @krietvel: Blog post: 'Merged “treemodel-fix” branch into GTK+: call for testing, blog post series' http://t.co/yAUnneo #gtk|1314096198|0|GTKtoolkit|0|2
65|GTK+ and friends|GTKtoolkit|@ArcherSeven Help improving the patch here: http://t.co/r74hP79|1313493595|0||0|0
66|GTK+ and friends|GTKtoolkit|GTK+ 3.1.12 (UNSTABLE) released: http://t.co/3iPAlNq Try the new Font Dialog! #gtk #gtk3|1313493256|0||0|4
67|GTK+ and friends|GTKtoolkit|@cimi @DanielFore Patches always welcomed!|1313493010|0||0|0
68|GTK+ and friends|GTKtoolkit|a11y branch was merged into master: http://mail.gnome.org/archives/gtk-devel-list/2011-July/msg00004.html #gtk #gtk3|1309962425|0||0|2
69|GTK+ and friends|GTKtoolkit|Another update in the effort to improve #a11y in #gtk: http://mail.gnome.org/archives/gtk-devel-list/2011-June/msg00057.html #gtk3|1309606597|0||0|0
70|GTK+ and friends|GTKtoolkit|@cd0 What is wrong in that page? freetype already appears as a required dependency. Anyway patches always welcomed ;)|1307359139|0||0|0
71|GTK+ and friends|GTKtoolkit|Of course, everyone is welcomed to improve the #gtk website. git repo: http://ur1.ca/4bwbw bugzilla: http://ur1.ca/4bwc1|1307038767|0||0|1
72|GTK+ and friends|GTKtoolkit|Check out the new #gtk website!!: www.gtk.org|1307036644|0||0|4
73|GTK+ and friends|GTKtoolkit|@jikri Take a look to http://live.gnome.org/action/login/GTK+/Roadmap and http://developer.gnome.org/gtk3/stable/gtk-migrating-2-to-3.html|1306673774|0||0|0
74|GTK+ and friends|GTKtoolkit|Introducing Cossa, a GTK+ theme previewer for gedit, by @garnacho http://ur1.ca/4ate8 #gtk #gtk3|1306672611|0||1|5
75|GTK+ and friends|GTKtoolkit|#GProperty, new API for Property and Accessor declaration, by @ebassi : http://ur1.ca/47lgk #gtk #glib|1305717028|0||0|2
76|GTK+ and friends|GTKtoolkit|GLib 2.29.4 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-May/msg00012.html #gtk #glib|1304593138|0||0|2
77|GTK+ and friends|GTKtoolkit|RT @acruiz: Gtk+ FontSelection progress http://bit.ly/iikP2f #gtk #gtk3|1303089979|0||0|1
78|GTK+ and friends|GTKtoolkit|RT @krietvel: New blog post: CoreText backend now in Pango master http://bit.ly/dTE0a1 #gtk #pango #osx|1303089938|0||0|0
79|GTK+ and friends|GTKtoolkit|GTK+ 3.0.9 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00087.html #gtk #gtk3|1302883958|0||0|0
80|GTK+ and friends|GTKtoolkit|GLib 2.28.6 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00074.html #gtk #glib|1302780112|0||0|3
81|GTK+ and friends|GTKtoolkit|GTK+ 3.1.2 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00072.html #gtk #gtk3|1302737279|0||0|2
82|GTK+ and friends|GTKtoolkit|GLib 2.29.2 (UNSTABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00071.html #gtk #glib|1302702936|0||0|3
83|Kristian Høgsberg|hoegsberg|RT @hoegsberg: yay, merged the Wayland GTK+ backend to the master branch - no, it's still not compete.|1302621000|0|GTKtoolkit|0|9
84|GTK+ and friends|GTKtoolkit|Someone willing to help with the client side decorations branch? http://git.gnome.org/browse/gtk+/log/?h=client-side-decorations #gtk #gtk3|1302620918|0||1|1
85|GTK+ and friends|GTKtoolkit|#Wayland GTK+ backend merged in master: http://git.gnome.org/browse/gtk+/commit/?id=c7514e8f0d19a833257497caff413bb4dfae6eb4 #gtk #gtk3|1302620838|0||1|9
86|GTK+ and friends|GTKtoolkit|gtkmm 3.0.0 (STABLE) released: http://mail.gnome.org/archives/gtkmm-list/2011-April/msg00025.html #gtk #cpp|1302355894|0||0|3
87|GTK+ and friends|GTKtoolkit|RT @alex_igalia: WebKit2 MiniBrowser for the GTK+ port running! http://ur1.ca/3t3ov #gtk #webkit|1302261488|0||1|0
88|GTK+ and friends|GTKtoolkit|#GNOME3 is out, using all the power of #gtk3 , congrats everyone! #gtk #gnome|1302219444|0||0|2
89|GTK+ and friends|GTKtoolkit|HTML5 backend update, now with real toplevel windows!! http://blogs.gnome.org/alexl/2011/04/07/broadway-update-2/ #gtk #gtk3|1302218981|0||2|10
90|GTK+ and friends|GTKtoolkit|Glade 3.10 (STABLE) released: With support for GTK+3, pygobject and all the new stuff: http://ur1.ca/3s8wk #rad #gtk|1302032523|0||0|6
91|GTK+ and friends|GTKtoolkit|GTK+ 3.0.8 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-April/msg00009.html #gtk #gtk3|1301878240|0||0|4
92|GTK+ and friends|GTKtoolkit|GTK+ latest performance improvements (with video): http://blogs.gnome.org/otte/2011/03/30/the-book-was-better/ #gtk #gtk3|1301594293|0||1|6
93|GTK+ and friends|GTKtoolkit|Benjamin Otte is improving GTK+ performance with some impressive results, check latest commits #gtk #gtk3|1301409776|0||1|2
94|Javier Jardón|jjardon|RT @jjardon: Also nice to see that a firefox GTK+3 port was started: https://bugzilla.mozilla.org/show_bug.cgi?id=627699 #gtk #gtk3 #fi ...|1301166992|0|GTKtoolkit|0|8
95|GTK+ and friends|GTKtoolkit|RT @krietvel: Oh yea, I still have to upstream the CoreText backend I wrote for Pango. Completely forgot about that. #gtk|1301149034|0||0|0
96|GTK+ and friends|GTKtoolkit|GTK+ 3.0.5 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00099.html #gtk #gtk3|1300925808|0||0|1
97|GTK+ and friends|GTKtoolkit|Nice article of @cgwalters about analyzing memory use in #glib with #SystemTap: http://ur1.ca/3m0ak #gtk|1300672197|0||2|1
98|GTK+ and friends|GTKtoolkit|GLib 2.28.3 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00065.html #gtk #glib|1300374677|0||0|2
99|GTK+ and friends|GTKtoolkit|GTK+ HTML backend merged: http://blogs.gnome.org/alexl/2011/03/15/gtk-html-backend-update/ #gtk #gtk3|1300334447|0||3|4
100|GTK+ and friends|GTKtoolkit|GTK+ 3.0.3 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00059.html #gtk #gtk3|1300151113|0||0|5
101|GTK+ and friends|GTKtoolkit|PyGObject (new gobject introspection-based bindings) 2.28.0 (STABLE) released: http://ur1.ca/3fcsp #python #gtk|1299620983|0||0|1
102|GTK+ and friends|GTKtoolkit|GTK+ team meeting now in #gtk-devel on irc.gimp.net #gtk|1299615099|0||0|1
103|GTK+ and friends|GTKtoolkit|REMINDER: GTK+ Team IRC Meeting - 2011-03-08 at 20:00 UTC: http://ur1.ca/3ezpn Agenda: http://ur1.ca/3ezpp #gtk|1299517986|0||0|0
104|GTK+ and friends|GTKtoolkit|GTK+ 3.0.2 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-March/msg00010.html #gtk|1299517909|0||1|3
105|GTK+ and friends|GTKtoolkit|PyGObject, the new Python introspection based bindings almost ready for the 2.28 stable release: http://ur1.ca/3dfaj #python #gtk|1299081554|0||0|5
106|GTK+ and friends|GTKtoolkit|GTK+ 3.0.1 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00088.html #gtk|1298379744|0||0|4
107|GTK+ and friends|GTKtoolkit|More features/ideas for gtk+ 3.2: pictures: https://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00038.html #gtk|1297815657|0||1|2
108|GTK+ and friends|GTKtoolkit|New features/ideas for gtk+ 3.2: Translucent TextViews : http://blogs.gnome.org/tvb/2011/02/14/translucent-textviews/ #gtk|1297707521|0||1|2
109|GTK+ and friends|GTKtoolkit|Blog post of our tireless maintainer, Matthias Clasen: http://blogs.fedoraproject.org/wp/mclasen/2011/02/10/gtk-3-is-here/ #gtk #gtk3|1297378021|0||0|5
110|GTK+ and friends|GTKtoolkit|Highlights: Cairo-based, XI2, new theming API, Flexible geometry management, Multiple backend support for GDK, easy application support ...|1297373117|0||0|3
111|GTK+ and friends|GTKtoolkit|GTK+ 3.0 released!! : http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00020.html gtk!|1297372977|0||1|20
112|GTK+ and friends|GTKtoolkit|GLib 2.28.0 (stable) released: https://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00014.html #gtk #glib|1297196093|0||0|2
113|GTK+ and friends|GTKtoolkit|GTK+ 2.99.3 released: latest beta before GTK+3 http://mail.gnome.org/archives/gtk-devel-list/2011-February/msg00004.html #gtk|1296609072|0||1|1
114|GTK+ and friends|GTKtoolkit|Glade 3.9.2 released: off screen, workspace new look, GtkComboBoxText, GtkFileFilter, GtkApplication and more! http://ur1.ca/335is #gtk #rad|1296608221|0||1|0
115|GTK+ and friends|GTKtoolkit|GTK+ 2.24 ( STABLE ) released: This will be the latest 2.x release. http://ur1.ca/32cft #gtk|1296438857|0||2|0
116|GTK+ and friends|GTKtoolkit|More progress on #Glade, the GTK+ #interface #designer: http://ur1.ca/2uzpa Note that Glade 3.8 -> #gtk2 and Glade 3.10-> #gtk3 #gtk|1295186227|0||0|2
117|GTK+ and friends|GTKtoolkit|RT @prcutler RT @fcrozat: First shot at GNOME3 evaluation usb stick : http://bit.ly/i1wM8X #gnome #gnome3 #gnome-shell #opensuse #gnome|1295186033|0||1|0
118|GTK+ and friends|GTKtoolkit|If you want to try the #wayland backend, checkout this branch: http://git.gnome.org/browse/gtk+/log/?h=gdk-backend-wayland #gtk|1294739562|0||1|5
119|GTK+ and friends|GTKtoolkit|GTK+ 2.99.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00005.html #gtk|1294738413|0||0|0
120|GTK+ and friends|GTKtoolkit|GTK+ 2.99: It is now possible to include multiple GDK backends in a single library. Use --enable-{x11,win32,quartz}-backend #gtk|1294344201|0||0|0
121|GTK+ and friends|GTKtoolkit|GTK+ 2.99: The removal of GSEALEd struct members has been completed in this release #gtk|1294344070|0||0|1
122|GTK+ and friends|GTKtoolkit|GTK+ 2.99.0 (unstable) released http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00001.html #gtk|1294344044|0||0|2
123|GTK+ and friends|GTKtoolkit|GLib 2.27.90 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2011-January/msg00000.html #glib|1294343933|0||0|0
124|GTK+ and friends|GTKtoolkit|Glade 3.9.0 (unstalbe) released: snapshot leading up to Glade 3.10 that will depend on GTK+3 http://ur1.ca/2rir0 #gtk #rad|1294343894|0||0|1
125|GTK+ and friends|GTKtoolkit|Glade 3.7.3 (unstable) released: snapshot leading up to Glade 3.8 that\nwill depend on GTK+ 2.24 http://ur1.ca/2riqg #gtk|1294343835|0||0|0
126|GTK+ and friends|GTKtoolkit|RT @hoegsberg: Multi-backend support in GTK+: http://bit.ly/gDwugJ - switch between #Wayland and X11 by setting GDK_BACKEND #gtk|1294201849|0||0|0
127|GTK+ and friends|GTKtoolkit|RT @krietvel Blog post \"GDK 3.0 on Mac OS X\" http://bit.ly/ihr9kH or how GDK became awesome in GTK+ 3.0. #gtk #osx|1293728637|0||0|1
128|GTK+ and friends|GTKtoolkit|RT @krietvel Blog post \"Refactoring GtkTreeView using GtkCellArea\" http://bit.ly/g9aArE #gtk|1293728607|0||0|0
129|GTK+ and friends|GTKtoolkit|Also, the treeview-refactor branch has been merged too|1293036166|0||1|0
130|GTK+ and friends|GTKtoolkit|New in GTK+ 2.91.7: gdk-backend branch have been merged: the goal is allowing to build a single gdk library that contains multiple backends|1293036118|0||0|0
131|GTK+ and friends|GTKtoolkit|GTK+ 2.91.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00155.html #gtk|1293035980|0||1|2
132|GTK+ and friends|GTKtoolkit|GTK+ 2.23.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00156.html #gtk|1293035865|0||0|2
133|GTK+ and friends|GTKtoolkit|GLib 2.27.5 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-December/msg00152.html #gtk #glib|1293035786|0||0|0
134|GTK+ and friends|GTKtoolkit|Glade 3.7.2 (unstable) released: http://lists.ximian.com/pipermail/glade-devel/2010-December/001853.html #gtk #RAD|1292589571|0||0|0
135|Andrea Cimitan|cimi|RT @cimi: reading migration docs, later Murrine will start to be ported over GtkStyleContext (so CSS fun :))|1291813590|0|GTKtoolkit|0|1
136|GTK+ and friends|GTKtoolkit|Work to building multiple backends on the same system started: http://ur1.ca/2ieid #gtk|1291614285|0||0|2
137|GTK+ and friends|GTKtoolkit|RT @garnacho : gtk-style-context landed in GTK+ master, if gnome3 looks temporarily uglier that was me :) #gtk #gnome|1291613819|0||0|0
138|Stormy|storming|RT @storming: Anyone know of any call centers that use GNOME? Potential funding for a11y work if we do ...|1291387291|0|GTKtoolkit|0|4
139|GTK+ and friends|GTKtoolkit|Final part of the Benjamin Otte GTK3 rendering\ncleanup has landed: http://ur1.ca/2hrc9 #gtk|1291375493|0||0|0
140|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.5 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-December/msg00000.html #gtk #bindings #cplusplus|1291212942|0||0|0
141|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm 2.27.4 (unstable) released: http://ur1.ca/2h77z #glib #bindings #cplusplus|1291212883|0||0|0
142|GTK+ and friends|GTKtoolkit|GtkAppChooser landed in master: https://bugzilla.gnome.org/show_bug.cgi?id=582557#c10 #gtk|1291212784|0||0|0
143|GTK+ and friends|GTKtoolkit|larger changes in GTK+ soon: GtkStyleContext, rendering-cleanup, app-chooser branch, GtkRadioGroup branch, http://ur1.ca/2gs5u #gtk|1291211812|0||2|0
144|GTK+ and friends|GTKtoolkit|New widget: GtkSwitch http://blogs.fedoraproject.org/wp/mclasen/2010/11/29/onoff/ thanks to @ebassi and Matthias Clasen for the review #gtk|1291211711|0||2|1
145|GTK+ and friends|GTKtoolkit|GTK+ html backend (broadway branch) landed: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00103.html #gtk|1291211452|0||0|1
146|GTK+ and friends|GTKtoolkit|GTK+ 2.91.5 (unstalbe) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00109.html #gtk|1291211337|0||0|1
147|GTK+ and friends|GTKtoolkit|GLib 2.27.4 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00108.html #gtk #glib|1291211331|0||0|0
148|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.4 released: http://mail.gnome.org/archives/gtkmm-list/2010-November/msg00095.html #gtk #cplusplus #bindings|1290451737|0||0|0
149|GTK+ and friends|GTKtoolkit|Introducing GtkCellArea: height-for-width geometry management for GtkTreeViews http://ur1.ca/2e5pe #gtk|1290310899|0||1|2
150|Javier Jardón|jjardon|RT @jjardon: gtk+3 packages landed in #Debian experimental: http://packages.debian.org/experimental/libgtk3.0-0 #gtk|1290036413|0|GTKtoolkit|0|2
151|GTK+ and friends|GTKtoolkit|WIP Porting guide to migrate from GTK+2 to GTK+3: http://ur1.ca/1xbzs #gtk #xfce #lxde #gnome|1290036396|0||4|6
152|GTK+ and friends|GTKtoolkit|#GSettings is fast (really): http://blogs.gnome.org/desrt/2010/11/15/gsettings-is-fast/ #gtk #glib|1289853926|0||1|2
153|GTK+ and friends|GTKtoolkit|Help making Glade ready for GTK+ 3: http://blogs.gnome.org/johannes/2010/11/15/help-making-glade-ready-for-3-0/ #gtk|1289853600|0||1|0
154|GTK+ and friends|GTKtoolkit|Anyone up to fix it? RT @vwduder: I wish #gtk wouldn't actually show the window until all of the contents have been rendered to the drawable|1289434823|0||0|0
155|GTK+ and friends|GTKtoolkit|PyGObject 2.27.0 (unstable) released: http://mail.gnome.org/archives/python-hackers-list/2010-November/msg00013.html #python #bindings #gtk|1289431671|0||0|0
156|GTK+ and friends|GTKtoolkit|glibmm 2.27.3 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-November/msg00058.html #glib #cplusplus #bindings|1289387769|0||0|0
157|GTK+ and friends|GTKtoolkit|GLib 2.27.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00043.html #gtk #glib|1289322725|0||0|1
158|GTK+ and friends|GTKtoolkit|GTK+ 2.91.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00010.html #gtk|1288758787|0||0|1
159|GTK+ and friends|GTKtoolkit|GLib 2.27.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-November/msg00002.html #gtk #glib|1288758720|0||0|0
160|GTK+ and friends|GTKtoolkit|Gtk 3.0 motto: \"We are fixing it!\"|1288630204|0||1|4
161|GTK+ and friends|GTKtoolkit|Recent Openismus contributions to @GtkToolkit http://bit.ly/amuAdX Thank you guys!|1288343314|0||0|0
162|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.2 (unstable) released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00058.html #gtk #cplusplus|1288098381|0||0|0
163|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm (unstable) 2.27.1 released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00059.html #gtk #cplusplus|1288098335|0||0|0
164|GTK+ and friends|GTKtoolkit|GTK+ 2.91.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00230.html #gtk|1288058960|0||0|0
165|GTK+ and friends|GTKtoolkit|GLib 2.27.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00222.html #gtk #glib|1288049934|0||0|1
166|GTK+ and friends|GTKtoolkit|@garnacho shows off 3.0 CSS awesomness as a result of his work at #gtkhackfest http://bit.ly/aV99F|1288015424|0||0|0
167|GTK+ and friends|GTKtoolkit|GtkGrid landed:new container similar to GtkTable without unnecessary restrictions.It does height-for-width geometry management. #gtkhackfest|1287759681|0||0|1
168|GTK+ and friends|GTKtoolkit|RT @bertogg: The GTK+ artillery: http://flic.kr/p/8M16nu http://flic.kr/p/8M16d7 #gtkhackfest #gtk|1287744902|0||0|0
169|GTK+ and friends|GTKtoolkit|GtkScrollable interface landed in master: http://git.gnome.org/browse/gtk+/commit/?id=55196a705f00564a44647bfc97981db0a783369a #gtk|1287744793|0||0|0
170|Kristian Rietveld|krietvel|RT @krietvel: Blogged on \"Optimizing legacy code\". Or \"Color space conversion is more expensive than you might think\". http://bit.ly/duA ...|1287711819|0|GTKtoolkit|0|1
171|GTK+ and friends|GTKtoolkit|Rounded corners in GtkEntry (thanks Boram Park!) http://ur1.ca/257f0 #gtk #gtkhackfest|1287711709|0||0|6
172|Berto Garcia|bertogg|RT @bertogg: Ryan and Benjamin discussing GtkStyle at the Hercules Tower #gtkhackfest http://twitgoo.com/1pw774|1287708209|0|GTKtoolkit|0|1
173|GTK+ and friends|GTKtoolkit|RT @bertogg Working late at night #gtkhackfest http://twitgoo.com/1pvw46 #gtk|1287602614|0||0|0
174|GTK+ and friends|GTKtoolkit|WIP docs of the new theme API : http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00134.html #gtkhackfest #gtk|1287564745|0||0|0
175|GTK+ and friends|GTKtoolkit|GtkApplication landed in master: http://ur1.ca/24fhe Feedback welcome #gtk #gtkhackfest|1287564609|0||0|0
176|Emmanuele Bassi|ebassi|RT @ebassi: lots of discussions at the #gtkhackfest - it's great to see the roadmap for 4.0 take shape|1287564383|0|GTKtoolkit|0|2
177|Berto Garcia|bertogg|RT @bertogg: Update from the GTK+ Hackfest 2010: http://blogs.igalia.com/berto/2010/10/19/gtk-hackfest-2010/ #gtkhackfest|1287564380|0|GTKtoolkit|0|3
178|Berto Garcia|bertogg|RT @bertogg: Photos from the #gtkhackfest in Coruña: http://www.flickr.com/photos/tags/gtkhackfest2010/ #igalia #gnome|1287564365|0|GTKtoolkit|0|2
179|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.1 released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00033.html #gtk #cplusplus|1287478956|0||1|0
180|GTK+ and friends|GTKtoolkit|The #gtkhackfest started today. Thanks a lot to the event sponsors: #igalia, #lanedo, #codethink and the #GNOME foundation.|1287447826|0||0|2
181|GTK+ and friends|GTKtoolkit|#gtkhackfest started today at the #igalia offices in A Coruña http://live.gnome.org/Hackfests/GTK2010 #gnome #gtk|1287422775|0||0|0
182|GTK+ and friends|GTKtoolkit|libnotify, gtk API changes in 2.91.1: http://mail.gnome.org/archives/desktop-devel-list/2010-October/msg00193.html #gtk #gnome #xfce #lxde|1287324866|0||0|0
183|GTK+ and friends|GTKtoolkit|GTK+ 2.91.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00127.html #gtk|1287324761|0||0|1
184|GTK+ and friends|GTKtoolkit|GTK+ 2.23.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-October/msg00128.html #gtk|1287324697|0||0|1
185|GTK+ and friends|GTKtoolkit|RT @bratschegnome: Backported gtk window resize grips to 2.x and posted to ppa:bratsche/gtk for any #ubuntu people who want to use/test it.|1287156390|0||0|1
186|GTK+ and friends|GTKtoolkit|Resize grip in all the GtkWindows now: http://blogs.fedoraproject.org/wp/mclasen/2010/10/09/getting-a-grip/ thanks to @bratschegnome #gtk|1286600672|0||0|1
187|GTK+ and friends|GTKtoolkit|@judsontwit You have some tips for porting here: http://live.gnome.org/PyGObject/IntrospectionPorting No many changes needed #python|1286298188|0||0|0
188|GTK+ and friends|GTKtoolkit|@UstunOzgur take a look here: http://live.gnome.org/PyGTK and here: http://live.gnome.org/PyGObject|1286297979|0||0|0
189|Kristian Rietveld|krietvel|RT @krietvel: Just pushed the last patch that finishes the transition of the OS X backend to the new rendering goodness. #gtk|1286297494|0|GTKtoolkit|0|1
190|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.91.0 (#C++ bindings) released: http://mail.gnome.org/archives/gtkmm-list/2010-October/msg00000.html #gtk|1286128646|0||0|1
191|GTK+ and friends|GTKtoolkit|GTK+ 2.91.0 (unstable) released: http://ur1.ca/1xbzr The rendering cleanup work has landed. Porting guide here: http://ur1.ca/1xbzs #gtk|1286073059|0||0|0
192|GTK+ and friends|GTKtoolkit|Anyone up to the challenge of writing a WebP gdkpixbuf loader?|1285950573|0||0|3
193|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: Clutter 1.4.0 - new stable release! grab it while it's hot, on www.clutter-project.org|1285731448|0|GTKtoolkit|0|10
194|GTK+ and friends|GTKtoolkit|We strongly recommend not using PyGTK for new projects and to port existing applications from #PyGTK to #PyGObject #python #gtk|1285721997|0||5|39
195|GTK+ and friends|GTKtoolkit|ANNOUNCE: PyGObject 2.26.0 released:http://mail.gnome.org/archives/python-hackers-list/2010-September/msg00019.html #gtk #python #bindings|1285721968|0||0|0
196|GTK+ and friends|GTKtoolkit|ANNOUNCE: GLib 2.26.0 (STABLE) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00284.html #glib #gtk|1285721379|0||0|0
197|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm 2.22.0 (STABLE) released: http://mail.gnome.org/archives/gtkmm-list/2010-September/msg00095.html #gtk #c++ #bindings|1285721312|0||0|0
198|GTK+ and friends|GTKtoolkit|PyGTK 2.22.0 released: http://ur1.ca/1sc2n Note that new and existing PyGtk applications are recommended to use PyGObject|1285596826|0||0|0
199|GTK+ and friends|GTKtoolkit|GTK+ 2.22.0 ( STABLE ) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00263.html #gtk|1285286958|0||2|5
200|GTK+ and friends|GTKtoolkit|Last call for the people interested in attending the #GTK+ hackfest in A Coruña: Please sign up at latest tomorrow! http://ur1.ca/1r2gt|1285255897|0||0|2
201|GTK+ and friends|GTKtoolkit|#GLib status update: GLib 2.25.17 and 2.27.0 released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00232.html #gtk|1285245997|0||0|0
202|GTK+ and friends|GTKtoolkit|Thoughts about #GtkTreeView refactoring: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00260.html #gtk|1285245546|0||0|1
203|GTK+ and friends|GTKtoolkit|GTK+ 2.21.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00204.html #gtk|1284485086|0||0|0
204|GTK+ and friends|GTKtoolkit|New GObject API added: g_object_class_install_properties(), an efficient way to install properties: http://ur1.ca/1mh3s #gobject #glib #gtk|1284484816|0||0|0
205|GTK+ and friends|GTKtoolkit|legacy-free grid container proposed by @havocp: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00089.html #gtk|1283965732|0||0|1
206|GTK+ and friends|GTKtoolkit|Minutes of the #GTK team meeting - 2010-09-07: http://mail.gnome.org/archives/gtk-devel-list/2010-September/msg00115.html|1283965715|0||0|0
207|GTK+ and friends|GTKtoolkit|New work to get #DirectFB backend in a good state, thanks Lionel Landwerlin! #gtk http://ur1.ca/1k0hx|1283965546|0||0|0
208|GTK+ and friends|GTKtoolkit|GTK+ 2.21.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00291.html #gtk|1283198533|0||0|0
209|GTK+ and friends|GTKtoolkit|GObject Introspection status: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00254.html #gtk #glib|1282939837|0||1|2
210|GTK+ and friends|GTKtoolkit|GDateTime, the new time & date API just landed in Glib: https://bugzilla.gnome.org/show_bug.cgi?id=50076#c85 #gtk #glib|1282699797|0||0|1
211|GTK+ and friends|GTKtoolkit|CSS-like styling for #GTK+ thanks to Carlos Garnacho: http://blogs.gnome.org/carlosg/2010/08/23/css-like-styling-for-gtk/ #gtk|1282602303|0||0|3
212|GTK+ and friends|GTKtoolkit|RT @migueldeicaza: Gtk+ getting cascading stylesheets: http://blogs.gnome.org/carlosg/2010/08/23/css-like-styling-for-gtk/|1282594548|0||0|1
213|andreasn1|andreasn1|RT @andreasn1: ♺ @hbons: thanks to gtk+ maintainer mclasen we can now ditch icon-naming-utils :)|1282356193|0|GTKtoolkit|0|2
214|GTK+ and friends|GTKtoolkit|GTK+ schedule: glib 2.26 and #gtk+ 2.22 for #GNOME 2.32 (Sep'10). glib 2.28, gtk+ 2.24 and gtk+ 3.0 for Dec'10 http://ur1.ca/16o49|1282256544|0||0|0
215|GTK+ and friends|GTKtoolkit|@thomasvs I saw someone with an N900 in my lift yesterday, had the same thought|1282217985|0||0|0
216|Simón P.|spenap|RT @spenap: GObject Introspection has landed in Grilo! http://bit.ly/9f4DAa #mswl #igalia #pygobject #gobject-introspection|1282166595|0|GTKtoolkit|0|4
217|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ Team Meeting - 2010-08-17: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00155.html #gtk|1282094165|0||0|0
218|GTK+ and friends|GTKtoolkit|GTK+ 2.90.6 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00146.html #gtk|1282061092|0||0|0
219|Emmanuele Bassi|ebassi|RT @ebassi: http://bit.ly/9gabxR - @cluttertoolkit + gobject-introspection + pygobject. say goodbye to pyclutter!|1282043493|0|GTKtoolkit|0|3
220|GTK+ and friends|GTKtoolkit|GTK+ 2.21.6 (unstable) Relased: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00127.html #gtk|1282006494|0||0|0
221|Stormy|storming|RT @storming: Novell is looking for a GNOME developer to work on SUSE Linux. http://linkd.in/bEAUUj|1282001084|0|GTKtoolkit|0|19
222|Tommi Komulainen|tko|RT @tko: I want my libglib-gslist.so and libglib-glist.so .. and some popcorn. maybe just popcorn|1282000936|0|GTKtoolkit|0|1
223|GTK+ and friends|GTKtoolkit|GLib 2.25.14 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00123.html #gtk|1282000398|0||0|0
224|Emmanuele Bassi|ebassi|RT @ebassi: I'm pretty pleased with the API that landed in json-glib for 0.12|1281810990|0|GTKtoolkit|0|1
225|GTK+ and friends|GTKtoolkit|The @ebassi implementation to support common licenses in about dialog has been added to #GTK: http://ur1.ca/11u5a|1281436699|0||0|0
226|GTK+ and friends|GTKtoolkit|Web inspector support lands in #WebKitGtk+ check the screencast demo http://blog.kov.eti.br/?p=118|1281376660|0||1|0
227|GTK+ and friends|GTKtoolkit|#GTK+ #Python developers are recommended to use the\nGObject-Introspection features available in PyGObject. http://live.gnome.org/PyGObject|1281362391|0||0|0
228|GTK+ and friends|GTKtoolkit|PyGTK 2.21.0 (unstable) released: http://ur1.ca/11gse . 2.22 will be the last release in the PyGTK series.|1281362089|0||0|0
229|GTK+ and friends|GTKtoolkit|#GTK+ Hackfest, October 18-22, A Coruña, Spain. http://ur1.ca/11f6u . Add yourself if you are interested in attending http://ur1.ca/11f6v|1281350218|0||0|4
230|GTK+ and friends|GTKtoolkit|Benjamin Otte's proposal for GTK+ drawing API: gtk_widget_draw(): http://ur1.ca/11f5m #gtk|1281350013|0||2|0
231|GTK+ and friends|GTKtoolkit|Some drawing APIs have been deprecated in GTK+ 2.22. Start porting your drawing to Cairo! http://ur1.ca/11f4t|1281349855|0||0|0
232|GTK+ and friends|GTKtoolkit|GLib 2.24.2 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00057.html #gtk|1281349547|0||0|0
233|GTK+ and friends|GTKtoolkit|glib (unstable) 2.25.13 released: http://mail.gnome.org/archives/gtk-devel-list/2010-August/msg00052.html #gtk|1281201884|0||0|0
234|GTK+ and friends|GTKtoolkit|glib 2.25.12 is here! http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00052.html There have been many API changes in GDBus.|1280601329|0||0|0
235|Chema Casanova|txenoo|RT @txenoo: Dispoñible a foto de grupo de #guadeces2010 http://www.flickr.com/photos/davizin/4822344878/ gracias a David Cabrero|1280002637|0|GTKtoolkit|0|2
236|Andrea Cimitan|cimi|RT @cimi: Gtk+ 3.0 theming engines... let's start the discussion :)|1279678340|0|GTKtoolkit|0|1
237|Alberto Ruiz|acruiz|RT @acruiz: Marker support in GtkScrollbar http://bit.ly/cKUTeW|1279580539|0|GTKtoolkit|0|2
238|GTK+ and friends|GTKtoolkit|RT @ebassi: today I moved #clutter-gtk to depend on #gtk3; tomorrow w I'll fix the double-events bug; on wednesday I'll rework the API|1279561116|0||0|0
239|Sandy Armstrong|sandyarmstrong|RT @sandyarmstrong: @awafaa gconf is obsolete, fool|1279301600|0|GTKtoolkit|0|1
240|Jonh Wendell|jwendell|RT @jwendell: #vinagre ported to GtkApplication :) !gtk|1279228583|0|GTKtoolkit|0|1
241|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: #clutter 1.3.8 is the first snapshot with cally, the accessibility library for clutter apps and toolkits|1278972910|0|GTKtoolkit|0|4
242|GTK+ and friends|GTKtoolkit|GTK+ 2.90.5 released: http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00021.html #gtk|1278952963|0||0|0
243|GTK+ and friends|GTKtoolkit|Glib 2.25.11 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-July/msg00019.html #gtk|1278952925|0||0|0
244|Johan Dahlin|johandahlin|RT @johandahlin: New blog post: Using LLVM to speed up function invocation in a dynamic language binding http://bit.ly/dA6IjH|1278620689|0|GTKtoolkit|0|4
245|GTK+ and friends|GTKtoolkit|GTK+ bindings for #Falcon announced: http://mail.gnome.org/archives/gtk-list/2010-June/msg00183.html #gtk|1278000421|0||0|0
246|GTK+ and friends|GTKtoolkit|#GSettings / #dconf is ready: http://mail.gnome.org/archives/desktop-devel-list/2010-June/msg00226.html . Please port your modules! #gtk|1277909398|0||0|1
247|GTK+ and friends|GTKtoolkit|More work in height-for-width layout system for GTK+ : http://blogs.gnome.org/tvb/2010/06/30/gtk-learns-height-for-width-episode-ii/ #gtk|1277909313|0||0|0
248|GTK+ and friends|GTKtoolkit|GLib 2.25.10 (unstable) released: http://ur1.ca/0ee7o WARNING: There have been API changes in GDBus. #gtk|1277685452|0||0|1
249|GTK+ and friends|GTKtoolkit|gdk-pixbuf is now a standalone package: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00172.html #gtk|1277685365|0||0|1
250|GTK+ and friends|GTKtoolkit|GTK+ 2.90.4 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00182.html #gtk|1277685274|0||0|0
251|GTK+ and friends|GTKtoolkit|GTK+ 2.21.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00183.html #gtk|1277685237|0||0|0
252|GTK+ and friends|GTKtoolkit|We are open to fix API that make the life of #bindings harder but only by addition+rename, or addition+deprecation. File bugs, please #gtk|1277312749|0||0|0
253|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-06-22: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00155.html #gtk|1277312445|0||0|0
254|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting 2010-06-22. In #gtk-devel on irc.gnome.org at 20:00 UTC. Agenda: http://ur1.ca/q6jh #gtk|1277226823|0||0|0
255|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: the new #clutter website is now live: http://www.clutter-project.org|1276948072|0|GTKtoolkit|0|5
256|GTK+ and friends|GTKtoolkit|Proposed #GNOME goal: Port your #PyGTK to the new #PyGI bindings http://bit.ly/cvfzO8|1276941335|0||1|2
257|Christian Hergert|hergertme|RT @vwduder: im sad because @ebassi doesn't like my in/out param comments :-)|1276904611|0|GTKtoolkit|0|1
258|Guillaume Mazoyer|gmazoyer|RT @gmazoyer: ♺ @GTKtoolkit: #java bindings version 4.0.16 released: http://article.gmane.org/gmane.comp.gnome.bindings.java/1796 #gtk|1276889421|0|GTKtoolkit|0|1
259|GTK+ and friends|GTKtoolkit|#java bindings version 4.0.16 released: http://article.gmane.org/gmane.comp.gnome.bindings.java/1796 #gtk|1276885917|0||0|0
260|GTK+ and friends|GTKtoolkit|RT @cwiiis: MxIconTheme and MxIcon respect system's icon theme (and changes) now in #mx master :) Made possible by @thosw's XSettings work|1276883019|0||0|0
261|GTK+ and friends|GTKtoolkit|#javascript mailing list just created. Discuss its usage in GObject libraries: GTK+, Glib ... http://ur1.ca/08lwz by @jwendell #gtk|1276842639|0||0|0
262|GTK+ and friends|GTKtoolkit|Note fot Win32 users: XP theming is back in 2.90.3 . Please test. #gtk|1276829697|0||0|0
263|GTK+ and friends|GTKtoolkit|GTK+ 2.90.3 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00137.html #gtk|1276829633|0||0|0
264|GTK+ and friends|GTKtoolkit|GLib 2.25.9 (unstable) released: http://ur1.ca/08hrl WARNING: API changes in GDBus, GSettings and GApplication #gtk|1276829581|0||0|0
265|scaroo|scaroo|RT @scaroo: #SeedKit does RGBA window with css shadows and stuff : http://dl.dropbox.com/u/5746554/seedkit-does-rgba.png|1276734086|0|GTKtoolkit|0|1
266|scaroo|scaroo|RT @scaroo: Great #SeedKit showcase from @cldx3000 : http://bit.ly/cRDosJ :D|1276734071|0|GTKtoolkit|0|1
267|Lluis Sanchez Gual|slluis|RT @slluis: MonoDevelop 2.4 released! http://monodevelop.com/Download/MonoDevelop_2.4_Released|1276699438|0|GTKtoolkit|0|35
268|GTK+ and friends|GTKtoolkit|RT @bertogg: GNOME Developer Training at GUADEC, with Claudio Saavedra, Fernando Herrera, Dave Neary and me: http://is.gd/cPkpJ|1276687240|0||0|0
269|SparkleShare|SparkleShare|RT @sparkleshare: Let's start sparkling!|1276619215|0|GTKtoolkit|0|7
270|Haakon Sporsheim|haaspors|RT @haakonsporsheim: I built my first app for #android today using jni and #glib :P Sweet :)|1276472258|0|GTKtoolkit|0|4
271|GTK+ and friends|GTKtoolkit|Converting libraries and plugins to use GTK+3: http://mail.gnome.org/archives/desktop-devel-list/2010-June/msg00142.html #gtk|1276390360|0||1|0
272|GTK+ and friends|GTKtoolkit|Call to GNOME maintainers: #GNOME 2.31.4 to ship GTK+ 2.90: http://bit.ly/bnuk3e #gtk|1276390311|0||0|0
273|GTK+ and friends|GTKtoolkit|API changes in GLib master: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00079.html #gtk|1276390197|0||1|0
274|GTK+ and friends|GTKtoolkit|GLib 2.25.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00036.html #gtk|1276390151|0||0|0
275|Johan Dahlin|johandahlin|RT @johandahlin: is adding introspection support for GstMiniObject and other weird instantitiable GTypes. Still left: gjs/pygi support.|1276384704|0|GTKtoolkit|0|3
276|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: So, yes: we dropped the copyright waiver on Clutter and Cogl. Contributions welcome!|1276281694|0|GTKtoolkit|0|12
277|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtkmm (C++ GTK+ bindings) 2.90 (unstable) released: http://ur1.ca/06nhn #gtk|1276182909|0||0|0
278|Juanje Ojeda |juanjeojeda|RT @juanjeojeda: Progress on Gtk+ multitouch support: http://bit.ly/amIUiL #gtk #multitouch /via @garnacho|1276158728|0|GTKtoolkit|0|2
279|GTK+ and friends|GTKtoolkit|GTK+ 2.90.2 (unstable) released: http://ur1.ca/06k6o Feedback about GtkApplication apreciated #gtk|1276141907|0||0|0
280|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-06-08: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00044.html #gtk|1276040191|0||0|0
281|GTK+ and friends|GTKtoolkit|RT @bratschegnome: @federicomena http://mzl.la/9PoFhD is nice I used to have CSD whr you can drag gtk+ from anywr in a window|1276038852|0||0|0
282|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting 2010-06-08.In #gtk-devel on irc.gnome.org at 20:00 UTC.Agenda: http://ur1.ca/q6jh Everyone is invited to attend|1276010278|0||0|0
283|GTK+ and friends|GTKtoolkit|ANNOUNCE: glibmm (C++ Glib bindings) 2.25.1 (unstable) released: http://ur1.ca/067ff #gtk|1276007921|0||0|0
284|GTK+ and friends|GTKtoolkit|GLib 2.25.8 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-June/msg00036.html #gtk|1276003038|0||0|1
285|GTK+ and friends|GTKtoolkit|New version of #pygi (the new #python bindings based in #GObjectIntrospection) released: http://ur1.ca/0623c|1275945620|0||0|3
286|GTK+ and friends|GTKtoolkit|RT @ebassi: aaaand GBinding (a libexo-like binding between object properties) is mostly done: http://ur1.ca/05fz1 #gtk #glib|1275653238|0||1|0
287|GTK+ and friends|GTKtoolkit|RT @ebassi: plus, I have a GIO branch with GController and friends|1275653044|0||0|0
288|GTK+ and friends|GTKtoolkit|RT @ebassi submitted my patch for creating a GObjectController and get bulk notification #gtk|1275653008|0||0|0
289|GTK+ and friends|GTKtoolkit|GTK+ 2.21.1 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00157.html #gtk|1275271768|0||0|0
290|GTK+ and friends|GTKtoolkit|#dtrace and #systemtap support added to #Glib. Enjoy! https://bugzilla.gnome.org/show_bug.cgi?id=606044 #gtk|1275056183|0||0|2
291|GTK+ and friends|GTKtoolkit|GTK+ 2.90.1 (unstable) released: http://ur1.ca/03hbv . Multiple input device support, flippable widgets and more ...|1274845319|0||1|0
292|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-05-25: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00147.html #gtk #meeting|1274826674|0||0|0
293|GTK+ and friends|GTKtoolkit|[REMINDER] GTK+ team IRC meeting 2010-05-25 at 20:00 UTC. Join us in #gtk-devel on irc.gnome.org. Agenda: http://ur1.ca/q6jh #gtk #meeting|1274801128|0||0|1
294|GTK+ and friends|GTKtoolkit|Gtk2Hs 0.11.0 (Haskell bindings) released: http://haskell.org/gtk2hs/archives/2010/05/25/gtk2hs-0110-released/ #gtk #haskell|1274800929|0||0|0
295|GTK+ and friends|GTKtoolkit|dconf 0.3.1 released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00145.html #gtk|1274800819|0||0|0
296|GTK+ and friends|GTKtoolkit|GLib 2.25.7 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00144.html #gtk|1274800611|0||0|0
297|GTK+ and friends|GTKtoolkit|XI2 @garnacho 's branch ready for review (xi2-for-master): http://mail.gnome.org/archives/gtk-devel-list/2010-May/thread.html #gtk|1274472793|0||0|0
298|GTK+ and friends|GTKtoolkit|ANNOUNCE: gtk-doc 1.15 released: http://mail.gnome.org/archives/gtk-doc-list/2010-May/msg00000.html #gtk|1274446357|0||0|0
299|GTK+ and friends|GTKtoolkit|Ryan Lortie (@desrt) just released #dconf 0.3: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00128.html #gtk|1274311034|0||0|0
300|GTK+ and friends|GTKtoolkit|GLib 2.25.6 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00127.html #gtk|1274310863|0||0|0
301|GTK+ and friends|GTKtoolkit|GLib 2.25.6 (unstable) released:|1274310818|0||0|0
302|GTK+ and friends|GTKtoolkit|GLib 2.25.5 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00078.html #gtk|1273891783|0||0|0
303|GTK+ and friends|GTKtoolkit|Glade 3.7.1 released with lot of improvements: http://ur1.ca/011bc Thanks to #Openismus who helped sponsor this release #gtk|1273885948|0||0|0
304|GTK+ and friends|GTKtoolkit|GDBus merged in Glib master http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00066.html #gtk|1273837079|0||0|1
305|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ team IRC meeting - 2010-05-11 : http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00047.html #gtk|1273636581|0||0|0
306|GTK+ and friends|GTKtoolkit|[REMINDER] GTK+ team IRC meeting - 2010-05-11 at 20:00 UTC. Join us in #gtk-devel on irc.gnome.org. Agenda: http://ur1.ca/q6jh #gtk #meeting|1273606386|0||0|0
307|GTK+ and friends|GTKtoolkit|GTK+ 2.90.0 (unstable) released. This is the first development release leading toward 3.0. http://ur1.ca/006p2 #gtk #gtk3|1273553873|0||0|5
308|GTK+ and friends|GTKtoolkit|Changes in GTK+ master that affect third parties: http://mail.gnome.org/archives/devel-announce-list/2010-May/msg00001.html #gtk #gtk3|1273531549|0||0|0
309|GTK+ and friends|GTKtoolkit|Have dark themes is more easy now thanks to Bastian Nocera work: http://bit.ly/dBJzgn #gtk|1273531264|0||0|2
310|GTK+ and friends|GTKtoolkit|GTK+ 2.21.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00026.html #gtk|1273285878|0||0|0
311|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ IRC team meeting - 2010-05-04: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00010.html #gtk|1273024620|0||0|0
312|GTK+ and friends|GTKtoolkit|GTK+ 2.20.1 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00004.html #gtk|1272983158|0||0|0
313|GTK+ and friends|GTKtoolkit|GLib 2.24.1 (stable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-May/msg00005.html #gtk|1272983138|0||0|0
314|GTK+ and friends|GTKtoolkit|Next GTK+ team meeting: 2010-05-04 at 20:00 UTC. More info and agenda: http://ur1.ca/q6jh . As always, everyone is invited to attend. #gtk|1272848781|0||1|0
315|GTK+ and friends|GTKtoolkit|#Perl bindings: Gtk2 1.230 (unstable) available: http://mail.gnome.org/archives/gtk-perl-list/2010-April/msg00120.html #gtk|1272341271|0||0|0
316|Emmanuele Bassi|ebassi|RT @ebassi: for the first time in ages I was able to work a bit on #gtkperl and add missing 2.16 and 2.18 wrappers|1272139155|0|GTKtoolkit|0|1
317|GTK+ and friends|GTKtoolkit|GLib 2.25.3 (unstable) released with more #GSettings fixes: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00090.html #gtk|1272118354|0||0|1
318|GTK+ and friends|GTKtoolkit|GLib 2.25.2 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00079.html|1272028911|0||0|0
319|GTK+ and friends|GTKtoolkit|GTK+ Learns height-for-width geometry. Thanks Tristan Van Berkom and #Openismus for sponsoring him! http://ur1.ca/wiz3 #gtk|1271969484|0||1|2
320|GTK+ and friends|GTKtoolkit|#GSettings porting guide available: http://ur1.ca/w2xl . Feedback welcomed!: http://ur1.ca/w2xn #gtk|1271777672|0||4|4
321|GTK+ and friends|GTKtoolkit|Major change in Glib 2.25.0: #GSettings framework has been merged. This provides the API to replace #GConf.|1271715090|0||0|0
322|GTK+ and friends|GTKtoolkit|GLib 2.25.0 (unstable) released: http://mail.gnome.org/archives/gtk-devel-list/2010-April/msg00066.html #gtk|1271714608|0||0|1
323|GTK+ and friends|GTKtoolkit|GSettings status update by Matthias Clasen: http://blogs.fedoraproject.org/wp/mclasen/2010/04/17/gsettings/ #gtk #gsettingshackfest|1271519572|0||0|0
324|GTK+ and friends|GTKtoolkit|GNOME Python Hackfest: Day 1 (by John (J5) Palmieri): http://www.j5live.com/2010/04/14/gnome-python-hackfest-day-1/ #python #pythonhackfest|1271291950|0||0|1
325|GTK+ and friends|GTKtoolkit|Colin Walters: PyGTK, PyGI and PyGTK-on-PyGI #python #pythonhackfest http://ur1.ca/v5kw|1271291792|0||0|0
326|GTK+ and friends|GTKtoolkit|Python Hackfest started.Ttwo concrete goals: porting PyGObject to #Python 3.x and giving a push to PyGI. http://ur1.ca/v5jc|1271291075|0||0|0
327|GTK+ and friends|GTKtoolkit|GSettings Hackfest: Day 1 (by Vincent UNTZ) http://www.vuntz.net/journal/post/2010/04/13/GSettings-Hackfest:-Day-1 #gtk|1271290824|0||0|0
328|GTK+ and friends|GTKtoolkit|GSettings Hackfest started. Thanks to #Novell for sponsoring.Also to #RedHat, #Codethink and #Lanedo for sending people! http://ur1.ca/v5i4|1271290481|0||1|0
329|GTK+ and friends|GTKtoolkit|Xan Lopez from #Igalia attends the WebKit Contribution Meeting at the Apple HQ in Cupertino http://bit.ly/bHCqcC|1271247431|0||0|2
330|GTK+ and friends|GTKtoolkit|Kristian Rietveld advances the #GTK+ Quartz/Mac OS X backend http://bit.ly/cJzV2o|1271247006|0||2|0
331|GTK+ and friends|GTKtoolkit|#Openismus sponsors Tristan Van Berkom to complete the work on #GTK+ Natural Layout http://bit.ly/9FD3JC|1271246851|0||0|1
332|GTK+ and friends|GTKtoolkit|RT @bilboed Having trouble reading GObject or GStreamer code ? Here's a small step-by-step rundown : http://is.gd/bk7mD|1270738689|0||0|1
333|GTK+ and friends|GTKtoolkit|Colin Walters shares his thoughts about the new #GTK+ application class and its relationship with #GNOME 3 http://bit.ly/cvcHIG|1270482931|0||0|0
334|Lucas Rocha|lucasratmundo|RT @lucasratmundo: GNOME Shell has been officially proposed as a GNOME module: http://bit.ly/d1yKE2|1269993362|0|GTKtoolkit|0|3
335|Johan Dahlin|johandahlin|RT @johandahlin: New blog post http://blogs.gnome.org/johan/2010/03/30/bridging-the-development-gap-between-desktop-and-web/|1269993352|0|GTKtoolkit|0|1
336|GTK+ and friends|GTKtoolkit|New Glib STABLE release: 2.24 http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00149.html #gtk|1269892314|0||0|0
337|GTK+ and friends|GTKtoolkit|Help the GNOME Foundation to hire a sysadmin for GNOME! http://www.gnome.org/friends|1269658993|0||0|1
338|GTK+ and friends|GTKtoolkit|Our friends from #Openismus sponsor #Glade 3 improvements http://bit.ly/9GqLDl|1269656334|0||0|0
339|GTK+ and friends|GTKtoolkit|♺ @johandahlin: just commited the last remaining piece for cairo support in #gjs. World domination here we come|1269646821|0||0|0
340|FedericoMenaQuintero|federicomena|RT @federicomena: Yay, the patch for glade is done - https://bugzilla.gnome.org/show_bug.cgi?id=594231|1269616128|0|GTKtoolkit|0|1
341|Jorge Castro|castrojo|RT @castrojo: Become a Friend of GNOME: http://wp.me/poAPi-da|1269616083|0|GTKtoolkit|0|2
342|Johan Dahlin|johandahlin|RT @johandahlin: just commited the last remaining piece for cairo support in #gjs. World domination here we come|1269616001|0|GTKtoolkit|0|2
343|Jono Bacon|jonobacon|RT @jonobacon: New Acire and Python Snippets website! http://is.gd/aZGnF - still a work in progress, working on it as we speak! #pythons ...|1269615964|0|GTKtoolkit|0|5
344|GTK+ and friends|GTKtoolkit|Python Snippets: project to gather an archive of simple Python (with GTK+) examples http://ur1.ca/rru1 !gtk @jonobacon|1269555086|0||0|2
345|GTK+ and friends|GTKtoolkit|#yorbafoundation is hiring #Vala/#Gtk+ developers and summer interns in California to create multimedia apps http://yorba.org/jobs|1269479714|0||0|1
346|GTK+ and friends|GTKtoolkit|♺ @ploum: now that I have to use Qt and Qt documentation, I've only one word : #gtk rocks ! ( yeah for #gnome people)|1269441827|0||0|2
347|GTK+ and friends|GTKtoolkit|Minutes of the GTK+ Team Meeting: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00134.html #gtk|1269391167|0||0|0
348|GTK+ and friends|GTKtoolkit|New GTK+ STABLE release: 2.20 http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00132.html #gtk|1269374138|0||1|1
349|GTK+ and friends|GTKtoolkit|Reminder: GTK+ meeting today at 20:00 UTC. Where: #gtk-devel on irc.gnome.orgAgenda: http://live.gnome.org/GTK+/Meetings|1269358583|0||0|0
350|GTK+ and friends|GTKtoolkit|GLib 2.23.6 (development branch) released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00131.html #gtk|1269264623|0||0|0
351|GNOME|gnome|RT @gnome: RT @rubenv GNOME was accepted for Google Summer of Code 2010! Looking for an IT student job that earns a lot? http://bit.ly/c ...|1269106193|0|GTKtoolkit|0|5
352|FedericoMenaQuintero|federicomena|RT @federicomena: Untested code is broken code, even if it compiles. #yay #me|1269106077|0|GTKtoolkit|0|1
353|Summer of Code|gsoc|RT @gsoc: Mentor organizations for #GSoC have been announced! http://bit.ly/bVMPWe|1268956782|0|GTKtoolkit|0|31
354|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: just released clutter-gtk 0.10.4 - depending on clutter 1.2 and gtk+ 2.19|1268956726|0|GTKtoolkit|0|1
355|GTK+ and friends|GTKtoolkit|Support for Class private data will be available in Glib 2.24: https://bugzilla.gnome.org/show_bug.cgi?id=521707|1268848373|0||0|2
356|GTK+ and friends|GTKtoolkit|GTK+ team IRC meeting: March 23, at 20:00. http://ur1.ca/q6jg . Agenda: http://ur1.ca/q6jh #gtk|1268845861|0||0|1
357|GTK+ and friends|GTKtoolkit|GTK+ 2.18.9 (stable branch) released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00115.html #gtk|1268844918|0||0|0
358|GTK+ and friends|GTKtoolkit|GLib 2.22.5 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/thread.html #gtk|1268748183|0||0|0
359|GTK+ and friends|GTKtoolkit|GTK+ 2.18.8 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00078.html #gtk|1268700945|0||0|0
360|GTK+ and friends|GTKtoolkit|@chrisblizzard There's a .zip bundle indeed http://bit.ly/9ZkQCM|1268698714|0||0|0
361|Alberto Ruiz|acruiz|RT @acruiz: libmodel and GTK+ from Codethink Labs! http://aruiz.synaptia.net/siliconisland/2010/03/libmodel-and-gtk-from-codethink-labs.html|1268698629|0|GTKtoolkit|0|3
362|GTK+ and friends|GTKtoolkit|New version of the User Interface Designer #Glade released: 3.7.0 http://ur1.ca/phww #gtk|1268458482|0||0|0
363|GTK+ and friends|GTKtoolkit|GTK+ 2.19.7 released: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00044.html #gtk|1268174602|0||0|0
364|GTK+ and friends|GTKtoolkit|#GTK + future idea: automatic composite widgets using #GtkBuilder under the hood http://ur1.ca/oxly|1268157762|0||0|0
365|GTK+ and friends|GTKtoolkit|GLib 2.23.5 is released, congrats to @desrt for his first release http://bit.ly/a3th6S|1268070995|0||0|1
366|GTK+ and friends|GTKtoolkit|The first #PyGTK hackfest ever has been announced, 3.0 and Introspection are the major themes http://bit.ly/9Bd31g|1267875279|0||1|1
367|GTK+ and friends|GTKtoolkit|Kristian Rietveld gives an update of the GTK+/Quartz MacOSX native port http://bit.ly/cZ84VN|1267832356|0||2|0
368|Jono Bacon|jonobacon|RT @jonobacon: Merged in more python-snippets: desktop widget, drag and open in PyGTK, GStreamer video playback, and a bunch of fixes! h ...|1267831925|0|GTKtoolkit|0|3
369|GTK+ and friends|GTKtoolkit|#Openismus is looking for C/C++ GTK+/Qt trainees http://bit.ly/c16WEp|1267831840|0||0|0
370|Clutter Toolkit|cluttertoolkit|RT @cluttertoolkit: clutter 1.2.0 - first stable release, with lots of new API - http://bit.ly/ckdS6R|1267561885|0|GTKtoolkit|0|9
371|GTK+ and friends|GTKtoolkit|#Lanedo is hiring GTK+/GNOME hackers! http://bit.ly/d6fTWQ|1267560392|0||0|1
372|GTK+ and friends|GTKtoolkit|You can help to make a difference too, help the #GTK+ maintainers to improve the documetnation infrastructure! http://bit.ly/dmJifE|1267538283|0||0|1
373|GTK+ and friends|GTKtoolkit|Designers bring back excitement around the #GNOME project http://bit.ly/9Zcx8c|1267202696|0||0|1
374|GTK+ and friends|GTKtoolkit|#webkit #gtk gets ARGB support, allowing it to set a transparent background! http://bit.ly/cBeouj|1267146282|0||0|2
375|GTK+ and friends|GTKtoolkit|Follow GNOME TV on Vimeo http://is.gd/96PlT|1267050829|0||0|1
376|GTK+ and friends|GTKtoolkit|Extensive article on the state of #WebKitGtk http://is.gd/95En2|1267031517|0||0|0
377|GTK+ and friends|GTKtoolkit|@ploum Are you hitting !PyGTK or !GTK+ bugs? Are they already reported upstream?|1267029810|0||0|0
378|GTK+ and friends|GTKtoolkit|#GNUStep gets #GTK+ theming http://is.gd/95vHl more at http://is.gd/95wt8|1267029498|0||0|1
379|GTK+ and friends|GTKtoolkit|GTK+ 2.19.6 released: http://mail.gnome.org/archives/gtk-devel-list/2010-February/msg00050.html #gtk|1266966985|0||0|0
380|GTK+ and friends|GTKtoolkit|Did you know that #GTK+ is the official toolkit for the #LiMo software stack? http://bit.ly/cuEdHx|1266925406|0||0|0
381|GTK+ and friends|GTKtoolkit|@lmedinas publishes a #javascript #example on how to put an status icon with #Gtk+ http://bit.ly/9py1uC Thanks a lot Luis!|1266886644|0||1|1
382|GTK+ and friends|GTKtoolkit|♺ @ebassi: I should really finish up the GDom API as well|1266880653|0||0|0
383|GTK+ and friends|GTKtoolkit|♺ @ebassi: I hope to work on this for the next GIO release, and the GTK+ side for 3.0|1266880641|0||0|0
384|GTK+ and friends|GTKtoolkit|♺ @ebassi: just updated the ApplicationClass design wiki page with the stuff @Cwiiis did for Mx - http://bit.ly/cfAOJk|1266880559|0||0|0
385|GTK+ and friends|GTKtoolkit|#GTK+ Kick Start tutorial for #Vala http://www.vimeo.com/9617309 OGG: http://bit.ly/czegmp|1266874471|0||0|1
386|GTK+ and friends|GTKtoolkit|@migheldeicaza shows off #monodevelop on #macosx deploying and debugging #gtk sharp apps on a #MeeGo device http://bit.ly/9XR0Pg|1266874171|0||1|1
387|GTK+ and friends|GTKtoolkit|#GTK+ is the first toolkit to expose the #Xorg multitouch stack through #XI2 http://bit.ly/9tniKu - Nice work @garnacho!|1266863259|0||0|1
388|GTK+ and friends|GTKtoolkit|This is the official GTK+ first micropost!|1266856657|0||0|1
+1 -1
View File
@@ -47,7 +47,7 @@ dist_appsicon32_DATA = data/32x32/gtk3-widget-factory.png data/32x32/gtk3-widget
dist_appsicon48_DATA = data/48x48/gtk3-widget-factory.png data/48x48/gtk3-widget-factory-symbolic.symbolic.png
dist_appsicon256_DATA = data/256x256/gtk3-widget-factory.png data/256x256/gtk3-widget-factory-symbolic.symbolic.png
update_icon_cache = gtk-update-icon-cache --ignore-theme-index --force
update_icon_cache = $(top_builddir)/gtk/gtk-update-icon-cache --ignore-theme-index --force
install-data-hook: install-update-icon-cache
uninstall-hook: uninstall-update-icon-cache
+1
View File
@@ -3627,6 +3627,7 @@ microphone-sensitivity-medium-symbolic</property>
<object class="GtkToolbar">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="toolbar-style">icons</property>
<property name="icon-size">1</property>
<child>
<object class="GtkToolButton" id="toolbutton1">
+2
View File
@@ -261,6 +261,8 @@ GTKDOC_LIBS = \
# Extra options to supply to gtkdoc-mkdb
MKDB_OPTIONS=--output-format=xml --name-space=gtk
MKHTML_OPTIONS="--path=\"$(abs_srcdir):$(top_srcdir)/examples\""
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE)
content_files = \
version.xml \
+17
View File
@@ -31,6 +31,9 @@
<cmdsynopsis>
<command>gtk3-demo</command>
<arg choice="opt">--help</arg>
<arg choice="opt">--list</arg>
<arg choice="opt">--run <replaceable>EXAMPLE</replaceable></arg>
<arg choice="opt">--autoquit</arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -53,6 +56,20 @@ other used resources, such as ui files and icons.
<term><option>-h</option>, <option>--help</option></term>
<listitem><para>Show help options</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--list</option></term>
<listitem><para>List available examples.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>-run <replaceable>EXAMPLE</replaceable></option></term>
<listitem><para>Run the named example. Use <option>--list</option> to
see the available examples.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--autoquit</option></term>
<listitem><para>Quit after a short timeout. This is intended for use
with <option>--run</option>, e.g. when profiling.</para></listitem>
</varlistentry>
</variablelist>
</refsect1>
+20 -6
View File
@@ -825,19 +825,33 @@ map_named_shm (char *name, gsize size)
int fd;
void *ptr;
char *filename = NULL;
fd = shm_open(name, O_RDONLY, 0600);
fd = shm_open (name, O_RDONLY, 0600);
if (fd == -1)
{
perror ("Failed to shm_open");
return NULL;
filename = g_build_filename (g_get_tmp_dir (), name, NULL);
fd = open (filename, O_RDONLY);
if (fd == -1)
{
perror ("Failed to map shm");
g_free (filename);
return NULL;
}
}
ptr = mmap(0, size, PROT_READ, MAP_SHARED, fd, 0);
ptr = mmap (0, size, PROT_READ, MAP_SHARED, fd, 0);
(void) close(fd);
(void) close (fd);
shm_unlink (name);
if (filename)
{
unlink (filename);
g_free (filename);
}
else
shm_unlink (name);
return ptr;
+36 -9
View File
@@ -524,10 +524,11 @@ _gdk_broadway_server_window_set_transient_for (GdkBroadwayServer *server,
}
static void *
map_named_shm (char *name, gsize size)
map_named_shm (char *name, gsize size, gboolean *is_shm)
{
#ifdef G_OS_UNIX
char *filename = NULL;
int fd;
void *ptr;
int res;
@@ -535,10 +536,24 @@ map_named_shm (char *name, gsize size)
fd = shm_open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
if (fd == -1)
{
if (errno != EEXIST)
g_error ("Unable to allocate shared mem for window");
return NULL;
if (errno == EEXIST)
return NULL;
filename = g_build_filename (g_get_tmp_dir (), name, NULL);
fd = open (filename, O_RDWR | O_CREAT | O_EXCL, 0600);
g_free (filename);
if (fd == -1)
{
if (errno != EEXIST)
g_error ("Unable to allocate shared mem for window");
return NULL;
}
else
*is_shm = FALSE;
}
else
*is_shm = TRUE;
res = ftruncate (fd, size);
g_assert (res != -1);
@@ -547,7 +562,10 @@ map_named_shm (char *name, gsize size)
res = posix_fallocate (fd, 0, size);
if (res != 0 && errno == ENOSPC)
{
shm_unlink (name);
if (filename)
unlink (filename);
else
shm_unlink (name);
g_error ("Not enough shared memory for window surface");
}
#endif
@@ -579,6 +597,7 @@ map_named_shm (char *name, gsize size)
return NULL;
}
*is_shm = TRUE;
res = ftruncate (fd, size);
g_assert (res != -1);
@@ -614,7 +633,7 @@ make_valid_fs_char (char c)
/* name must have at least space for 34 bytes */
static gpointer
create_random_shm (char *name, gsize size)
create_random_shm (char *name, gsize size, gboolean *is_shm)
{
guint32 r;
int i, o;
@@ -638,7 +657,7 @@ create_random_shm (char *name, gsize size)
}
name[o++] = 0;
ptr = map_named_shm (name, size);
ptr = map_named_shm (name, size, is_shm);
if (ptr)
return ptr;
}
@@ -650,6 +669,7 @@ typedef struct {
char name[36];
void *data;
gsize data_size;
gboolean is_shm;
} BroadwayShmSurfaceData;
static void
@@ -660,7 +680,14 @@ shm_data_destroy (void *_data)
#ifdef G_OS_UNIX
munmap (data->data, data->data_size);
shm_unlink (data->name);
if (data->is_shm)
shm_unlink (data->name);
else
{
char *filename = g_build_filename (g_get_tmp_dir (), data->name, NULL);
unlink (filename);
g_free (filename);
}
#elif defined(G_OS_WIN32)
@@ -689,7 +716,7 @@ _gdk_broadway_server_create_surface (int width,
data = g_new (BroadwayShmSurfaceData, 1);
data->data_size = width * height * sizeof (guint32);
data->data = create_random_shm (data->name, data->data_size);
data->data = create_random_shm (data->name, data->data_size, &data->is_shm);
surface = cairo_image_surface_create_for_data ((guchar *)data->data,
CAIRO_FORMAT_ARGB32, width, height, width * sizeof (guint32));
+7 -7
View File
@@ -61,24 +61,24 @@ struct _GdkColor
#define GDK_TYPE_COLOR (gdk_color_get_type ())
GDK_DEPRECATED_IN_3_14
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_get_type)
GType gdk_color_get_type (void) G_GNUC_CONST;
GDK_DEPRECATED_IN_3_14
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_copy)
GdkColor *gdk_color_copy (const GdkColor *color);
GDK_DEPRECATED_IN_3_14
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_free)
void gdk_color_free (GdkColor *color);
GDK_DEPRECATED_IN_3_14
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_hash)
guint gdk_color_hash (const GdkColor *color);
GDK_DEPRECATED_IN_3_14
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_equal)
gboolean gdk_color_equal (const GdkColor *colora,
const GdkColor *colorb);
GDK_DEPRECATED_IN_3_14
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_parse)
gboolean gdk_color_parse (const gchar *spec,
GdkColor *color);
GDK_DEPRECATED_IN_3_14
GDK_DEPRECATED_IN_3_14_FOR(gdk_rgba_to_string)
gchar * gdk_color_to_string (const GdkColor *color);
+8
View File
@@ -130,6 +130,7 @@ static int gdk_initialized = 0; /* 1 if the library is initi
*/
static gchar *gdk_progclass = NULL;
static gboolean gdk_progclass_overridden;
static GMutex gdk_threads_mutex;
@@ -208,6 +209,7 @@ static gboolean
gdk_arg_class_cb (const char *key, const char *value, gpointer user_data, GError **error)
{
gdk_set_program_class (value);
gdk_progclass_overridden = TRUE;
return TRUE;
}
@@ -1025,10 +1027,16 @@ gdk_get_program_class (void)
* Sets the program class. The X11 backend uses the program class to set
* the class name part of the `WM_CLASS` property on
* toplevel windows; see the ICCCM.
*
* The program class can still be overridden with the --class command
* line option.
*/
void
gdk_set_program_class (const char *program_class)
{
if (gdk_progclass_overridden)
return;
g_free (gdk_progclass);
gdk_progclass = g_strdup (program_class);
+4 -3
View File
@@ -52,7 +52,8 @@ get_vertex_type_name (int type)
}
static guint
create_shader (int type, const char const *code)
create_shader (int type,
const char *code)
{
guint shader;
int status;
@@ -85,8 +86,8 @@ create_shader (int type, const char const *code)
static void
make_program (GdkGLContextProgram *program,
const char const *vertex_shader_code,
const char const *fragment_shader_code)
const char *vertex_shader_code,
const char *fragment_shader_code)
{
guint vertex_shader, fragment_shader;
int status;
+3 -3
View File
@@ -255,14 +255,14 @@ gdk_gl_context_class_init (GdkGLContextClass *klass)
/**
* GdkGLContext:display:
*
* The #GdkWindow the gl context is bound to.
* The #GdkDisplay used to create the #GdkGLContext.
*
* Since: 3.16
*/
obj_pspecs[PROP_DISPLAY] =
g_param_spec_object ("display",
P_("Display"),
P_("The GDK display the context is from"),
P_("The GDK display used to create the GL context"),
GDK_TYPE_DISPLAY,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
@@ -294,7 +294,7 @@ gdk_gl_context_class_init (GdkGLContextClass *klass)
obj_pspecs[PROP_SHARED_CONTEXT] =
g_param_spec_object ("shared-context",
P_("Shared context"),
P_("The GL context this context share data with"),
P_("The GL context this context shares data with"),
GDK_TYPE_GL_CONTEXT,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY |
+7 -1
View File
@@ -669,6 +669,12 @@ gdk_offscreen_window_set_opacity (GdkWindow *window, gdouble opacity)
{
}
static gboolean
gdk_offscreen_window_beep (GdkWindow *window)
{
return FALSE;
}
static void
gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
{
@@ -701,7 +707,7 @@ gdk_offscreen_window_class_init (GdkOffscreenWindowClass *klass)
impl_class->destroy_foreign = NULL;
impl_class->get_shape = NULL;
impl_class->get_input_shape = NULL;
impl_class->beep = NULL;
impl_class->beep = gdk_offscreen_window_beep;
impl_class->focus = NULL;
impl_class->set_type_hint = NULL;
+8 -2
View File
@@ -619,7 +619,10 @@ gdk_screen_get_height (GdkScreen *screen)
* @screen: a #GdkScreen
*
* Gets the width of @screen in millimeters.
* Note that on some X servers this value will not be correct.
*
* Note that this value is somewhat ill-defined when the screen
* has multiple monitors of different resolution. It is recommended
* to use the monitor dimensions instead.
*
* Returns: the width of @screen in millimeters.
*
@@ -638,7 +641,10 @@ gdk_screen_get_width_mm (GdkScreen *screen)
* @screen: a #GdkScreen
*
* Returns the height of @screen in millimeters.
* Note that on some X servers this value will not be correct.
*
* Note that this value is somewhat ill-defined when the screen
* has multiple monitors of different resolution. It is recommended
* to use the monitor dimensions instead.
*
* Returns: the heigth of @screen in millimeters.
*
+4
View File
@@ -207,6 +207,10 @@ typedef enum
* reserved values such as %GDK_MODIFIER_RESERVED_13_MASK. Your code
* should preserve and ignore them. You can use %GDK_MODIFIER_MASK to
* remove all reserved values.
*
* Also note that the GDK X backend interprets button press events for button
* 4-7 as scroll events, so %GDK_BUTTON4_MASK and %GDK_BUTTON5_MASK will never
* be set.
*/
typedef enum
{
+25 -5
View File
@@ -3111,7 +3111,6 @@ gdk_window_end_paint (GdkWindow *window)
{
surface = gdk_window_ref_impl_surface (window);
cr = cairo_create (surface);
cairo_surface_destroy (surface);
cairo_set_source_surface (cr, window->current_paint.surface, 0, 0);
gdk_cairo_region (cr, window->current_paint.region);
@@ -3123,6 +3122,7 @@ gdk_window_end_paint (GdkWindow *window)
cairo_destroy (cr);
cairo_surface_flush (surface);
cairo_surface_destroy (surface);
}
}
@@ -5979,10 +5979,25 @@ gdk_window_set_background_rgba (GdkWindow *window,
const GdkRGBA *rgba)
{
cairo_pattern_t *pattern;
GdkRGBA prev_rgba;
g_return_if_fail (GDK_IS_WINDOW (window));
g_return_if_fail (rgba != NULL);
/*
* If the new RGBA matches the previous pattern, ignore the change so that
* we do not invalidate the window contents.
*/
if ((window->background != NULL) &&
(cairo_pattern_get_type (window->background) == CAIRO_PATTERN_TYPE_SOLID) &&
(cairo_pattern_get_rgba (window->background,
&prev_rgba.red,
&prev_rgba.green,
&prev_rgba.blue,
&prev_rgba.alpha) == CAIRO_STATUS_SUCCESS) &&
gdk_rgba_equal (&prev_rgba, rgba))
return;
pattern = cairo_pattern_create_rgba (rgba->red, rgba->green,
rgba->blue, rgba->alpha);
@@ -9743,6 +9758,8 @@ gdk_window_set_geometry_hints (GdkWindow *window,
const GdkGeometry *geometry,
GdkWindowHints geom_mask)
{
g_return_if_fail (geometry != NULL || geom_mask == 0);
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->set_geometry_hints (window, geometry, geom_mask);
}
@@ -11084,7 +11101,10 @@ gdk_window_get_unscaled_size (GdkWindow *window,
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
if (impl_class->get_unscaled_size)
return impl_class->get_unscaled_size (window, unscaled_width, unscaled_height);
{
impl_class->get_unscaled_size (window, unscaled_width, unscaled_height);
return;
}
}
scale = gdk_window_get_scale_factor (window);
@@ -11100,9 +11120,9 @@ gdk_window_get_unscaled_size (GdkWindow *window,
/**
* gdk_window_set_opaque_region:
* @window: a top-level or non-native #GdkWindow
* @region: a region
* @region: (allow-none): a region, or %NULL
*
* For optimizization purposes, compositing window managers may
* For optimisation purposes, compositing window managers may
* like to not draw obscured regions of windows, or turn off blending
* during for these regions. With RGB windows with no transparency,
* this is just the shape of the window, but with ARGB32 windows, the
@@ -11111,7 +11131,7 @@ gdk_window_get_unscaled_size (GdkWindow *window,
*
* This function only works for toplevel windows.
*
* GTK+ will automatically update this property automatically if
* GTK+ will update this property automatically if
* the @window background is opaque, as we know where the opaque regions
* are. If your window background is not opaque, please update this
* property in your #GtkWidget::style-updated handler.
+3 -3
View File
@@ -30,13 +30,13 @@
#define GDK_TYPE_MIR_WINDOW (gdk_mir_window_get_type ())
#define GDK_IS_MIR_WINDOW(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_MIR_WINDOW))
GDK_AVAILABLE_IN_3_10
GDK_AVAILABLE_IN_3_16
GType gdk_mir_display_get_type (void);
GDK_AVAILABLE_IN_3_10
GDK_AVAILABLE_IN_3_16
MirConnection *gdk_mir_display_get_mir_connection (GdkDisplay *display);
GDK_AVAILABLE_IN_3_10
GDK_AVAILABLE_IN_3_16
GType gdk_mir_window_get_type (void);
GDK_AVAILABLE_IN_3_16
+2
View File
@@ -33,6 +33,8 @@ libgdk_quartz_la_SOURCES = \
gdkdnd-quartz.h \
gdkevents-quartz.c \
gdkeventloop-quartz.c \
gdkglcontext-quartz.c \
gdkglcontext-quartz.h \
gdkglobals-quartz.c \
gdkkeys-quartz.c \
gdkprivate-quartz.h \
+39
View File
@@ -0,0 +1,39 @@
/* GDK - The GIMP Drawing Kit
*
* gdkglcontext-quartz.c: Quartz specific OpenGL wrappers
*
* Copyright © 2014 Emmanuele Bassi
* Copyright © 2014 Alexander Larsson
* Copyright © 2014 Brion Vibber
*
* 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, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
#include "gdkglcontext-quartz.h"
#include "gdkintl.h"
GdkGLContext *
gdk_quartz_window_create_gl_context (GdkWindow *window,
gboolean attached,
GdkGLContext *share,
GError **error)
{
/* FIXME: implement */
g_set_error_literal (error, GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
"Not implemented on OS X");
return NULL;
}
+41
View File
@@ -0,0 +1,41 @@
/* GDK - The GIMP Drawing Kit
*
* gdkglcontext-quartz.h: Private Quartz specific OpenGL wrappers
*
* Copyright © 2014 Emmanuele Bassi
* Copyright © 2014 Red Hat, Int
* Copyright © 2014 Brion Vibber
*
* 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, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_GL_CONTEXT__
#define __GDK_QUARTZ_GL_CONTEXT__
#include "gdkglcontextprivate.h"
#include "gdkvisual.h"
#include "gdkwindow.h"
#include "gdkinternals.h"
#include "gdkmain.h"
G_BEGIN_DECLS
GdkGLContext * gdk_quartz_window_create_gl_context (GdkWindow *window,
gboolean attach,
GdkGLContext *share,
GError **error);
G_END_DECLS
#endif /* __GDK_QUARTZ_GL_CONTEXT__ */
+13 -1
View File
@@ -25,6 +25,7 @@
#include "gdkwindowimpl.h"
#include "gdkprivate-quartz.h"
#include "gdkglcontext-quartz.h"
#include "gdkquartzscreen.h"
#include "gdkquartzcursor.h"
@@ -1862,7 +1863,17 @@ gdk_quartz_window_set_geometry_hints (GdkWindow *window,
if (geom_mask & GDK_HINT_ASPECT)
{
/* FIXME: Implement */
NSSize size;
if (geometry->min_aspect != geometry->max_aspect)
{
g_warning ("Only equal minimum and maximum aspect ratios are supported on Mac OS. Using minimum aspect ratio...");
}
size.width = geometry->min_aspect;
size.height = 1.0;
[impl->toplevel setContentAspectRatio:size];
}
if (geom_mask & GDK_HINT_WIN_GRAVITY)
@@ -2944,6 +2955,7 @@ gdk_window_impl_quartz_class_init (GdkWindowImplQuartzClass *klass)
impl_class->change_property = _gdk_quartz_window_change_property;
impl_class->delete_property = _gdk_quartz_window_delete_property;
impl_class->create_gl_context = gdk_quartz_window_create_gl_context;
impl_quartz_class->get_context = gdk_window_impl_quartz_get_context;
impl_quartz_class->release_context = gdk_window_impl_quartz_release_context;
+36 -6
View File
@@ -95,6 +95,9 @@ struct _GdkWaylandDeviceData
struct wl_surface *pointer_surface;
guint current_output_scale;
GSList *pointer_surface_outputs;
/* Source/dest for non-local dnd */
GdkWindow *foreign_dnd_window;
};
struct _GdkWaylandDevice
@@ -208,10 +211,13 @@ gdk_wayland_device_update_window_cursor (GdkWaylandDeviceData *wd)
wd->enter_serial,
wd->pointer_surface,
x, y);
wl_surface_attach (wd->pointer_surface, buffer, 0, 0);
wl_surface_set_buffer_scale (wd->pointer_surface, scale);
wl_surface_damage (wd->pointer_surface, 0, 0, w, h);
wl_surface_commit (wd->pointer_surface);
if (buffer)
{
wl_surface_attach (wd->pointer_surface, buffer, 0, 0);
wl_surface_set_buffer_scale (wd->pointer_surface, scale);
wl_surface_damage (wd->pointer_surface, 0, 0, w, h);
wl_surface_commit (wd->pointer_surface);
}
if (wd->grab_cursor)
{
@@ -623,8 +629,10 @@ data_device_enter (void *data,
dnd_owner = gdk_selection_owner_get_for_display (device->display, gdk_drag_get_selection (device->drop_context));
if (dnd_owner)
_gdk_wayland_drag_context_set_source_window (device->drop_context, dnd_owner);
if (!dnd_owner)
dnd_owner = device->foreign_dnd_window;
_gdk_wayland_drag_context_set_source_window (device->drop_context, dnd_owner);
_gdk_wayland_drag_context_set_dest_window (device->drop_context,
dest_window, serial);
@@ -1838,6 +1846,26 @@ static const struct wl_surface_listener pointer_surface_listener = {
pointer_surface_leave
};
static GdkWindow *
create_foreign_dnd_window (GdkDisplay *display)
{
GdkWindowAttr attrs;
GdkScreen *screen;
guint mask;
screen = gdk_display_get_default_screen (display);
attrs.x = attrs.y = 0;
attrs.width = attrs.height = 1;
attrs.wclass = GDK_INPUT_OUTPUT;
attrs.window_type = GDK_WINDOW_TEMP;
attrs.visual = gdk_screen_get_system_visual (screen);
mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
return gdk_window_new (gdk_screen_get_root_window (screen), &attrs, mask);
}
void
_gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager,
guint32 id,
@@ -1857,6 +1885,7 @@ _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager,
device->device_manager = device_manager;
device->touches = g_hash_table_new_full (NULL, NULL, NULL,
(GDestroyNotify) g_free);
device->foreign_dnd_window = create_foreign_dnd_window (display);
device->wl_seat = wl_seat;
wl_seat_add_listener (device->wl_seat, &seat_listener, device);
@@ -1898,6 +1927,7 @@ _gdk_wayland_device_manager_remove_seat (GdkDeviceManager *manager,
/* FIXME: destroy data_device */
g_clear_object (&device->keyboard_settings);
g_hash_table_destroy (device->touches);
gdk_window_destroy (device->foreign_dnd_window);
g_free (device);
break;
+2
View File
@@ -193,11 +193,13 @@ gdk_registry_handle_global (void *data,
output =
wl_registry_bind (display_wayland->wl_registry, id, &wl_output_interface, MIN (version, 2));
_gdk_wayland_screen_add_output (display_wayland->screen, id, output, MIN (version, 2));
wl_display_roundtrip (display_wayland->wl_display);
}
else if (strcmp (interface, "wl_seat") == 0)
{
seat = wl_registry_bind (display_wayland->wl_registry, id, &wl_seat_interface, MIN (version, 4));
_gdk_wayland_device_manager_add_seat (gdk_display->device_manager, id, seat);
wl_display_roundtrip (display_wayland->wl_display);
}
else if (strcmp (interface, "wl_data_device_manager") == 0)
{
+5 -1
View File
@@ -236,7 +236,8 @@ gdk_wayland_drag_context_drop_reply (GdkDragContext *context,
gboolean accepted,
guint32 time_)
{
gdk_wayland_drop_context_set_status (context, accepted);
if (!accepted)
gdk_wayland_drop_context_set_status (context, accepted);
}
static void
@@ -418,6 +419,9 @@ _gdk_wayland_drag_context_set_dest_window (GdkDragContext *context,
GdkWindow *dest_window,
uint32_t serial)
{
if (context->dest_window)
g_object_unref (context->dest_window);
context->dest_window = dest_window ? g_object_ref (dest_window) : NULL;
GDK_WAYLAND_DRAG_CONTEXT (context)->serial = serial;
gdk_wayland_drop_context_update_targets (context);
+28 -1
View File
@@ -1001,25 +1001,52 @@ _gdk_wayland_screen_init (GdkWaylandScreen *screen_wayland)
static void
update_screen_size (GdkWaylandScreen *screen_wayland)
{
gboolean emit_changed = FALSE;
gint width, height;
gint width_mm, height_mm;
gint i;
width = height = 0;
width_mm = height_mm = 0;
for (i = 0; i < screen_wayland->monitors->len; i++)
{
GdkWaylandMonitor *monitor = screen_wayland->monitors->pdata[i];
/* XXX: Largely assuming here that monitor areas
* are contiguous and never overlap.
*/
if (monitor->geometry.x > 0)
width_mm += monitor->width_mm;
else
width_mm = MAX (width_mm, monitor->width_mm);
if (monitor->geometry.y > 0)
height_mm += monitor->height_mm;
else
height_mm = MAX (height_mm, monitor->height_mm);
width = MAX (width, monitor->geometry.x + monitor->geometry.width);
height = MAX (height, monitor->geometry.y + monitor->geometry.height);
}
if (screen_wayland->width_mm != width_mm ||
screen_wayland->height_mm != height_mm)
{
emit_changed = TRUE;
screen_wayland->width_mm = width_mm;
screen_wayland->height_mm = height_mm;
}
if (screen_wayland->width != width ||
screen_wayland->height != height)
{
emit_changed = TRUE;
screen_wayland->width = width;
screen_wayland->height = height;
g_signal_emit_by_name (screen_wayland, "size-changed");
}
if (emit_changed)
g_signal_emit_by_name (screen_wayland, "size-changed");
}
static void
+21 -15
View File
@@ -416,9 +416,11 @@ async_write_data_cb (GObject *object,
res, &error);
if (error)
{
g_warning ("Error writing selection data: %s", error->message);
g_error_free (error);
if (error->domain != G_IO_ERROR ||
error->code != G_IO_ERROR_CANCELLED)
g_warning ("Error writing selection data: %s", error->message);
g_error_free (error);
async_write_data_free (write_data);
return;
}
@@ -558,12 +560,12 @@ gdk_wayland_selection_request_target (GdkWaylandSelection *wayland_selection,
else
return FALSE;
if (fd >= 0)
wayland_selection->stored_selection.fd = fd;
if (wayland_selection->source_requested_target == target)
if (wayland_selection->stored_selection.fd == fd &&
wayland_selection->source_requested_target == target)
return FALSE;
wayland_selection->stored_selection.fd = fd;
wayland_selection->source_requested_target = target;
if (window && target != GDK_NONE)
@@ -668,16 +670,19 @@ data_source_cancelled (void *data,
g_debug (G_STRLOC ": %s source = %p",
G_STRFUNC, source);
context = gdk_wayland_drag_context_lookup_by_data_source (source);
display = gdk_window_get_display (context->source_window);
display = gdk_display_get_default ();
if (source == wayland_selection->dnd_source)
gdk_wayland_selection_unset_data_source (display, atoms[ATOM_DND]);
{
gdk_wayland_selection_unset_data_source (display, atoms[ATOM_DND]);
context = gdk_wayland_drag_context_lookup_by_data_source (source);
if (context)
gdk_wayland_drag_context_undo_grab (context);
}
else if (source == wayland_selection->clipboard_source)
gdk_wayland_selection_unset_data_source (display, atoms[ATOM_CLIPBOARD]);
if (context)
gdk_wayland_drag_context_undo_grab (context);
}
static const struct wl_data_source_listener data_source_listener = {
@@ -893,9 +898,10 @@ _gdk_wayland_display_convert_selection (GdkDisplay *display,
return;
}
wl_data_offer_accept (wayland_selection->offer,
_gdk_wayland_display_get_serial (GDK_WAYLAND_DISPLAY (display)),
gdk_atom_name (target));
if (target != gdk_atom_intern_static_string ("TARGETS"))
wl_data_offer_accept (wayland_selection->offer,
_gdk_wayland_display_get_serial (GDK_WAYLAND_DISPLAY (display)),
gdk_atom_name (target));
buffer_data = g_hash_table_lookup (wayland_selection->selection_buffers,
target);
+1
View File
@@ -216,6 +216,7 @@ static struct {
#endif
{ "help", IDC_HELP },
{ "ibeam", IDC_IBEAM },
{ "left_ptr_watch", IDC_APPSTARTING },
{ "sizeall", IDC_SIZEALL },
{ "sizenesw", IDC_SIZENESW },
{ "sizens", IDC_SIZENS },
+51 -3
View File
@@ -135,6 +135,8 @@ static UINT sync_timer = 0;
static int debug_indent = 0;
static int both_shift_pressed[2]; /* to store keycodes for shift keys */
static void
assign_object (gpointer lhsp,
gpointer rhs)
@@ -1837,6 +1839,7 @@ gdk_event_translate (MSG *msg,
RECT rect, *drag, orig_drag;
POINT point;
MINMAXINFO *mmi;
LONG style;
HWND hwnd;
HCURSOR hcursor;
BYTE key_state[256];
@@ -2108,6 +2111,38 @@ gdk_event_translate (MSG *msg,
fill_key_event_string (event);
/* Only one release key event is fired when both shift keys are pressed together
and then released. In order to send the missing event, press events for shift
keys are recorded and sent together when the release event occurs.
Other modifiers (e.g. ctrl, alt) don't have this problem. */
if (msg->message == WM_KEYDOWN && msg->wParam == VK_SHIFT)
{
int pressed_shift = msg->lParam & 0xffffff; /* mask shift modifier */
if (both_shift_pressed[0] == 0)
both_shift_pressed[0] = pressed_shift;
else if (both_shift_pressed[0] != pressed_shift)
both_shift_pressed[1] = pressed_shift;
}
if (msg->message == WM_KEYUP && msg->wParam == VK_SHIFT)
{
if (both_shift_pressed[0] != 0 && both_shift_pressed[1] != 0)
{
gint tmp_retval;
MSG fake_release = *msg;
int pressed_shift = msg->lParam & 0xffffff;
if (both_shift_pressed[0] == pressed_shift)
fake_release.lParam = both_shift_pressed[1];
else
fake_release.lParam = both_shift_pressed[0];
both_shift_pressed[0] = both_shift_pressed[1] = 0;
gdk_event_translate (&fake_release, &tmp_retval);
}
both_shift_pressed[0] = both_shift_pressed[1] = 0;
}
/* Reset MOD1_MASK if it is the Alt key itself */
if (msg->wParam == VK_MENU)
event->key.state &= ~GDK_MOD1_MASK;
@@ -2449,6 +2484,7 @@ gdk_event_translate (MSG *msg,
break;
case WM_MOUSEWHEEL:
case WM_MOUSEHWHEEL:
GDK_NOTE (EVENTS, g_print (" %d", (short) HIWORD (msg->wParam)));
/* WM_MOUSEWHEEL is delivered to the focus window. Work around
@@ -2499,8 +2535,13 @@ gdk_event_translate (MSG *msg,
event = gdk_event_new (GDK_SCROLL);
event->scroll.window = window;
event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
GDK_SCROLL_UP : GDK_SCROLL_DOWN;
if (msg->message == WM_MOUSEWHEEL)
event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
GDK_SCROLL_UP : GDK_SCROLL_DOWN;
else if (msg->message == WM_MOUSEHWHEEL)
event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
GDK_SCROLL_RIGHT : GDK_SCROLL_LEFT;
event->scroll.time = _gdk_win32_get_next_tick (msg->time);
event->scroll.x = (gint16) point.x;
event->scroll.y = (gint16) point.y;
@@ -3044,6 +3085,8 @@ gdk_event_translate (MSG *msg,
mmi->ptMaxPosition.x, mmi->ptMaxPosition.y,
mmi->ptMaxSize.x, mmi->ptMaxSize.y));
style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE);
if (impl->hint_flags & GDK_HINT_MIN_SIZE)
{
rect.left = rect.top = 0;
@@ -3072,7 +3115,10 @@ gdk_event_translate (MSG *msg,
mmi->ptMaxTrackSize.x = maxw > 0 && maxw < G_MAXSHORT ? maxw : G_MAXSHORT;
mmi->ptMaxTrackSize.y = maxh > 0 && maxh < G_MAXSHORT ? maxh : G_MAXSHORT;
}
else
/* Assume that these styles are incompatible with CSD,
* so there's no reason for us to override the defaults.
*/
else if ((style & (WS_BORDER | WS_THICKFRAME)) == 0)
{
HMONITOR winmon;
MONITORINFO moninfo;
@@ -3085,6 +3131,8 @@ gdk_event_translate (MSG *msg,
{
mmi->ptMaxTrackSize.x = moninfo.rcWork.right - moninfo.rcWork.left;
mmi->ptMaxTrackSize.y = moninfo.rcWork.bottom - moninfo.rcWork.top;
mmi->ptMaxPosition.x = moninfo.rcWork.left;
mmi->ptMaxPosition.y = moninfo.rcWork.top;
}
else
{
+2
View File
@@ -164,6 +164,8 @@ handle_special (guint vk,
*ksymp = GDK_KEY_Meta_R; break;
case VK_APPS:
*ksymp = GDK_KEY_Menu; break;
case VK_DECIMAL:
*ksymp = GDK_KEY_KP_Decimal; break;
case VK_MULTIPLY:
*ksymp = GDK_KEY_KP_Multiply; break;
case VK_ADD:
+1
View File
@@ -758,6 +758,7 @@ _gdk_win32_message_to_string (UINT msg)
CASE (WM_MBUTTONUP);
CASE (WM_MBUTTONDBLCLK);
CASE (WM_MOUSEWHEEL);
CASE (WM_MOUSEHWHEEL);
CASE (WM_XBUTTONDOWN);
CASE (WM_XBUTTONUP);
CASE (WM_XBUTTONDBLCLK);
+3
View File
@@ -90,6 +90,9 @@
#ifndef WM_APPCOMMAND
#define WM_APPCOMMAND 0x319
#endif
#ifndef WM_MOUSEHWHEEL
#define WM_MOUSEHWHEEL 0x20E
#endif
#ifndef CF_DIBV5
#define CF_DIBV5 17
+46 -39
View File
@@ -499,10 +499,13 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
XIButtonState button_state = { 0 };
XIModifierState mod_state;
XIGroupState group_state;
Bool retval;
display = gdk_device_get_display (device);
screen = gdk_display_get_default_screen (display);
gdk_x11_display_error_trap_push (display);
/* This function really only works if the mouse pointer is held still
* during its operation. If it moves from one leaf window to another
* than we'll end up with inaccurate values for win_x, win_y
@@ -549,18 +552,18 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
/* Free previous button mask, if any */
g_free (button_state.mask);
gdk_x11_display_error_trap_push (display);
XIQueryPointer (xdisplay,
device_xi2->device_id,
xwindow,
&root, &child,
&xroot_x, &xroot_y,
&xwin_x, &xwin_y,
&button_state,
&mod_state,
&group_state);
if (gdk_x11_display_error_trap_pop (display))
retval = XIQueryPointer (xdisplay,
device_xi2->device_id,
xwindow,
&root, &child,
&xroot_x, &xroot_y,
&xwin_x, &xwin_y,
&button_state,
&mod_state,
&group_state);
if (!retval)
continue;
if (child != None)
{
pointer_window = child;
@@ -609,17 +612,16 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
last = xwindow;
free (button_state.mask);
gdk_x11_display_error_trap_push (display);
XIQueryPointer (xdisplay,
device_xi2->device_id,
xwindow,
&root, &xwindow,
&xroot_x, &xroot_y,
&xwin_x, &xwin_y,
&button_state,
&mod_state,
&group_state);
if (gdk_x11_display_error_trap_pop (display))
retval = XIQueryPointer (xdisplay,
device_xi2->device_id,
xwindow,
&root, &xwindow,
&xroot_x, &xroot_y,
&xwin_x, &xwin_y,
&button_state,
&mod_state,
&group_state);
if (!retval)
break;
if (get_toplevel && last != root &&
@@ -633,10 +635,25 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
gdk_x11_display_ungrab (display);
window = gdk_x11_window_lookup_for_display (display, last);
impl = NULL;
if (window)
impl = GDK_WINDOW_IMPL_X11 (window->impl);
if (gdk_x11_display_error_trap_pop (display) == 0)
{
window = gdk_x11_window_lookup_for_display (display, last);
impl = NULL;
if (window)
impl = GDK_WINDOW_IMPL_X11 (window->impl);
if (mask)
*mask = _gdk_x11_device_xi2_translate_state (&mod_state, &button_state, &group_state);
free (button_state.mask);
}
else
{
window = NULL;
if (mask)
*mask = 0;
}
if (win_x)
*win_x = (window) ? (xwin_x / impl->window_scale) : -1;
@@ -644,10 +661,6 @@ gdk_x11_device_xi2_window_at_position (GdkDevice *device,
if (win_y)
*win_y = (window) ? (xwin_y / impl->window_scale) : -1;
if (mask)
*mask = _gdk_x11_device_xi2_translate_state (&mod_state, &button_state, &group_state);
free (button_state.mask);
return window;
}
@@ -762,10 +775,10 @@ _gdk_x11_device_xi2_translate_state (XIModifierState *mods_state,
{
gint len, i;
/* We're only interested in the first 5 buttons */
len = MIN (5, buttons_state->mask_len * 8);
/* We're only interested in the first 3 buttons */
len = MIN (3, buttons_state->mask_len * 8);
for (i = 0; i < len; i++)
for (i = 1; i <= len; i++)
{
if (!XIMaskIsSet (buttons_state->mask, i))
continue;
@@ -781,12 +794,6 @@ _gdk_x11_device_xi2_translate_state (XIModifierState *mods_state,
case 3:
state |= GDK_BUTTON3_MASK;
break;
case 4:
state |= GDK_BUTTON4_MASK;
break;
case 5:
state |= GDK_BUTTON5_MASK;
break;
default:
break;
}
+43 -2
View File
@@ -1108,6 +1108,47 @@ find_frame_timings (GdkFrameClock *clock,
return NULL;
}
/* _NET_WM_FRAME_DRAWN and _NET_WM_FRAME_TIMINGS messages represent time
* as a "high resolution server time" - this is the server time interpolated
* to microsecond resolution. The advantage of this time representation
* is that if X server is running on the same computer as a client, and
* the Xserver uses 'clock_gettime(CLOCK_MONOTONIC, ...)' for the server
* time, the client can detect this, and all such clients will share a
* a time representation with high accuracy. If there is not a common
* time source, then the time synchronization will be less accurate.
*/
gint64
server_time_to_monotonic_time (GdkX11Display *display_x11,
gint64 server_time)
{
if (display_x11->server_time_query_time == 0 ||
(!display_x11->server_time_is_monotonic_time &&
server_time > display_x11->server_time_query_time + 10*1000*1000)) /* 10 seconds */
{
gint64 current_server_time = gdk_x11_get_server_time (display_x11->leader_gdk_window);
gint64 current_server_time_usec = (gint64)current_server_time * 1000;
gint64 current_monotonic_time = g_get_monotonic_time ();
display_x11->server_time_query_time = current_monotonic_time;
/* If the server time is within a second of the monotonic time,
* we assume that they are identical. This seems like a big margin,
* but we want to be as robust as possible even if the system
* is under load and our processing of the server response is
* delayed.
*/
if (current_server_time_usec > current_monotonic_time - 1000*1000 &&
current_server_time_usec < current_monotonic_time + 1000*1000)
display_x11->server_time_is_monotonic_time = TRUE;
display_x11->server_time_offset = current_server_time_usec - current_monotonic_time;
}
if (display_x11->server_time_is_monotonic_time)
return server_time;
else
return server_time - display_x11->server_time_offset;
}
GdkFilterReturn
_gdk_wm_protocols_filter (GdkXEvent *xev,
GdkEvent *event,
@@ -1140,7 +1181,7 @@ _gdk_wm_protocols_filter (GdkXEvent *xev,
guint32 d3 = xevent->xclient.data.l[3];
guint64 serial = ((guint64)d1 << 32) | d0;
gint64 frame_drawn_time = ((guint64)d3 << 32) | d2;
gint64 frame_drawn_time = server_time_to_monotonic_time (GDK_X11_DISPLAY (display), ((guint64)d3 << 32) | d2);
gint64 refresh_interval, presentation_time;
GdkFrameClock *clock = gdk_window_get_frame_clock (win);
@@ -1428,7 +1469,7 @@ _gdk_x11_display_open (const gchar *display_name)
gdk_event_init (display);
attr.window_type = GDK_WINDOW_TOPLEVEL;
attr.wclass = GDK_INPUT_OUTPUT;
attr.wclass = GDK_INPUT_ONLY;
attr.x = 10;
attr.y = 10;
attr.width = 10;
+6
View File
@@ -130,6 +130,12 @@ struct _GdkX11Display
gint glx_error_base;
gint glx_event_base;
/* Translation between X server time and system-local monotonic time */
gint64 server_time_query_time;
gint64 server_time_offset;
guint server_time_is_monotonic_time : 1;
guint have_glx : 1;
/* GLX extensions we check */
+31 -10
View File
@@ -309,9 +309,9 @@ glx_pixmap_get (cairo_surface_t *surface, guint texture_target)
{
Display *display = cairo_xlib_surface_get_display (surface);
Screen *screen = cairo_xlib_surface_get_screen (surface);
Visual *visual = cairo_xlib_surface_get_visual (surface);;
Visual *visual = cairo_xlib_surface_get_visual (surface);
GdkGLXPixmap *glx_pixmap;
GLXFBConfig *fbconfigs;
GLXFBConfig *fbconfigs, config;
int nfbconfigs;
XVisualInfo *visinfo;
VisualID visualid;
@@ -326,6 +326,9 @@ glx_pixmap_get (cairo_surface_t *surface, guint texture_target)
None
};
if (visual == NULL)
return NULL;
with_alpha = cairo_surface_get_content (surface) == CAIRO_CONTENT_COLOR_ALPHA;
y_inverted = FALSE;
@@ -393,6 +396,7 @@ glx_pixmap_get (cairo_surface_t *surface, guint texture_target)
if (value == TRUE)
y_inverted = TRUE;
config = fbconfigs[i];
break;
}
@@ -407,7 +411,7 @@ glx_pixmap_get (cairo_surface_t *surface, guint texture_target)
glx_pixmap = g_slice_new0 (GdkGLXPixmap);
glx_pixmap->y_inverted = y_inverted;
glx_pixmap->display = display;
glx_pixmap->drawable = glXCreatePixmap (display, fbconfigs[i],
glx_pixmap->drawable = glXCreatePixmap (display, config,
cairo_xlib_surface_get_drawable (surface),
pixmap_attributes);
@@ -432,6 +436,11 @@ gdk_x11_gl_context_texture_from_surface (GdkGLContext *paint_context,
double sx, sy;
float uscale, vscale;
GdkTexturedQuad *quads;
GdkX11Display *display_x11;
display_x11 = GDK_X11_DISPLAY (gdk_gl_context_get_display (paint_context));
if (!display_x11->has_glx_texture_from_pixmap)
return FALSE;
if (cairo_surface_get_type (surface) != CAIRO_SURFACE_TYPE_XLIB)
return FALSE;
@@ -461,7 +470,6 @@ gdk_x11_gl_context_texture_from_surface (GdkGLContext *paint_context,
glGenTextures (1, &texture_id);
glBindTexture (target, texture_id);
glEnable (target);
glTexParameteri (target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri (target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
@@ -526,7 +534,6 @@ gdk_x11_gl_context_texture_from_surface (GdkGLContext *paint_context,
glXReleaseTexImageEXT (glx_pixmap->display, glx_pixmap->drawable,
GLX_FRONT_LEFT_EXT);
glDisable (target);
glDeleteTextures (1, &texture_id);
glx_pixmap_destroy(glx_pixmap);
@@ -558,17 +565,25 @@ create_gl3_context (GdkDisplay *display,
GLX_CONTEXT_FLAGS_ARB, flags,
None,
};
GLXContext res;
GdkX11GLContext *share_x11 = NULL;
if (share != NULL)
share_x11 = GDK_X11_GL_CONTEXT (share);
return glXCreateContextAttribsARB (gdk_x11_display_get_xdisplay (display),
config,
share_x11 != NULL ? share_x11->glx_context : NULL,
True,
attrib_list);
gdk_x11_display_error_trap_push (display);
res = glXCreateContextAttribsARB (gdk_x11_display_get_xdisplay (display),
config,
share_x11 != NULL ? share_x11->glx_context : NULL,
True,
attrib_list);
if (gdk_x11_display_error_trap_pop (display))
return NULL;
return res;
}
static gboolean
@@ -1206,6 +1221,12 @@ gdk_x11_display_make_gl_context_current (GdkDisplay *display,
}
context_x11 = GDK_X11_GL_CONTEXT (context);
if (context_x11->glx_context == NULL)
{
g_critical ("No GLX context associated to the GdkGLContext; you must "
"call gdk_gl_context_realize() first.");
return FALSE;
}
GDK_NOTE (OPENGL,
g_print ("Making GLX context current to drawable %lu\n",
+5 -5
View File
@@ -2963,15 +2963,15 @@ gdk_window_x11_set_background (GdkWindow *window,
{
GdkWindow *parent;
/* X throws BadMatch if the parent has a different visual when
/* X throws BadMatch if the parent has a different depth when
* using ParentRelative */
parent = gdk_window_get_parent (window);
if (parent && gdk_window_get_visual (parent) == gdk_window_get_visual (window))
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window), ParentRelative);
else
if (parent && window->depth != parent->depth)
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window), None);
else
XSetWindowBackgroundPixmap (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window), ParentRelative);
return;
}
+2 -1
View File
@@ -500,6 +500,7 @@ gtk_private_h_sources = \
gtkstylecontextprivate.h \
gtkstylepropertyprivate.h \
gtkstyleproviderprivate.h \
gtktextattributesprivate.h \
gtktextbtree.h \
gtktextbufferserialize.h \
gtktextchildprivate.h \
@@ -1330,7 +1331,7 @@ distclean-local:
if HAVE_INTROSPECTION
introspection_files = \
$(filter-out %private.h gtktextdisplay.h gtktextlayout.h gtkx.h, $(gtkinclude_HEADERS) $(a11yinclude_HEADERS) $(deprecatedinclude_HEADERS)) \
$(filter-out %win32.c %quartz.c, $(gtk_base_c_sources)) \
$(filter-out %win32.c, $(gtk_base_c_sources)) \
gtkprintoperation-unix.c \
gtktypebuiltins.h \
gtktypebuiltins.c
+6 -3
View File
@@ -113,7 +113,8 @@ gtk_boolean_cell_accessible_ref_state_set (AtkObject *accessible)
}
static void
gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell)
gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell,
gboolean emit_signal)
{
GtkBooleanCellAccessible *boolean_cell = GTK_BOOLEAN_CELL_ACCESSIBLE (cell);
gboolean active;
@@ -131,14 +132,16 @@ gtk_boolean_cell_accessible_update_cache (GtkCellAccessible *cell)
{
boolean_cell->priv->cell_value = !boolean_cell->priv->cell_value;
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, active);
if (emit_signal)
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, active);
}
if (boolean_cell->priv->cell_sensitive != sensitive)
{
boolean_cell->priv->cell_sensitive = !boolean_cell->priv->cell_sensitive;
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_CHECKED, sensitive);
if (emit_signal)
atk_object_notify_state_change (ATK_OBJECT (cell), ATK_STATE_SENSITIVE, sensitive);
}
}
+7 -3
View File
@@ -419,19 +419,23 @@ _gtk_cell_accessible_state_changed (GtkCellAccessible *cell,
/*
* gtk_cell_accessible_update_cache:
* @cell: the cell that is changed
* @emit_signal: whether or not to notify the ATK bridge
*
* Notifies the cell that the values in the data in the row that
* is used to feed the cell renderer with has changed. The
* cell_changed function of @cell is called to send update
* notifications for the properties it takes from its cell
* renderer.
* renderer. If @emit_signal is TRUE, also notify the ATK bridge
* of the change. The bridge should be notified when an existing
* cell changes; not when a newly-created cell is being set up.
*
* Note that there is no higher granularity available about which
* properties changed, so you will need to make do with this
* function.
**/
void
_gtk_cell_accessible_update_cache (GtkCellAccessible *cell)
_gtk_cell_accessible_update_cache (GtkCellAccessible *cell,
gboolean emit_signal)
{
GtkCellAccessibleClass *klass;
@@ -440,5 +444,5 @@ _gtk_cell_accessible_update_cache (GtkCellAccessible *cell)
klass = GTK_CELL_ACCESSIBLE_GET_CLASS (cell);
if (klass->update_cache)
klass->update_cache (cell);
klass->update_cache (cell, emit_signal);
}
+2 -1
View File
@@ -48,7 +48,8 @@ struct _GtkCellAccessible
struct _GtkCellAccessibleClass
{
GtkAccessibleClass parent_class;
void (*update_cache) (GtkCellAccessible *cell);
void (*update_cache) (GtkCellAccessible *cell,
gboolean emit_signal);
};
GDK_AVAILABLE_IN_ALL
+2 -1
View File
@@ -25,7 +25,8 @@ G_BEGIN_DECLS
void _gtk_cell_accessible_state_changed (GtkCellAccessible *cell,
GtkCellRendererState added,
GtkCellRendererState removed);
void _gtk_cell_accessible_update_cache (GtkCellAccessible *cell);
void _gtk_cell_accessible_update_cache (GtkCellAccessible *cell,
gboolean emit_signal);
void _gtk_cell_accessible_initialize (GtkCellAccessible *cell,
GtkWidget *widget,
AtkObject *parent);
+3 -2
View File
@@ -64,13 +64,14 @@ gtk_container_cell_accessible_ref_child (AtkObject *obj,
}
static void
gtk_container_cell_accessible_update_cache (GtkCellAccessible *cell)
gtk_container_cell_accessible_update_cache (GtkCellAccessible *cell,
gboolean emit_signal)
{
GtkContainerCellAccessible *container = GTK_CONTAINER_CELL_ACCESSIBLE (cell);
GList *l;
for (l = container->priv->children; l; l = l->next)
_gtk_cell_accessible_update_cache (l->data);
_gtk_cell_accessible_update_cache (l->data, emit_signal);
}
static void
+23 -37
View File
@@ -87,7 +87,8 @@ static void add_attr (PangoAttrList *attr_li
/* Misc */
static void gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell);
static void gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell,
gboolean emit_signal);
static void atk_text_interface_init (AtkTextIface *iface);
@@ -132,12 +133,12 @@ gtk_text_cell_accessible_get_name (AtkObject *atk_obj)
}
static void
gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell)
gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell,
gboolean emit_signal)
{
GtkTextCellAccessible *text_cell = GTK_TEXT_CELL_ACCESSIBLE (cell);
AtkObject *obj = ATK_OBJECT (cell);
gboolean rv = FALSE;
gint temp_length;
gint text_length;
gchar *text;
GtkCellRenderer *renderer;
@@ -149,48 +150,33 @@ gtk_text_cell_accessible_update_cache (GtkCellAccessible *cell)
g_object_get (renderer, "text", &text, NULL);
g_object_unref (renderer);
if (text_cell->priv->cell_text)
{
if (text == NULL || g_strcmp0 (text_cell->priv->cell_text, text) != 0)
{
g_free (text_cell->priv->cell_text);
temp_length = text_cell->priv->cell_length;
text_cell->priv->cell_text = NULL;
text_cell->priv->cell_length = 0;
g_signal_emit_by_name (cell, "text-changed::delete", 0, temp_length);
if (obj->name == NULL)
g_object_notify (G_OBJECT (obj), "accessible-name");
if (text)
rv = TRUE;
}
}
else
rv = TRUE;
if (text == NULL)
text = g_strdup ("");
text_length = g_utf8_strlen (text, -1);
if (rv)
if (g_strcmp0 (text_cell->priv->cell_text, text) != 0)
{
if (text == NULL)
if (text_cell->priv->cell_length && emit_signal)
{
text_cell->priv->cell_text = g_strdup ("");
text_cell->priv->cell_length = 0;
g_signal_emit_by_name (cell, "text-changed::delete",
0, text_cell->priv->cell_length);
}
else
g_free (text_cell->priv->cell_text);
text_cell->priv->cell_text = g_strdup (text);
text_cell->priv->cell_length = text_length;
if (text_length && emit_signal)
{
text_cell->priv->cell_text = g_strdup (text);
text_cell->priv->cell_length = g_utf8_strlen (text, -1);
g_signal_emit_by_name (cell, "text-changed::insert",
0, text_cell->priv->cell_length);
}
if (obj->name == NULL && emit_signal)
g_object_notify (G_OBJECT (obj), "accessible-name");
}
g_free (text);
if (rv)
{
g_signal_emit_by_name (cell, "text-changed::insert",
0, text_cell->priv->cell_length);
if (obj->name == NULL)
g_object_notify (G_OBJECT (obj), "accessible-name");
}
}
static void
+8
View File
@@ -509,6 +509,11 @@ gtk_text_view_accessible_get_character_extents (AtkText *text,
GdkWindow *window;
gint x_widget, y_widget, x_window, y_window;
*x = 0;
*y = 0;
*width = 0;
*height = 0;
widget = gtk_accessible_get_widget (GTK_ACCESSIBLE (text));
if (widget == NULL)
return;
@@ -519,6 +524,9 @@ gtk_text_view_accessible_get_character_extents (AtkText *text,
gtk_text_view_get_iter_location (view, &iter, &rectangle);
window = gtk_text_view_get_window (view, GTK_TEXT_WINDOW_WIDGET);
if (window == NULL)
return;
gdk_window_get_origin (window, &x_widget, &y_widget);
*height = rectangle.height;
+2 -2
View File
@@ -425,7 +425,7 @@ create_cell (GtkTreeView *treeview,
cell_info_new (accessible, tree, node, column, cell);
set_cell_data (treeview, accessible, cell);
_gtk_cell_accessible_update_cache (cell);
_gtk_cell_accessible_update_cache (cell, FALSE);
return cell;
}
@@ -1705,7 +1705,7 @@ _gtk_tree_view_accessible_changed (GtkTreeView *treeview,
continue;
set_cell_data (treeview, accessible, cell);
_gtk_cell_accessible_update_cache (cell);
_gtk_cell_accessible_update_cache (cell, TRUE);
}
g_signal_emit_by_name (accessible, "visible-data-changed");
+44
View File
@@ -136,6 +136,15 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
widget_class->get_preferred_height_for_width = gtk_alignment_get_preferred_height_for_width;
widget_class->get_preferred_height_and_baseline_for_width = gtk_alignment_get_preferred_height_and_baseline_for_width;
/**
* GtkAlignment:xalign:
*
* Horizontal position of child in available space. A value of 0.0
* will flush the child left (or right, in RTL locales); a value
* of 1.0 will flush the child right (or left, in RTL locales).
*
* Deprecated: 3.14: Use gtk_widget_set_halign() on the child instead
*/
g_object_class_install_property (gobject_class,
PROP_XALIGN,
g_param_spec_float("xalign",
@@ -146,6 +155,15 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
0.5,
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
/**
* GtkAlignment:yalign:
*
* Vertical position of child in available space. A value of 0.0
* will flush the child to the top; a value of 1.0 will flush the
* child to the bottom.
*
* Deprecated: 3.14: Use gtk_widget_set_valign() on the child instead
*/
g_object_class_install_property (gobject_class,
PROP_YALIGN,
g_param_spec_float("yalign",
@@ -155,6 +173,15 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
1.0,
0.5,
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
/**
* GtkAlignment:xscale:
*
* If available horizontal space is bigger than needed, how much
* of it to use for the child. A value of 0.0 means none; a value
* of 1.0 means all.
*
* Deprecated: 3.14: Use gtk_widget_set_hexpand() on the child instead
*/
g_object_class_install_property (gobject_class,
PROP_XSCALE,
g_param_spec_float("xscale",
@@ -164,6 +191,15 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
1.0,
1.0,
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
/**
* GtkAlignment:yscale:
*
* If available vertical space is bigger than needed, how much
* of it to use for the child. A value of 0.0 means none; a value
* of 1.0 means all.
*
* Deprecated: 3.14: Use gtk_widget_set_vexpand() on the child instead
*/
g_object_class_install_property (gobject_class,
PROP_YSCALE,
g_param_spec_float("yscale",
@@ -181,6 +217,8 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
* The padding to insert at the top of the widget.
*
* Since: 2.4
*
* Deprecared: 3.14: Use gtk_widget_set_margin_top() instead
*/
g_object_class_install_property (gobject_class,
PROP_TOP_PADDING,
@@ -198,6 +236,8 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
* The padding to insert at the bottom of the widget.
*
* Since: 2.4
*
* Deprecated: 3.14: Use gtk_widget_set_margin_bottom() instead
*/
g_object_class_install_property (gobject_class,
PROP_BOTTOM_PADDING,
@@ -215,6 +255,8 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
* The padding to insert at the left of the widget.
*
* Since: 2.4
*
* Deprecated: 3.14: Use gtk_widget_set_margin_start() instead
*/
g_object_class_install_property (gobject_class,
PROP_LEFT_PADDING,
@@ -232,6 +274,8 @@ gtk_alignment_class_init (GtkAlignmentClass *class)
* The padding to insert at the right of the widget.
*
* Since: 2.4
*
* Deprecated: 3.14: Use gtk_widget_set_margin_end() instead
*/
g_object_class_install_property (gobject_class,
PROP_RIGHT_PADDING,
+1 -2
View File
@@ -47,8 +47,7 @@
* doing automatic flipping between #GTK_ARROW_LEFT and #GTK_ARROW_RIGHT,
* depending on the text direction. To get the same effect with an image,
* use the icon names pan-start-symbolic and pan-end-symbolic, which
* react to the text direction instead of pan-left-symbolic and
* pan-right-symbolic which don't.
* react to the text direction.
*/
#include "config.h"
+2 -2
View File
@@ -1111,7 +1111,7 @@ gtk_font_selection_size_activate (GtkWidget *w,
const gchar *text;
text = gtk_entry_get_text (GTK_ENTRY (priv->size_entry));
new_size = MAX (0.1, atof (text) * PANGO_SCALE + 0.5);
new_size = (int) MAX (0.1, atof (text) * PANGO_SCALE + 0.5);
if (priv->size != new_size)
gtk_font_selection_set_size (fontsel, new_size);
@@ -1130,7 +1130,7 @@ gtk_font_selection_size_focus_out (GtkWidget *w,
const gchar *text;
text = gtk_entry_get_text (GTK_ENTRY (priv->size_entry));
new_size = MAX (0.1, atof (text) * PANGO_SCALE + 0.5);
new_size = (int) MAX (0.1, atof (text) * PANGO_SCALE + 0.5);
gtk_font_selection_set_size (fontsel, new_size);
+2 -2
View File
@@ -77,7 +77,7 @@ struct _GtkHandleBoxPrivate
{
/* Properties */
GtkPositionType handle_position;
GtkPositionType snap_edge;
gint snap_edge;
GtkShadowType shadow_type;
gboolean child_detached;
/* Properties */
@@ -1051,7 +1051,7 @@ gtk_handle_box_get_snap_edge (GtkHandleBox *handle_box)
{
g_return_val_if_fail (GTK_IS_HANDLE_BOX (handle_box), (GtkPositionType)-1);
return handle_box->priv->snap_edge;
return (GtkPositionType)handle_box->priv->snap_edge;
}
/**
+3 -3
View File
@@ -2945,17 +2945,17 @@ gtk_icon_factory_buildable_custom_tag_end (GtkBuildable *buildable,
}
if (source_data->icon_name)
gtk_icon_source_set_icon_name (icon_source, source_data->icon_name);
if (source_data->size != -1)
if ((gint)source_data->size != -1)
{
gtk_icon_source_set_size (icon_source, source_data->size);
gtk_icon_source_set_size_wildcarded (icon_source, FALSE);
}
if (source_data->direction != -1)
if ((gint)source_data->direction != -1)
{
gtk_icon_source_set_direction (icon_source, source_data->direction);
gtk_icon_source_set_direction_wildcarded (icon_source, FALSE);
}
if (source_data->state != -1)
if ((gint)source_data->state != -1)
{
gtk_icon_source_set_state (icon_source, source_data->state);
gtk_icon_source_set_state_wildcarded (icon_source, FALSE);
+36 -5
View File
@@ -79,6 +79,35 @@
* consider using icons in menu items only sparingly, and for "objects" (or
* "nouns") elements only, like bookmarks, files, and links; "actions" (or
* "verbs") should not have icons.
*
* Furthermore, if you would like to display keyboard accelerator, you must
* pack the accel label into the box using gtk_box_pack_end() and align the
* label, otherwise the accelerator will not display correctly. The following
* code snippet adds a keyboard accelerator to the menu item, with a key
* binding of Ctrl+M:
*
* |[<!-- language="C" -->
* GtkWidget *box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
* GtkWidget *icon = gtk_image_new_from_icon_name ("folder-music-symbolic", GTK_ICON_SIZE_MENU);
* GtkWidget *label = gtk_accel_label_new ("Music");
* GtkWidget *menu_item = gtk_menu_item_new ();
* GtkAccelGroup *accel_group = gtk_accel_group_new ();
*
* gtk_container_add (GTK_CONTAINER (box), icon);
*
* gtk_label_set_use_underline (GTK_LABEL (label), TRUE);
* gtk_label_set_xalign (GTK_LABEL (label), 0.0);
*
* gtk_widget_add_accelerator (menu_item, "activate", accel_group,
* GDK_KEY_m, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
* gtk_accel_label_set_accel_widget (GTK_ACCEL_LABEL (label), menu_item);
*
* gtk_box_pack_end (GTK_BOX (box), label, TRUE, TRUE, 0);
*
* gtk_container_add (GTK_CONTAINER (menu_item), box);
*
* gtk_widget_show_all (menu_item);
* ]|
*/
@@ -188,7 +217,8 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
*
* Child widget to appear next to the menu text.
*
* Deprecated: 3.10
* Deprecated: 3.10: Use a #GtkMenuItem containing a #GtkBox with
* a #GtkAccelLabel and a #GtkImage instead
*/
g_object_class_install_property (gobject_class,
PROP_IMAGE,
@@ -205,7 +235,7 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
*
* Since: 2.16
*
* Deprecated: 3.10
* Deprecated: 3.10: Use a named icon from the #GtkIconTheme instead
*/
g_object_class_install_property (gobject_class,
PROP_USE_STOCK,
@@ -225,7 +255,8 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
*
* Since: 2.16
*
* Deprecated: 3.10
* Deprecated: 3.10: Use a #GtkMenuItem containing a #GtkBox with
* a #GtkAccelLabel and a #GtkImage instead
*/
g_object_class_install_property (gobject_class,
PROP_ALWAYS_SHOW_IMAGE,
@@ -242,7 +273,7 @@ gtk_image_menu_item_class_init (GtkImageMenuItemClass *klass)
*
* Since: 2.16
*
* Deprecated: 3.10
* Deprecated: 3.10: Use gtk_widget_add_accelerator() instead
*/
g_object_class_install_property (gobject_class,
PROP_ACCEL_GROUP,
@@ -903,7 +934,7 @@ gtk_image_menu_item_new_with_mnemonic (const gchar *label)
*
* Returns: a new #GtkImageMenuItem.
*
* Deprecated: 3.10: Use gtk_menu_item_new() instead.
* Deprecated: 3.10: Use gtk_menu_item_new_with_mnemonic() instead.
*/
GtkWidget*
gtk_image_menu_item_new_from_stock (const gchar *stock_id,
+37
View File
@@ -98,6 +98,16 @@ gtk_misc_class_init (GtkMiscClass *class)
widget_class->realize = gtk_misc_realize;
/**
* GtkMisc:xalign:
*
* The horizontal alignment. A value of 0.0 means left alignment (or right
* on RTL locales); a value of 1.0 means right alignment (or left on RTL
* locales).
*
* Deprecated: 3.14: Use gtk_widget_set_halign() instead. If you are using
* #GtkLabel, use #GtkLabel:xalign instead.
*/
g_object_class_install_property (gobject_class,
PROP_XALIGN,
g_param_spec_float ("xalign",
@@ -108,6 +118,15 @@ gtk_misc_class_init (GtkMiscClass *class)
0.5,
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
/**
* GtkMisc:yalign:
*
* The vertical alignment. A value of 0.0 means top alignment;
* a value of 1.0 means bottom alignment.
*
* Deprecated: 3.14: Use gtk_widget_set_valign() instead. If you are using
* #GtkLabel, use #GtkLabel:yalign instead.
*/
g_object_class_install_property (gobject_class,
PROP_YALIGN,
g_param_spec_float ("yalign",
@@ -118,6 +137,15 @@ gtk_misc_class_init (GtkMiscClass *class)
0.5,
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
/**
* GtkMisc:xpad:
*
* The amount of space to add on the left and right of the widget, in
* pixels.
*
* Deprecated: 3.14: Use gtk_widget_set_margin_start() and
* gtk_widget_set_margin_end() instead
*/
g_object_class_install_property (gobject_class,
PROP_XPAD,
g_param_spec_int ("xpad",
@@ -128,6 +156,15 @@ gtk_misc_class_init (GtkMiscClass *class)
0,
GTK_PARAM_READWRITE|G_PARAM_DEPRECATED));
/**
* GtkMisc:ypad:
*
* The amount of space to add on the top and bottom of the widget, in
* pixels.
*
* Deprecated: 3.14: Use gtk_widget_set_margin_top() and
* gtk_widget_set_margin_bottom() instead
*/
g_object_class_install_property (gobject_class,
PROP_YPAD,
g_param_spec_int ("ypad",
+1 -1
View File
@@ -95,7 +95,7 @@ real_add (const GtkStockItem *items,
gpointer old_key, old_value;
const GtkStockItem *item = &items[i];
if (replace_primary && item->modifier == PRIMARY_MODIFIER)
if (replace_primary && (guint)item->modifier == PRIMARY_MODIFIER)
{
item = gtk_stock_item_copy (item);
((GtkStockItem *)item)->modifier = (NON_STATIC_MASK |
+1
View File
@@ -2288,6 +2288,7 @@ add_credits_section (GtkAboutDialog *about,
label = gtk_label_new (str->str);
gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
gtk_label_set_selectable (GTK_LABEL (label), TRUE);
g_signal_connect_swapped (label, "activate-link",
G_CALLBACK (emit_activate_link), about);
g_string_free (str, TRUE);
+6 -6
View File
@@ -39,7 +39,7 @@
*
* The action will be looked up in action groups that are found among
* the widgets ancestors. Most commonly, these will be the actions with
* the "win" or "app" prefix that are associated with the #GtkApplicationWindow
* the win. or app. prefix that are associated with the #GtkApplicationWindow
* or "GtkApplication, but other action groups that are added with
* gtk_widget_insert_action_group() will be consulted as well.
*
@@ -54,10 +54,10 @@
/**
* GtkActionableInterface:
* @get_action_name: virtual pointer for gtk_actionable_get_action_name()
* @set_action_name: virtual pointer for gtk_actionable_set_action_name()
* @get_action_target_value: virtual pointer for gtk_actionable_get_action_target_value()
* @set_action_target_value: virtual pointer for gtk_actionable_set_action_target_value()
* @get_action_name: virtual function for gtk_actionable_get_action_name()
* @set_action_name: virtual function for gtk_actionable_set_action_name()
* @get_action_target_value: virtual function for gtk_actionable_get_action_target_value()
* @set_action_target_value: virtual function for gtk_actionable_set_action_target_value()
*
* The interface vtable for #GtkActionable.
**/
@@ -161,7 +161,7 @@ gtk_actionable_get_action_target_value (GtkActionable *actionable)
* The target value has two purposes. First, it is used as the
* parameter to activation of the action associated with the
* #GtkActionable widget. Second, it is used to determine if the widget
* should be rendered as active - the widget is active if the state
* should be rendered as active the widget is active if the state
* is equal to the given target.
*
* Consider the example of associating a set of buttons with a #GAction
+1 -1
View File
@@ -415,7 +415,7 @@ gtk_action_helper_set_action_name (GtkActionHelper *helper,
return;
GTK_NOTE(ACTIONS,
if (!strchr (action_name, '.'))
if (action_name == NULL || !strchr (action_name, '.'))
g_message ("actionhelper: action name %s doesn't look like 'app.' or 'win.' "
"which means that it will probably not work properly.", action_name));
+19 -15
View File
@@ -69,7 +69,7 @@
* that the GDK lock be held while invoking actions locally with
* g_action_group_activate_action(). The same applies to actions
* associated with #GtkApplicationWindow and to the activate and
* 'open' #GApplication methods.
* open #GApplication methods.
*
* ## Automatic resources ## {#automatic-resources}
*
@@ -113,8 +113,8 @@
* session while inhibitors are present.
*
* ## See Also ## {#seealso}
* HowDoI: [Using GtkApplication] (https://wiki.gnome.org/HowDoI/GtkApplication)
* [Getting Started with GTK+: Basics] (https://developer.gnome.org/gtk3/stable/gtk-getting-started.html#id-1.2.3.3)
* [HowDoI: Using GtkApplication](https://wiki.gnome.org/HowDoI/GtkApplication),
* [Getting Started with GTK+: Basics](https://developer.gnome.org/gtk3/stable/gtk-getting-started.html#id-1.2.3.3)
*/
enum {
@@ -506,7 +506,9 @@ gtk_application_focus_in_event_cb (GtkWindow *window,
priv->windows = g_list_concat (link, priv->windows);
}
gtk_application_impl_active_window_changed (application->priv->impl, window);
if (application->priv->impl)
gtk_application_impl_active_window_changed (application->priv->impl, window);
g_object_notify (G_OBJECT (application), "active-window");
return FALSE;
@@ -1126,7 +1128,7 @@ gtk_application_get_window_by_id (GtkApplication *application,
*
* The active window is the one that was most recently focused (within
* the application). This window may not have the focus at the moment
* if another application has it -- this is just the most
* if another application has it this is just the most
* recently-focused window within this application.
*
* Returns: (transfer none): the active window
@@ -1369,12 +1371,12 @@ gtk_application_get_app_menu (GtkApplication *application)
* each window, or at the top of the screen. In some environments, if
* both the application menu and the menubar are set, the application
* menu will be presented as if it were the first item of the menubar.
* Other environments treat the two as completely separate -- for
* example, the application menu may be rendered by the desktop shell
* while the menubar (if set) remains in each individual window.
* Other environments treat the two as completely separate for example,
* the application menu may be rendered by the desktop shell while the
* menubar (if set) remains in each individual window.
*
* Use the base #GActionMap interface to add actions, to respond to the user
* selecting these menu items.
* Use the base #GActionMap interface to add actions, to respond to the
* user selecting these menu items.
*
* Since: 3.4
*/
@@ -1630,11 +1632,11 @@ normalise_detailed_name (const gchar *detailed_action_name)
* @application: a #GtkApplication
* @detailed_action_name: a detailed action name, specifying an action
* and target to associate accelerators with
* @accels: (array zero-terminated=1): a list of accelerators in the format understood by
* gtk_accelerator_parse()
* @accels: (array zero-terminated=1): a list of accelerators in the format
* understood by gtk_accelerator_parse()
*
* Sets zero or more keyboard accelerators that will trigger the
* given action. The first item in @accels will be the primary
* given action. The first item in @accels will be the primary
* accelerator, which may be displayed in the UI.
*
* To remove all accelerators for an action, use an empty, zero-terminated
@@ -1778,14 +1780,16 @@ void
gtk_application_handle_window_realize (GtkApplication *application,
GtkWindow *window)
{
gtk_application_impl_handle_window_realize (application->priv->impl, window);
if (application->priv->impl)
gtk_application_impl_handle_window_realize (application->priv->impl, window);
}
void
gtk_application_handle_window_map (GtkApplication *application,
GtkWindow *window)
{
gtk_application_impl_handle_window_map (application->priv->impl, window);
if (application->priv->impl)
gtk_application_impl_handle_window_map (application->priv->impl, window);
}
/**
+2 -3
View File
@@ -96,8 +96,7 @@
*
* menubar = G_MENU_MODEL (gtk_builder_get_object (builder,
* "menubar"));
* gtk_application_set_menubar (G_APPLICATION (app),
* menubar);
* gtk_application_set_menubar (G_APPLICATION (app), menubar);
* g_object_unref (builder);
*
* ...
@@ -118,7 +117,7 @@
* Attribute values can be translated using gettext, like other #GtkBuilder
* content. `<attribute>` elements can be marked for translation with a
* `translatable="yes"` attribute. It is also possible to specify message
* context and translator comments,using the context and comments attributes.
* context and translator comments, using the context and comments attributes.
* To make use of this, the #GtkBuilder must have been given the gettext
* domain to use.
*/
+1 -1
View File
@@ -1132,7 +1132,7 @@ gtk_button_box_size_allocate (GtkWidget *widget,
/**
* gtk_button_box_new:
* @orientation: the box' orientation.
* @orientation: the box's orientation.
*
* Creates a new #GtkButtonBox.
*
+2 -1
View File
@@ -203,6 +203,7 @@
*
* Additionally, since 3.10 a special <template> tag has been added
* to the format allowing one to define a widget classs components.
* See the [GtkWidget documentation][composite-templates] for details.
*/
#include "config.h"
@@ -2430,7 +2431,7 @@ gtk_builder_add_callback_symbols (GtkBuilder *builder,
}
/**
* gtk_builder_lookup_callback_symbol:
* gtk_builder_lookup_callback_symbol: (skip)
* @builder: a #GtkBuilder
* @callback_name: The name of the callback
*
+3
View File
@@ -1216,6 +1216,8 @@ end_element (GMarkupParseContext *context,
PropertyInfo *prop_info = state_pop_info (data, PropertyInfo);
CommonInfo *info = state_peek_info (data, CommonInfo);
g_assert (info != NULL);
/* Normal properties */
if (strcmp (info->tag.name, "object") == 0 ||
strcmp (info->tag.name, "template") == 0)
@@ -1252,6 +1254,7 @@ end_element (GMarkupParseContext *context,
{
SignalInfo *signal_info = state_pop_info (data, SignalInfo);
ObjectInfo *object_info = (ObjectInfo*)state_peek_info (data, CommonInfo);
g_assert (object_info != NULL);
signal_info->object_name = g_strdup (object_info->id);
object_info->signals =
g_slist_prepend (object_info->signals, signal_info);
+84 -43
View File
@@ -25,6 +25,32 @@
#include <math.h>
#include <string.h>
/*
* Gets the size for a single box blur.
*
* Much of this, the 3 * sqrt(2 * pi) / 4, is the known value for
* approximating a Gaussian using box blurs. This yields quite a good
* approximation for a Gaussian. For more details, see:
* http://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement
* https://bugzilla.mozilla.org/show_bug.cgi?id=590039#c19
*/
#define GAUSSIAN_SCALE_FACTOR ((3.0 * sqrt(2 * G_PI) / 4))
#define get_box_filter_size(radius) ((int)(GAUSSIAN_SCALE_FACTOR * (radius)))
/* Sadly, clang is picky about get_box_filter_size(2) not being a
* constant expression, thus we have to use precomputed values.
*/
#define BOX_FILTER_SIZE_2 3
#define BOX_FILTER_SIZE_3 5
#define BOX_FILTER_SIZE_4 7
#define BOX_FILTER_SIZE_5 9
#define BOX_FILTER_SIZE_6 11
#define BOX_FILTER_SIZE_7 13
#define BOX_FILTER_SIZE_8 15
#define BOX_FILTER_SIZE_9 16
#define BOX_FILTER_SIZE_10 18
/* This applies a single box blur pass to a horizontal range of pixels;
* since the box blur has the same weight for all pixels, we can
* implement an efficient sliding window algorithm where we add
@@ -60,18 +86,37 @@ blur_xspan (guchar *row,
* only divide down after all three passes. (SSE parallel implementation
* of the divide step is possible.)
*/
for (i = -d + offset; i < row_width + offset; i++)
#define BLUR_ROW_KERNEL(D) \
for (i = -(D) + offset; i < row_width + offset; i++) \
{ \
if (i >= 0 && i < row_width) \
sum += row[i]; \
\
if (i >= offset) \
{ \
if (i >= (D)) \
sum -= row[i - (D)]; \
\
tmp_buffer[i - offset] = (sum + (D) / 2) / (D); \
} \
} \
break;
/* We unroll the values for d for radius 2-10 to avoid a generic
* divide operation (not radius 1, because its a no-op) */
switch (d)
{
if (i >= 0 && i < row_width)
sum += row[i];
if (i >= offset)
{
if (i >= d)
sum -= row[i - d];
tmp_buffer[i - offset] = (sum + d / 2) / d;
}
case BOX_FILTER_SIZE_2: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_2);
case BOX_FILTER_SIZE_3: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_3);
case BOX_FILTER_SIZE_4: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_4);
case BOX_FILTER_SIZE_5: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_5);
case BOX_FILTER_SIZE_6: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_6);
case BOX_FILTER_SIZE_7: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_7);
case BOX_FILTER_SIZE_8: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_8);
case BOX_FILTER_SIZE_9: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_9);
case BOX_FILTER_SIZE_10: BLUR_ROW_KERNEL (BOX_FILTER_SIZE_10);
default: BLUR_ROW_KERNEL (d);
}
memcpy (row, tmp_buffer, row_width);
@@ -140,45 +185,35 @@ flip_buffer (guchar *dst_buffer,
#undef BLOCK_SIZE
}
/*
* Gets the size for a single box blur.
*
* Much of this, the 3 * sqrt(2 * pi) / 4, is the known value for
* approximating a Gaussian using box blurs. This yields quite a good
* approximation for a Gaussian. For more details, see:
* http://www.w3.org/TR/SVG11/filters.html#feGaussianBlurElement
* https://bugzilla.mozilla.org/show_bug.cgi?id=590039#c19
*/
#define GAUSSIAN_SCALE_FACTOR ((3.0 * sqrt(2 * G_PI) / 4))
static int
get_box_filter_size (double radius)
{
return GAUSSIAN_SCALE_FACTOR * radius;
}
static void
_boxblur (guchar *buffer,
int width,
int height,
int radius)
_boxblur (guchar *buffer,
int width,
int height,
int radius,
GtkBlurFlags flags)
{
guchar *flipped_buffer;
int d = get_box_filter_size (radius);
flipped_buffer = g_malloc (width * height);
/* Step 1: swap rows and columns */
flip_buffer (flipped_buffer, buffer, width, height);
if (flags & GTK_BLUR_Y)
{
/* Step 1: swap rows and columns */
flip_buffer (flipped_buffer, buffer, width, height);
/* Step 2: blur rows (really columns) */
blur_rows (flipped_buffer, buffer, height, width, d);
/* Step 2: blur rows (really columns) */
blur_rows (flipped_buffer, buffer, height, width, d);
/* Step 3: swap rows and columns */
flip_buffer (buffer, flipped_buffer, height, width);
/* Step 3: swap rows and columns */
flip_buffer (buffer, flipped_buffer, height, width);
}
/* Step 4: blur rows */
blur_rows (buffer, flipped_buffer, width, height, d);
if (flags & GTK_BLUR_X)
{
/* Step 4: blur rows */
blur_rows (buffer, flipped_buffer, width, height, d);
}
g_free (flipped_buffer);
}
@@ -192,7 +227,8 @@ _boxblur (guchar *buffer,
*/
void
_gtk_cairo_blur_surface (cairo_surface_t* surface,
double radius_d)
double radius_d,
GtkBlurFlags flags)
{
int radius = radius_d;
@@ -200,7 +236,12 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
g_return_if_fail (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE);
g_return_if_fail (cairo_image_surface_get_format (surface) == CAIRO_FORMAT_A8);
if (radius == 0)
/* The code doesn't actually do any blurring for radius 1, as it
* ends up with box filter size 1 */
if (radius <= 1)
return;
if ((flags & (GTK_BLUR_X|GTK_BLUR_Y)) == 0)
return;
/* Before we mess with the surface, execute any pending drawing. */
@@ -209,7 +250,7 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
_boxblur (cairo_image_surface_get_data (surface),
cairo_image_surface_get_stride (surface),
cairo_image_surface_get_height (surface),
radius);
radius, flags);
/* Inform cairo we altered the surface contents. */
cairo_surface_mark_dirty (surface);
+9 -1
View File
@@ -29,8 +29,16 @@
G_BEGIN_DECLS
typedef enum {
GTK_BLUR_NONE = 0,
GTK_BLUR_X = 1<<0,
GTK_BLUR_Y = 1<<1,
GTK_BLUR_REPEAT = 1<<2
} GtkBlurFlags;
void _gtk_cairo_blur_surface (cairo_surface_t *surface,
double radius);
double radius,
GtkBlurFlags flags);;
int _gtk_cairo_blur_compute_pixels (double radius);
G_END_DECLS
+3 -1
View File
@@ -209,7 +209,9 @@ popup_edit (GtkWidget *widget,
focus = editor->priv->a_entry;
}
if (popup)
if (popup == editor->priv->current_popup)
dismiss_current_popup (editor);
else if (popup)
{
dismiss_current_popup (editor);
toplevel = gtk_widget_get_toplevel (GTK_WIDGET (editor));
+17 -4
View File
@@ -41,6 +41,7 @@ struct _GtkColorSwatchPrivate
guint has_color : 1;
guint use_alpha : 1;
guint selectable : 1;
guint has_menu : 1;
GdkWindow *event_window;
@@ -52,7 +53,8 @@ enum
{
PROP_ZERO,
PROP_RGBA,
PROP_SELECTABLE
PROP_SELECTABLE,
PROP_HAS_MENU
};
enum
@@ -82,6 +84,7 @@ gtk_color_swatch_init (GtkColorSwatch *swatch)
swatch->priv = gtk_color_swatch_get_instance_private (swatch);
swatch->priv->use_alpha = TRUE;
swatch->priv->selectable = TRUE;
swatch->priv->has_menu = TRUE;
gtk_widget_set_can_focus (GTK_WIDGET (swatch), TRUE);
gtk_widget_set_has_window (GTK_WIDGET (swatch), FALSE);
@@ -357,7 +360,7 @@ swatch_key_press (GtkWidget *widget,
event->keyval == GDK_KEY_KP_Enter ||
event->keyval == GDK_KEY_KP_Space)
{
if (swatch->priv->has_color &&
if (swatch->priv->has_color &&
swatch->priv->selectable &&
(gtk_widget_get_state_flags (widget) & GTK_STATE_FLAG_SELECTED) == 0)
gtk_widget_set_state_flags (widget, GTK_STATE_FLAG_SELECTED, FALSE);
@@ -517,7 +520,7 @@ tap_action (GtkGestureMultiPress *gesture,
}
else if (button == GDK_BUTTON_SECONDARY)
{
if (swatch->priv->has_color)
if (swatch->priv->has_color && swatch->priv->has_menu)
do_popup (GTK_WIDGET (swatch), button, gtk_get_current_event_time ());
}
}
@@ -575,7 +578,7 @@ swatch_realize (GtkWidget *widget)
gtk_widget_set_window (widget, window);
g_object_ref (window);
swatch->priv->event_window =
swatch->priv->event_window =
gdk_window_new (window,
&attributes, attributes_mask);
gtk_widget_register_window (widget, swatch->priv->event_window);
@@ -641,6 +644,9 @@ swatch_get_property (GObject *object,
case PROP_SELECTABLE:
g_value_set_boolean (value, gtk_color_swatch_get_selectable (swatch));
break;
case PROP_HAS_MENU:
g_value_set_boolean (value, swatch->priv->has_menu);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -663,6 +669,9 @@ swatch_set_property (GObject *object,
case PROP_SELECTABLE:
gtk_color_swatch_set_selectable (swatch, g_value_get_boolean (value));
break;
case PROP_HAS_MENU:
swatch->priv->has_menu = g_value_get_boolean (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -728,10 +737,14 @@ gtk_color_swatch_class_init (GtkColorSwatchClass *class)
g_object_class_install_property (object_class, PROP_SELECTABLE,
g_param_spec_boolean ("selectable", P_("Selectable"), P_("Whether the swatch is selectable"),
TRUE, GTK_PARAM_READWRITE));
g_object_class_install_property (object_class, PROP_HAS_MENU,
g_param_spec_boolean ("has-menu", P_("Has Menu"), P_("Whether the swatch should offer customization"),
TRUE, GTK_PARAM_READWRITE));
gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_COLOR_SWATCH_ACCESSIBLE);
}
/* Public API {{{1 */
GtkWidget *
+1 -1
View File
@@ -1689,7 +1689,7 @@ gtk_container_add (GtkContainer *container,
{
g_warning ("Attempting to add a widget with type %s to a container of "
"type %s, but the widget is already inside a container of type %s, "
"please use gtk_widget_reparent()" ,
"please remove the widget from its existing container first." ,
g_type_name (G_OBJECT_TYPE (widget)),
g_type_name (G_OBJECT_TYPE (container)),
g_type_name (G_OBJECT_TYPE (parent)));
+1 -1
View File
@@ -337,7 +337,7 @@ static GtkCssValue font_variant_values[] = {
GtkCssValue *
_gtk_css_font_variant_value_new (PangoVariant font_variant)
{
g_return_val_if_fail (font_variant < G_N_ELEMENTS (font_variant_values), NULL);
g_return_val_if_fail ((gint)font_variant < G_N_ELEMENTS (font_variant_values), NULL);
return _gtk_css_value_ref (&font_variant_values[font_variant]);
}
+61 -20
View File
@@ -313,7 +313,10 @@ static gboolean
needs_blur (const GtkCssValue *shadow)
{
double radius = _gtk_css_number_value_get (shadow->radius, 0);
if (radius == 0.0)
/* The code doesn't actually do any blurring for radius 1, as it
* ends up with box filter size 1 */
if (radius <= 1.0)
return FALSE;
return TRUE;
@@ -323,12 +326,15 @@ static const cairo_user_data_key_t original_cr_key;
static cairo_t *
gtk_css_shadow_value_start_drawing (const GtkCssValue *shadow,
cairo_t *cr)
cairo_t *cr,
GtkBlurFlags blur_flags)
{
cairo_rectangle_int_t clip_rect;
cairo_surface_t *surface;
cairo_t *blur_cr;
gdouble radius, clip_radius;
gboolean blur_x = (blur_flags & GTK_BLUR_X) != 0;
gboolean blur_y = (blur_flags & GTK_BLUR_Y) != 0;
if (!needs_blur (shadow))
return cr;
@@ -338,12 +344,22 @@ gtk_css_shadow_value_start_drawing (const GtkCssValue *shadow,
radius = _gtk_css_number_value_get (shadow->radius, 0);
clip_radius = _gtk_cairo_blur_compute_pixels (radius);
if (blur_flags & GTK_BLUR_REPEAT)
{
if (!blur_x)
clip_rect.width = 1;
if (!blur_y)
clip_rect.height = 1;
}
/* Create a larger surface to center the blur. */
surface = cairo_surface_create_similar_image (cairo_get_target (cr),
CAIRO_FORMAT_A8,
clip_rect.width + 2 * clip_radius,
clip_rect.height + 2 * clip_radius);
cairo_surface_set_device_offset (surface, clip_radius - clip_rect.x, clip_radius - clip_rect.y);
clip_rect.width + (blur_x ? 2 * clip_radius : 0),
clip_rect.height + (blur_y ? 2 * clip_radius : 0));
cairo_surface_set_device_offset (surface,
(blur_x ? clip_radius : 0) - clip_rect.x,
(blur_y ? clip_radius : 0) - clip_rect.y);
blur_cr = cairo_create (surface);
cairo_set_user_data (blur_cr, &original_cr_key, cairo_reference (cr), (cairo_destroy_func_t) cairo_destroy);
@@ -358,9 +374,24 @@ gtk_css_shadow_value_start_drawing (const GtkCssValue *shadow,
return blur_cr;
}
void
mask_surface_repeat (cairo_t *cr,
cairo_surface_t *surface)
{
cairo_pattern_t *pattern;
pattern = cairo_pattern_create_for_surface (surface);
cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT);
cairo_mask (cr, pattern);
cairo_pattern_destroy (pattern);
}
static cairo_t *
gtk_css_shadow_value_finish_drawing (const GtkCssValue *shadow,
cairo_t *cr)
cairo_t *cr,
GtkBlurFlags blur_flags)
{
gdouble radius;
cairo_t *original_cr;
@@ -374,12 +405,16 @@ gtk_css_shadow_value_finish_drawing (const GtkCssValue *shadow,
/* Blur the surface. */
surface = cairo_get_target (cr);
radius = _gtk_css_number_value_get (shadow->radius, 0);
_gtk_cairo_blur_surface (surface, radius);
_gtk_cairo_blur_surface (surface, radius, blur_flags);
gdk_cairo_set_source_rgba (original_cr, _gtk_css_rgba_value_get_rgba (shadow->color));
cairo_mask_surface (original_cr, surface, 0, 0);
if (blur_flags & GTK_BLUR_REPEAT)
mask_surface_repeat (original_cr, surface);
else
cairo_mask_surface (original_cr, surface, 0, 0);
cairo_destroy (cr);
cairo_surface_destroy (surface);
return original_cr;
@@ -441,7 +476,7 @@ make_blurred_pango_surface (cairo_t *existing_cr,
cr = cairo_create (surface);
cairo_move_to (cr, 0, 0);
_gtk_pango_fill_layout (cr, layout);
_gtk_cairo_blur_surface (surface, radius * x_scale);
_gtk_cairo_blur_surface (surface, radius * x_scale, GTK_BLUR_X | GTK_BLUR_Y);
cairo_destroy (cr);
@@ -528,14 +563,14 @@ _gtk_css_shadow_value_paint_icon (const GtkCssValue *shadow,
pattern = cairo_pattern_reference (cairo_get_source (cr));
gdk_cairo_set_source_rgba (cr, _gtk_css_rgba_value_get_rgba (shadow->color));
cr = gtk_css_shadow_value_start_drawing (shadow, cr);
cr = gtk_css_shadow_value_start_drawing (shadow, cr, GTK_BLUR_X | GTK_BLUR_Y);
cairo_translate (cr,
_gtk_css_number_value_get (shadow->hoffset, 0),
_gtk_css_number_value_get (shadow->voffset, 0));
cairo_mask (cr, pattern);
cr = gtk_css_shadow_value_finish_drawing (shadow, cr);
cr = gtk_css_shadow_value_finish_drawing (shadow, cr, GTK_BLUR_X | GTK_BLUR_Y);
cairo_restore (cr);
cairo_pattern_destroy (pattern);
@@ -583,16 +618,18 @@ draw_shadow (const GtkCssValue *shadow,
cairo_t *cr,
GtkRoundedBox *box,
GtkRoundedBox *clip_box,
gboolean blur)
GtkBlurFlags blur_flags)
{
cairo_t *shadow_cr;
gboolean do_blur;
if (has_empty_clip (cr))
return;
gdk_cairo_set_source_rgba (cr, _gtk_css_rgba_value_get_rgba (shadow->color));
if (blur)
shadow_cr = gtk_css_shadow_value_start_drawing (shadow, cr);
do_blur = (blur_flags & (GTK_BLUR_X | GTK_BLUR_Y)) != 0;
if (do_blur)
shadow_cr = gtk_css_shadow_value_start_drawing (shadow, cr, blur_flags);
else
shadow_cr = cr;
@@ -603,8 +640,8 @@ draw_shadow (const GtkCssValue *shadow,
cairo_fill (shadow_cr);
if (blur)
gtk_css_shadow_value_finish_drawing (shadow, shadow_cr);
if (do_blur)
gtk_css_shadow_value_finish_drawing (shadow, shadow_cr, blur_flags);
}
void
@@ -660,7 +697,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
_gtk_rounded_box_shrink (&clip_box, -clip_radius, -clip_radius, -clip_radius, -clip_radius);
if (!needs_blur (shadow))
draw_shadow (shadow, cr, &box, &clip_box, FALSE);
draw_shadow (shadow, cr, &box, &clip_box, GTK_BLUR_NONE);
else
{
int i, x1, x2, y1, y2;
@@ -730,7 +767,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
/* Also clip with remaining to ensure we never draw any area twice */
gdk_cairo_region (cr, remaining);
cairo_clip (cr);
draw_shadow (shadow, cr, &box, &clip_box, TRUE);
draw_shadow (shadow, cr, &box, &clip_box, GTK_BLUR_X | GTK_BLUR_Y);
cairo_restore (cr);
/* We drew the region, remove it from remaining */
@@ -744,8 +781,11 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
/* Then the sides */
for (i = 0; i < 4; i++)
{
GtkBlurFlags blur_flags = GTK_BLUR_REPEAT;
if (i == GTK_CSS_TOP || i == GTK_CSS_BOTTOM)
{
blur_flags |= GTK_BLUR_Y;
x1 = floor (box.box.x - clip_radius);
x2 = ceil (box.box.x + box.box.width + clip_radius);
}
@@ -762,6 +802,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
if (i == GTK_CSS_LEFT || i == GTK_CSS_RIGHT)
{
blur_flags |= GTK_BLUR_X;
y1 = floor (box.box.y - clip_radius);
y2 = ceil (box.box.y + box.box.height + clip_radius);
}
@@ -782,7 +823,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
/* Also clip with remaining to ensure we never draw any area twice */
gdk_cairo_region (cr, remaining);
cairo_clip (cr);
draw_shadow (shadow, cr, &box, &clip_box, TRUE);
draw_shadow (shadow, cr, &box, &clip_box, blur_flags);
cairo_restore (cr);
/* We drew the region, remove it from remaining */
@@ -798,7 +839,7 @@ _gtk_css_shadow_value_paint_box (const GtkCssValue *shadow,
cairo_save (cr);
gdk_cairo_region (cr, remaining);
cairo_clip (cr);
draw_shadow (shadow, cr, &box, &clip_box, FALSE);
draw_shadow (shadow, cr, &box, &clip_box, GTK_BLUR_NONE);
cairo_restore (cr);
cairo_region_destroy (remaining);
+6 -3
View File
@@ -46,9 +46,12 @@ gtk_css_static_style_get_value (GtkCssStyle *style,
{
GtkCssStaticStyle *sstyle = GTK_CSS_STATIC_STYLE (style);
if (sstyle->values == NULL ||
id >= sstyle->values->len)
return NULL;
if (G_UNLIKELY (id >= GTK_CSS_PROPERTY_N_PROPERTIES))
{
GtkCssStyleProperty *prop = _gtk_css_style_property_lookup_by_id (id);
return _gtk_css_style_property_get_initial_value (prop);
}
return g_ptr_array_index (sstyle->values, id);
}
+3 -1
View File
@@ -160,7 +160,9 @@
* <object class="GtkButton" id="button_cancel"/>
* </child>
* <child type="action">
* <object class="GtkButton" id="button_ok"/>
* <object class="GtkButton" id="button_ok">
* <property name="can-default">True</property>
* </object>
* </child>
* <action-widgets>
* <action-widget response="cancel">button_cancel</action-widget>
+19
View File
@@ -62,6 +62,8 @@ static void gtk_drag_source_site_destroy (gpointer data);
static GtkDragSourceInfo *gtk_drag_get_source_info (GdkDragContext *context,
gboolean create);
static void gtk_drag_drop_finished (GtkDragSourceInfo *info);
extern GdkDragContext *gdk_quartz_drag_source_context (); /* gdk/quartz/gdkdnd-quartz.c */
struct _GtkDragSourceSite
@@ -1383,6 +1385,23 @@ gtk_drag_begin (GtkWidget *widget,
}
/**
* gtk_drag_cancel:
* @context: a #GdkDragContext, as e.g. returned by gtk_drag_begin_with_coordinates()
*
*/
void
gtk_drag_cancel (GdkDragContext *context)
{
GtkDragSourceInfo *info;
g_return_if_fail (GDK_IS_DRAG_CONTEXT (context));
info = gtk_drag_get_source_info (context, FALSE);
if (info != NULL)
gtk_drag_drop_finished (info);
}
static gboolean
gtk_drag_source_event_cb (GtkWidget *widget,
GdkEvent *event,
+40 -16
View File
@@ -228,6 +228,8 @@ static gboolean gtk_drag_dest_drop (GtkWidget *widget,
gint x,
gint y,
guint time);
static void gtk_drag_dest_set_widget (GtkDragDestInfo *info,
GtkWidget *widget);
static GtkDragDestInfo * gtk_drag_get_dest_info (GdkDragContext *context,
gboolean create);
@@ -1638,7 +1640,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
if (info->widget)
{
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
info->widget = NULL;
gtk_drag_dest_set_widget (info, NULL);
}
break;
@@ -1658,7 +1660,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
if (info->widget)
{
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
info->widget = NULL;
gtk_drag_dest_set_widget (info, NULL);
}
}
@@ -1690,7 +1692,7 @@ _gtk_drag_dest_handle_event (GtkWidget *toplevel,
if (info->widget && !found)
{
gtk_drag_dest_leave (info->widget, context, event->dnd.time);
info->widget = NULL;
gtk_drag_dest_set_widget (info, NULL);
}
/* Send a reply.
@@ -1918,15 +1920,12 @@ gtk_drag_find_widget (GtkWidget *widget,
found = callback (widget, context, x, y, time);
/* If so, send a "drag-leave" to the last widget */
if (found)
if (found && info->widget != widget)
{
if (info->widget && info->widget != widget)
{
gtk_drag_dest_leave (info->widget, context, time);
}
if (info->widget)
gtk_drag_dest_leave (info->widget, context, time);
info->widget = widget;
g_object_add_weak_pointer (G_OBJECT (widget), (gpointer *) &info->widget);
gtk_drag_dest_set_widget (info, widget);
}
}
@@ -2008,9 +2007,26 @@ gtk_drag_proxy_begin (GtkWidget *widget,
dest_info->proxy_source = source_info;
}
static void
gtk_drag_dest_set_widget (GtkDragDestInfo *info,
GtkWidget *widget)
{
if (info->widget)
g_object_remove_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
info->widget = widget;
if (info->widget)
g_object_add_weak_pointer (G_OBJECT (info->widget), (gpointer *) &info->widget);
}
static void
gtk_drag_dest_info_destroy (gpointer data)
{
GtkDragDestInfo *info = (GtkDragDestInfo *)data;
gtk_drag_dest_set_widget (info, NULL);
g_slice_free (GtkDragDestInfo, data);
}
@@ -2515,7 +2531,11 @@ gtk_drag_begin_internal (GtkWidget *widget,
* not have set one.
*/
if (!info->icon_window && !info->icon_helper)
info->icon_helper = gtk_drag_source_site_get_icon_helper (site);
{
info->icon_helper = gtk_drag_source_site_get_icon_helper (site);
set_icon_helper (info->context, info->icon_helper,
0, 0, TRUE);
}
/* We need to composite the icon into the cursor, if we are
* not using an icon window.
@@ -2574,7 +2594,8 @@ gtk_drag_begin_internal (GtkWidget *widget,
* source can provide the data
* @actions: A bitmask of the allowed drag actions for this drag
* @button: The button the user clicked to start the drag
* @event: The event that triggered the start of the drag
* @event: (nullable): The event that triggered the start of the drag,
* or %NULL if none can be obtained.
* @x: The initial x coordinate to start dragging from, in the coordinate space
* of @widget. If -1 is passed, the coordinates are retrieved from @event or
* the current pointer position
@@ -2636,7 +2657,8 @@ gtk_drag_begin_with_coordinates (GtkWidget *widget,
* source can provide the data
* @actions: A bitmask of the allowed drag actions for this drag
* @button: The button the user clicked to start the drag
* @event: The event that triggered the start of the drag
* @event: (nullable): The event that triggered the start of the drag,
* or %NULL if none can be obtained.
*
* This function is equivalent to gtk_drag_begin_with_coordinates(),
* passing -1, -1 as coordinates.
@@ -3199,10 +3221,11 @@ set_icon_helper (GdkDragContext *context,
info = gtk_drag_get_source_info (context, FALSE);
if (helper)
g_object_ref (helper);
if (info->icon_helper)
g_object_unref (info->icon_helper);
info->icon_helper = g_object_ref (helper);
info->icon_helper = helper;
gtk_drag_set_icon_window (context, NULL, hot_x, hot_y, TRUE);
}
else
@@ -3982,6 +4005,7 @@ gtk_drag_remove_icon (GtkDragSourceInfo *info)
if (info->icon_window)
{
gtk_widget_hide (info->icon_window);
gtk_widget_set_opacity (info->icon_window, 1.0);
if (info->destroy_icon)
gtk_widget_destroy (info->icon_window);
@@ -4477,7 +4501,7 @@ gtk_drag_check_threshold (GtkWidget *widget,
}
/**
* gtk_drag_cancel:
* gtk_drag_cancel: (method)
* @context: a #GdkDragContext, as e.g. returned by gtk_drag_begin_with_coordinates()
*
* Cancels an ongoing drag operation on the source side.
+27 -10
View File
@@ -230,6 +230,7 @@ struct _GtkEntryPrivate
guint cursor_handle_dragged : 1;
guint selection_handle_dragged : 1;
guint populate_all : 1;
guint handling_key_event : 1;
};
struct _EntryIconInfo
@@ -3195,7 +3196,6 @@ realize_icon_info (GtkWidget *widget,
GDK_BUTTON_RELEASE_MASK |
GDK_BUTTON1_MOTION_MASK |
GDK_BUTTON3_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK |
GDK_POINTER_MOTION_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_LEAVE_NOTIFY_MASK);
@@ -3314,7 +3314,6 @@ gtk_entry_realize (GtkWidget *widget)
GDK_BUTTON_RELEASE_MASK |
GDK_BUTTON1_MOTION_MASK |
GDK_BUTTON3_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK |
GDK_POINTER_MOTION_MASK |
GDK_ENTER_NOTIFY_MASK |
GDK_LEAVE_NOTIFY_MASK);
@@ -4840,6 +4839,9 @@ gtk_entry_key_press (GtkWidget *widget,
{
GtkEntry *entry = GTK_ENTRY (widget);
GtkEntryPrivate *priv = entry->priv;
gboolean retval = FALSE;
priv->handling_key_event = TRUE;
gtk_entry_reset_blink_time (entry);
gtk_entry_pend_cursor_blink (entry);
@@ -4854,9 +4856,9 @@ gtk_entry_key_press (GtkWidget *widget,
{
if (gtk_im_context_filter_keypress (priv->im_context, event))
{
gtk_entry_obscure_mouse_cursor (entry);
priv->need_im_reset = TRUE;
return TRUE;
retval = TRUE;
goto out;
}
}
@@ -4867,14 +4869,19 @@ gtk_entry_key_press (GtkWidget *widget,
gtk_entry_reset_im_context (entry);
if (GTK_WIDGET_CLASS (gtk_entry_parent_class)->key_press_event (widget, event))
/* Activate key bindings
*/
return TRUE;
{
/* Activate key bindings */
retval = TRUE;
goto out;
}
if (!priv->editable && event->length)
gtk_widget_error_bell (widget);
return FALSE;
out:
priv->handling_key_event = FALSE;
return retval;
}
static gint
@@ -4883,17 +4890,25 @@ gtk_entry_key_release (GtkWidget *widget,
{
GtkEntry *entry = GTK_ENTRY (widget);
GtkEntryPrivate *priv = entry->priv;
gboolean retval = FALSE;
priv->handling_key_event = TRUE;
if (priv->editable)
{
if (gtk_im_context_filter_keypress (priv->im_context, event))
{
priv->need_im_reset = TRUE;
return TRUE;
retval = TRUE;
goto out;
}
}
return GTK_WIDGET_CLASS (gtk_entry_parent_class)->key_release_event (widget, event);
retval = GTK_WIDGET_CLASS (gtk_entry_parent_class)->key_release_event (widget, event);
out:
priv->handling_key_event = FALSE;
return retval;
}
static gint
@@ -5471,6 +5486,8 @@ buffer_notify_text (GtkEntryBuffer *buffer,
GParamSpec *spec,
GtkEntry *entry)
{
if (entry->priv->handling_key_event)
gtk_entry_obscure_mouse_cursor (entry);
gtk_entry_recompute (entry);
emit_changed (entry);
g_object_notify (G_OBJECT (entry), "text");
+17 -8
View File
@@ -1343,6 +1343,9 @@ gtk_entry_completion_insert_action (GtkEntryCompletion *completion,
* with text @text. If you want the action item to have markup, use
* gtk_entry_completion_insert_action_markup().
*
* Note that @index_ is a relative position in the list of actions and
* the position of an action can change when deleting a different action.
*
* Since: 2.4
*/
void
@@ -1385,6 +1388,9 @@ gtk_entry_completion_insert_action_markup (GtkEntryCompletion *completion,
*
* Deletes the action at @index_ from @completions action list.
*
* Note that @index_ is a relative position and the position of an
* action may have changed since it was inserted.
*
* Since: 2.4
*/
void
@@ -1654,15 +1660,18 @@ gtk_entry_completion_popup (GtkEntryCompletion *completion)
gtk_widget_show (completion->priv->popup_window);
gtk_device_grab_add (completion->priv->popup_window, completion->priv->device, TRUE);
gdk_device_grab (completion->priv->device, gtk_widget_get_window (completion->priv->popup_window),
GDK_OWNERSHIP_WINDOW, TRUE,
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_MASK,
NULL, GDK_CURRENT_TIME);
if (completion->priv->device)
{
gtk_device_grab_add (completion->priv->popup_window, completion->priv->device, TRUE);
gdk_device_grab (completion->priv->device, gtk_widget_get_window (completion->priv->popup_window),
GDK_OWNERSHIP_WINDOW, TRUE,
GDK_BUTTON_PRESS_MASK |
GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_MASK,
NULL, GDK_CURRENT_TIME);
completion->priv->has_grab = TRUE;
completion->priv->has_grab = TRUE;
}
}
void
+1 -1
View File
@@ -270,7 +270,7 @@ typedef enum
* @GTK_MESSAGE_WARNING: Non-fatal warning message
* @GTK_MESSAGE_QUESTION: Question requiring a choice
* @GTK_MESSAGE_ERROR: Fatal error message
* @GTK_MESSAGE_OTHER: None of the above, doesnt get an icon
* @GTK_MESSAGE_OTHER: None of the above
*
* The type of message being displayed in the dialog.
*/
+4 -3
View File
@@ -1033,11 +1033,12 @@ gtk_file_chooser_button_destroy (GtkWidget *widget)
priv->dialog = NULL;
}
if (priv->model && gtk_tree_model_get_iter_first (priv->model, &iter)) do
if (priv->model && gtk_tree_model_get_iter_first (priv->model, &iter))
{
model_free_row_data (button, &iter);
do
model_free_row_data (button, &iter);
while (gtk_tree_model_iter_next (priv->model, &iter));
}
while (gtk_tree_model_iter_next (priv->model, &iter));
if (priv->dnd_select_folder_cancellable)
{
+6 -7
View File
@@ -3439,7 +3439,11 @@ set_busy_cursor (GtkFileChooserWidget *impl,
display = gtk_widget_get_display (widget);
if (busy)
cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
{
cursor = gdk_cursor_new_from_name (display, "left_ptr_watch");
if (cursor == NULL)
cursor = gdk_cursor_new_for_display (display, GDK_WATCH);
}
else
cursor = NULL;
@@ -5882,7 +5886,6 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
gboolean is_well_formed, is_empty, is_file_part_empty;
gboolean is_folder;
GtkFileChooserEntry *entry;
GError *error;
save_entry:
@@ -5931,7 +5934,6 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
g_assert (file != NULL);
error = NULL;
if (is_folder)
{
if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
@@ -5977,9 +5979,6 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
data);
set_busy_cursor (impl, TRUE);
if (error != NULL)
g_error_free (error);
}
g_object_unref (file);
@@ -6541,7 +6540,7 @@ recent_start_loading (GtkFileChooserWidget *impl)
load_data->items = NULL;
/* begin lazy loading the recent files into the model */
priv->load_recent_id = gdk_threads_add_idle_full (G_PRIORITY_HIGH_IDLE + 30,
priv->load_recent_id = gdk_threads_add_idle_full (G_PRIORITY_DEFAULT,
recent_idle_load,
load_data,
recent_idle_cleanup);
+37 -15
View File
@@ -46,6 +46,7 @@
#include "gtktreeselection.h"
#include "gtktreeview.h"
#include "gtkwidget.h"
#include "gtksettings.h"
/**
* SECTION:gtkfontchooserwidget
@@ -95,6 +96,8 @@ struct _GtkFontChooserWidgetPrivate
GtkFontFilterFunc filter_func;
gpointer filter_data;
GDestroyNotify filter_data_destroy;
guint last_fontconfig_timestamp;
};
/* This is the initial fixed height and the top padding of the preview entry */
@@ -377,34 +380,24 @@ static PangoFontDescription *
tree_model_get_font_description (GtkTreeModel *model,
GtkTreeIter *iter)
{
PangoFontDescription *desc;
PangoFontDescription *desc, *face_desc;
PangoFontFace *face;
GtkTreeIter child_iter;
gtk_tree_model_get (model, iter,
FONT_DESC_COLUMN, &desc,
-1);
if (desc != NULL)
if (pango_font_description_get_set_fields (desc) != 0)
return desc;
gtk_tree_model_get (model, iter,
FACE_COLUMN, &face,
-1);
desc = pango_font_face_describe (face);
face_desc = pango_font_face_describe (face);
g_object_unref (face);
if (GTK_IS_TREE_MODEL_FILTER (model))
{
gtk_tree_model_filter_convert_iter_to_child_iter (GTK_TREE_MODEL_FILTER (model),
&child_iter,
iter);
iter = &child_iter;
model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (model));
}
pango_font_description_merge (desc, face_desc, TRUE);
gtk_list_store_set (GTK_LIST_STORE (model), iter,
FONT_DESC_COLUMN, desc,
-1);
pango_font_description_free (face_desc);
return desc;
}
@@ -633,6 +626,21 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser)
gint n_families, i;
PangoFontFamily **families;
gchar *family_and_face;
guint fontconfig_timestamp;
g_object_get (gtk_widget_get_settings (GTK_WIDGET (fontchooser)),
"gtk-fontconfig-timestamp", &fontconfig_timestamp,
NULL);
/* The fontconfig timestamp is only set on systems with fontconfig; every
* other platform will set it to 0. For those systems, we fall back to
* reloading the fonts every time.
*/
if (fontconfig_timestamp != 0 &&
priv->last_fontconfig_timestamp == fontconfig_timestamp)
return;
priv->last_fontconfig_timestamp = fontconfig_timestamp;
list_store = GTK_LIST_STORE (priv->model);
@@ -658,19 +666,23 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser)
for (j = 0; j < n_faces; j++)
{
PangoFontDescription *empty_font_desc;
const gchar *face_name;
face_name = pango_font_face_get_face_name (faces[j]);
family_and_face = g_strconcat (fam_name, " ", face_name, NULL);
empty_font_desc = pango_font_description_new ();
gtk_list_store_insert_with_values (list_store, &iter, -1,
FAMILY_COLUMN, families[i],
FACE_COLUMN, faces[j],
FONT_DESC_COLUMN, empty_font_desc,
PREVIEW_TITLE_COLUMN, family_and_face,
-1);
g_free (family_and_face);
pango_font_description_free (empty_font_desc);
}
g_free (faces);
@@ -936,10 +948,20 @@ gtk_font_chooser_widget_screen_changed (GtkWidget *widget,
GdkScreen *previous_screen)
{
GtkFontChooserWidget *fontchooser = GTK_FONT_CHOOSER_WIDGET (widget);
GtkSettings *settings;
if (GTK_WIDGET_CLASS (gtk_font_chooser_widget_parent_class)->screen_changed)
GTK_WIDGET_CLASS (gtk_font_chooser_widget_parent_class)->screen_changed (widget, previous_screen);
if (previous_screen)
{
settings = gtk_settings_get_for_screen (previous_screen);
g_signal_handlers_disconnect_by_func (settings, gtk_font_chooser_widget_load_fonts, widget);
}
settings = gtk_widget_get_settings (widget);
g_signal_connect_object (settings, "notify::gtk-fontconfig-timestamp",
G_CALLBACK (gtk_font_chooser_widget_load_fonts), widget, G_CONNECT_SWAPPED);
if (previous_screen == NULL)
previous_screen = gdk_screen_get_default ();
+5 -1
View File
@@ -329,7 +329,7 @@ _find_widget_window (GtkGesture *gesture,
widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
while (window)
while (window && !gdk_window_is_destroyed (window))
{
gdk_window_get_user_data (window, (gpointer*) &window_widget);
@@ -354,6 +354,10 @@ _update_widget_coordinates (GtkGesture *gesture,
gint wx, wy, x, y;
event_widget = gtk_get_event_widget (data->event);
if (!event_widget)
return;
widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
event_widget_window = gtk_widget_get_window (event_widget);
gdk_event_get_coords (data->event, &event_x, &event_y);
+2
View File
@@ -169,6 +169,8 @@ gtk_gesture_single_handle_event (GtkEventController *controller,
button = event->button.button;
break;
case GDK_MOTION_NOTIFY:
if (!gtk_gesture_handles_sequence (GTK_GESTURE (controller), sequence))
return FALSE;
if (priv->touch_only && !test_touchscreen && source != GDK_SOURCE_TOUCHSCREEN)
return FALSE;
+53 -4
View File
@@ -91,7 +91,46 @@
*
* If you need to initialize OpenGL state, e.g. buffer objects or
* shaders, you should use the #GtkWidget::realize signal; you
* can use the #GtkWidget::unrealize signal to clean up.
* can use the #GtkWidget::unrealize signal to clean up. Since the
* #GdkGLContext creation and initialization may fail, you will
* need to check for errors, using gtk_gl_area_get_error(). An example
* of how to safely initialize the GL state is:
*
* |[<!-- language="C" -->
* static void
* on_realize (GtkGLarea *area)
* {
* // We need to make the context current if we want to
* // call GL API
* gtk_gl_area_make_current (area);
*
* // If there were errors during the initialization or
* // when trying to make the context current, this
* // function will return a #GError for you to catch
* if (gtk_gl_area_get_error (area) != NULL)
* return;
*
* // You can also use gtk_gl_area_set_error() in order
* // to show eventual initialization errors on the
* // GtkGLArea widget itself
* GError *internal_error = NULL;
* init_buffer_objects (&error);
* if (error != NULL)
* {
* gtk_gl_area_set_error (area, error);
* g_error_free (error);
* return;
* }
*
* init_shaders (&error);
* if (error != NULL)
* {
* gtk_gl_area_set_error (area, error);
* g_error_free (error);
* return;
* }
* }
* ]|
*
* If you need to change the options for creating the #GdkGLContext
* you should use the #GtkGLArea::create-context signal.
@@ -448,6 +487,11 @@ gtk_gl_area_attach_buffers (GtkGLArea *area)
{
GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area);
g_return_if_fail (GTK_IS_GL_AREA (area));
if (priv->context == NULL)
return;
gtk_gl_area_make_current (area);
if (!priv->have_buffers)
@@ -631,6 +675,9 @@ gtk_gl_area_draw (GtkWidget *widget,
return FALSE;
}
if (priv->context == NULL)
return FALSE;
gtk_gl_area_make_current (area);
gtk_gl_area_attach_buffers (area);
@@ -837,10 +884,12 @@ gtk_gl_area_class_init (GtkGLAreaClass *klass)
GDK_TYPE_GL_CONTEXT);
/**
* GtkGLArea::resized:
* GtkGLArea::resize:
* @area: the #GtkGLArea that emitted the signal
* @width: the width of the viewport
* @height: the height of the viewport
*
* The ::resized signal is emitted once when the widget is realized, and
* The ::resize signal is emitted once when the widget is realized, and
* then each time the widget is changed while realized. This is useful
* in order to keep GL state up to date with the widget size, like for
* instance camera properties which may depend on the width/height ratio.
@@ -1301,6 +1350,6 @@ gtk_gl_area_make_current (GtkGLArea *area)
g_return_if_fail (gtk_widget_get_realized (widget));
if (priv->context)
if (priv->context != NULL)
gdk_gl_context_make_current (priv->context);
}
+2
View File
@@ -55,6 +55,8 @@ struct _GtkGLArea
/**
* GtkGLAreaClass:
* @render: class closure for the #GtkGLArea::render signal
* @resize: class closeure for the #GtkGLArea::resize signal
* @create_context: class closure for the #GtkGLArea::create-context signal
*
* The `GtkGLAreaClass` structure contains only private data.
*
+5 -2
View File
@@ -1127,8 +1127,11 @@ gtk_grid_request_sum (GtkGridRequest *request,
nat -= linedata->spacing;
}
*minimum = min;
*natural = nat;
if (minimum)
*minimum = min;
if (natural)
*natural = nat;
}
/* Computes minimum and natural fields of lines.
+31
View File
@@ -1812,6 +1812,36 @@ gtk_header_bar_unrealize (GtkWidget *widget)
GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->unrealize (widget);
}
static gboolean
window_state_changed (GtkWidget *window,
GdkEventWindowState *event,
gpointer data)
{
GtkHeaderBar *bar = GTK_HEADER_BAR (data);
if (event->changed_mask & (GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_MAXIMIZED | GDK_WINDOW_STATE_TILED))
_gtk_header_bar_update_window_buttons (bar);
return FALSE;
}
static void
gtk_header_bar_hierarchy_changed (GtkWidget *widget,
GtkWidget *previous_toplevel)
{
GtkWidget *toplevel;
toplevel = gtk_widget_get_toplevel (widget);
if (previous_toplevel)
g_signal_handlers_disconnect_by_func (previous_toplevel,
window_state_changed, widget);
if (toplevel)
g_signal_connect_after (toplevel, "window-state-event",
G_CALLBACK (window_state_changed), widget);
}
static void
gtk_header_bar_class_init (GtkHeaderBarClass *class)
{
@@ -1831,6 +1861,7 @@ gtk_header_bar_class_init (GtkHeaderBarClass *class)
widget_class->draw = gtk_header_bar_draw;
widget_class->realize = gtk_header_bar_realize;
widget_class->unrealize = gtk_header_bar_unrealize;
widget_class->hierarchy_changed = gtk_header_bar_hierarchy_changed;
container_class->add = gtk_header_bar_add;
container_class->remove = gtk_header_bar_remove;
+1 -1
View File
@@ -876,7 +876,7 @@ _gtk_icon_helper_get_size (GtkIconHelper *self,
width = gdk_pixbuf_animation_get_width (self->priv->animation);
height = gdk_pixbuf_animation_get_height (self->priv->animation);
}
else if (self->priv->icon_size != -1)
else if (self->priv->icon_size != GTK_ICON_SIZE_INVALID)
{
ensure_icon_size (self, context, &width, &height);
}
+23 -14
View File
@@ -264,7 +264,8 @@ struct _GtkIconInfo
SymbolicPixbufCache *symbolic_pixbuf_cache;
gint symbolic_size;
gint symbolic_width;
gint symbolic_height;
};
typedef struct
@@ -1157,8 +1158,7 @@ insert_theme (GtkIconTheme *icon_theme,
{
theme_file = g_key_file_new ();
g_key_file_set_list_separator (theme_file, ',');
g_key_file_load_from_file (theme_file, path, 0, &error);
if (error)
if (!g_key_file_load_from_file (theme_file, path, 0, &error))
{
g_key_file_free (theme_file);
theme_file = NULL;
@@ -3469,7 +3469,8 @@ icon_info_dup (GtkIconInfo *icon_info)
dup->is_resource = icon_info->is_resource;
dup->min_size = icon_info->min_size;
dup->max_size = icon_info->max_size;
dup->symbolic_size = icon_info->symbolic_size;
dup->symbolic_width = icon_info->symbolic_width;
dup->symbolic_height = icon_info->symbolic_height;
return dup;
}
@@ -4097,7 +4098,7 @@ load_icon_thread (GTask *task,
{
GtkIconInfo *dup = task_data;
icon_info_ensure_scale_and_pixbuf (dup);
(void)icon_info_ensure_scale_and_pixbuf (dup);
g_task_return_pointer (task, NULL, NULL);
}
@@ -4408,9 +4409,11 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
gchar *css_warning;
gchar *css_error;
gchar *data;
gchar *size;
gchar *width;
gchar *height;
gchar *file_data, *escaped_file_data;
gsize file_len;
gint symbolic_size;
double alpha;
gchar alphastr[G_ASCII_DTOSTR_BUF_SIZE];
@@ -4441,7 +4444,8 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
if (!icon_info_ensure_scale_and_pixbuf (icon_info))
return NULL;
if (icon_info->symbolic_size == 0)
if (icon_info->symbolic_width == 0 ||
icon_info->symbolic_height == 0)
{
/* Fetch size from the original icon */
stream = g_memory_input_stream_new_from_data (file_data, file_len, NULL);
@@ -4451,22 +4455,26 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
if (!pixbuf)
return NULL;
icon_info->symbolic_size = MAX (gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf));
icon_info->symbolic_width = gdk_pixbuf_get_width (pixbuf);
icon_info->symbolic_height = gdk_pixbuf_get_height (pixbuf);
g_object_unref (pixbuf);
}
symbolic_size = MAX (icon_info->symbolic_width, icon_info->symbolic_height);
GTK_NOTE (ICONTHEME,
if (icon_info->dir_type == ICON_THEME_DIR_UNTHEMED)
g_print ("Symbolic icon %s is not in an icon theme directory",
icon_info->key.icon_names ? icon_info->key.icon_names[0] : icon_info->filename);
else if (icon_info->dir_size * icon_info->dir_scale != icon_info->symbolic_size)
else if (icon_info->dir_size * icon_info->dir_scale != symbolic_size)
g_print ("Symbolic icon %s of size %d is in an icon theme directory of size %d",
icon_info->key.icon_names ? icon_info->key.icon_names[0] : icon_info->filename,
icon_info->symbolic_size,
symbolic_size,
icon_info->dir_size * icon_info->dir_scale)
);
size = g_strdup_printf ("%d", icon_info->symbolic_size);
width = g_strdup_printf ("%d", icon_info->symbolic_width);
height = g_strdup_printf ("%d", icon_info->symbolic_height);
escaped_file_data = g_markup_escape_text (file_data, file_len);
g_free (file_data);
@@ -4477,8 +4485,8 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
"<svg version=\"1.1\"\n"
" xmlns=\"http://www.w3.org/2000/svg\"\n"
" xmlns:xi=\"http://www.w3.org/2001/XInclude\"\n"
" width=\"", size, "\"\n"
" height=\"", size, "\">\n"
" width=\"", width, "\"\n"
" height=\"", height, "\">\n"
" <style type=\"text/css\">\n"
" rect,path {\n"
" fill: ", css_fg," !important;\n"
@@ -4501,7 +4509,8 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
g_free (css_warning);
g_free (css_error);
g_free (css_success);
g_free (size);
g_free (width);
g_free (height);
stream = g_memory_input_stream_new_from_data (data, -1, g_free);
pixbuf = gdk_pixbuf_new_from_stream_at_scale (stream,
+2 -2
View File
@@ -1015,8 +1015,6 @@ gtk_image_set_from_resource (GtkImage *image,
return;
}
priv->resource_path = g_strdup (resource_path);
if (gdk_pixbuf_animation_is_static_image (animation))
gtk_image_set_from_pixbuf (image, gdk_pixbuf_animation_get_static_image (animation));
else
@@ -1024,6 +1022,8 @@ gtk_image_set_from_resource (GtkImage *image,
_gtk_icon_helper_set_pixbuf_scale (priv->icon_helper, scale_factor);
priv->resource_path = g_strdup (resource_path);
g_object_notify (G_OBJECT (image), "resource");
g_object_unref (animation);
+2 -3
View File
@@ -5357,10 +5357,9 @@ gtk_label_create_window (GtkLabel *label)
GDK_BUTTON_RELEASE_MASK |
GDK_LEAVE_NOTIFY_MASK |
GDK_BUTTON_MOTION_MASK |
GDK_POINTER_MOTION_MASK |
GDK_POINTER_MOTION_HINT_MASK;
GDK_POINTER_MOTION_MASK;
attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_NOREDIR;
if (gtk_widget_is_sensitive (widget) && priv->select_info && priv->select_info->selectable)
if (gtk_widget_is_sensitive (widget) && priv->select_info->selectable)
{
attributes.cursor = gdk_cursor_new_for_display (gtk_widget_get_display (widget),
GDK_XTERM);
+39 -9
View File
@@ -948,8 +948,10 @@ gtk_list_box_set_adjustment (GtkListBox *box,
GtkListBoxPrivate *priv = BOX_PRIV (box);
g_return_if_fail (GTK_IS_LIST_BOX (box));
g_return_if_fail (adjustment == NULL || GTK_IS_ADJUSTMENT (adjustment));
g_object_ref_sink (adjustment);
if (adjustment)
g_object_ref_sink (adjustment);
if (priv->adjustment)
g_object_unref (priv->adjustment);
priv->adjustment = adjustment;
@@ -974,20 +976,37 @@ gtk_list_box_get_adjustment (GtkListBox *box)
return BOX_PRIV (box)->adjustment;
}
static void
adjustment_changed (GObject *object,
GParamSpec *pspec,
gpointer data)
{
GtkAdjustment *adjustment;
adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (object));
gtk_list_box_set_adjustment (GTK_LIST_BOX (data), adjustment);
}
static void
gtk_list_box_parent_set (GtkWidget *widget,
GtkWidget *prev_parent)
{
GtkWidget *parent;
GtkAdjustment *adjustment;
parent = gtk_widget_get_parent (widget);
if (prev_parent && GTK_IS_SCROLLABLE (prev_parent))
g_signal_handlers_disconnect_by_func (prev_parent,
G_CALLBACK (adjustment_changed), widget);
if (parent && GTK_IS_SCROLLABLE (parent))
{
adjustment = gtk_scrollable_get_vadjustment (GTK_SCROLLABLE (parent));
gtk_list_box_set_adjustment (GTK_LIST_BOX (widget), adjustment);
adjustment_changed (G_OBJECT (parent), NULL, widget);
g_signal_connect (parent, "notify::vadjustment",
G_CALLBACK (adjustment_changed), widget);
}
else
gtk_list_box_set_adjustment (GTK_LIST_BOX (widget), NULL);
}
/**
@@ -2177,9 +2196,9 @@ gtk_list_box_update_header (GtkListBox *box,
return;
row = g_sequence_get (iter);
g_object_ref (row);
before_iter = gtk_list_box_get_previous_visible (box, iter);
if (row)
g_object_ref (row);
before_row = NULL;
if (before_iter != NULL)
{
@@ -2227,8 +2246,7 @@ gtk_list_box_update_header (GtkListBox *box,
}
if (before_row)
g_object_unref (before_row);
if (row)
g_object_unref (row);
g_object_unref (row);
}
static void
@@ -3044,7 +3062,7 @@ gtk_list_box_row_draw (GtkWidget *widget,
GTK_WIDGET_CLASS (gtk_list_box_row_parent_class)->draw (widget, cr);
return TRUE;
return GDK_EVENT_PROPAGATE;
}
static void
@@ -3610,9 +3628,21 @@ gtk_list_box_bound_model_changed (GListModel *list,
item = g_list_model_get_item (list, position + i);
widget = priv->create_widget_func (item, priv->create_widget_func_data);
/* We allow the create_widget_func to either return a full
* reference or a floating reference. If we got the floating
* reference, then turn it into a full reference now. That means
* that gtk_list_box_insert() will take another full reference.
* Finally, we'll release this full reference below, leaving only
* the one held by the box.
*/
if (g_object_is_floating (widget))
g_object_ref_sink (widget);
gtk_widget_show_all (widget);
gtk_list_box_insert (box, widget, position + i);
g_object_unref (widget);
g_object_unref (item);
}
}

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