Compare commits

...

720 Commits

Author SHA1 Message Date
Matthias Clasen
0ef8ff7c3d 3.17.8 2015-09-02 07:15:57 -04:00
Matthias Clasen
42864bc338 Avoid some duplicate test names
GLib considers these an bug now.
2015-09-02 07:15:57 -04:00
Matthias Clasen
6064ed5181 places view: Avoid a crash in finalize
When the places view is finalized before the network loading
is finished, the async operation is cancelled, and the callback
accesses the places view while it is already in a state of
disrepair. Avoid that access.
2015-09-02 07:15:57 -04:00
Matthias Clasen
6a4e4a9fe8 places view: Spew less warnings
When running the testsuite with a local gvfs, we get a 'not supported'
error here, and the g_warning makes the test fail. Avoid that.
2015-09-02 07:15:57 -04:00
Lapo Calamandrei
b4da542980 Adwaita: sync sidebar color vars. 2015-09-02 12:06:49 +02:00
Lapo Calamandrei
4d31b2ca0d Adwaita: scales on selected list rows. 2015-09-02 11:01:08 +02:00
Jonas Ådahl
d682aed550 wayland: Don't broadcast selection owner changes
When receiving a selection or when a drag icon enter a window, it was
targeted at a specific window. Lets emit the GDK_OWNER_CHANGE event
only for this window, instead of broadcasting.

Broadcasting has some nasty side effects. For example, if there was n
GdkWindows, and one would for every "owner-change" signal handler
receive n signals about the owner being changed.

An example of where this went a bit out of hand was gnome-terminal,
which added one listener per terminal window. This meant that if
one had m number of terminal windows, each time any one would loose or
gain keyboard focus, O(m^2) owner-change events would be emitted.

https://bugzilla.gnome.org/show_bug.cgi?id=754158
2015-09-02 11:28:27 +08:00
Sebastien Lafargue
9ad6ac0b43 GtkTextView: various scroll fixes
The purpose of this patch is to fix regressions in GtkTextView
scroll behaviours due to commit d138156.
( addition of padding and margins to the view )

Adding some padding is done by, for example, in inspector css tab with:

GtkTextView {
  padding: 10px 10px 10px 10px;
}

and adding margins, by changing one of *-margin properties
( * standing for left/right/top/bottom ) or the corresponding
accessor functions.

Understand that none of these bugs are easy to trigger.
What's happened is that a old and wrong version of the code of the code
( lost in the mean time ) was pushed.

These bugs are best seen with wrap mode set to off.

The commit 8baab8f fix a first regression.

This one is about:

- Cursor going out of the view at line ends instead of being visible
  or triggering the horizontal scroll.

- Padding not displayed correctly
  when moving cursor at beginning/end of lines

- When horizontal scroll position not at left, cursor can make scroll
  by more than one character (you need left padding to see this )

- Moving the cursor arround, the rendered text can be shitted in x or y.
  ( fixed by converting adjustment float values
  to integer before calculations )

  It can be observed by going down with the cursor more
  than the view height then going up

- retval return value of _gtk_text_view_scroll_to_iter wrong in some cases

In addition, this patch re-factor priv->top_border
in screen_dest.y calculation

Of course, all GtkTextView and GtkSourceView based app were impacted
by these bugs ( gedit for example, see bug 754147 )

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

https://bugzilla.gnome.org/show_bug.cgi?id=75815
2015-09-01 22:42:23 -04:00
Matthias Clasen
90bcde5951 places sidebar: Disable 'Open' for selected rows
If the row is selected, it is already opened, so we should not
offer the Open action anymore.

https://bugzilla.gnome.org/show_bug.cgi?id=754410
2015-09-01 22:05:46 -04:00
Emmanuele Bassi
06488adc9a docs: Fix GtkSettings property stanzas
Otherwise gtk-button-images and gtk-menu-images will not be recognised
as properties.

https://bugzilla.gnome.org/show_bug.cgi?id=754421
2015-09-01 23:46:40 +01:00
Muhammet Kara
573efb7b88 Updated Turkish translation 2015-09-01 17:33:01 +00:00
Lapo Calamandrei
a9fd764b77 Adwaita: use currentColor for scale marks.
So it should work ok when used in selected items.
2015-09-01 18:52:20 +02:00
Lapo Calamandrei
30ac073dd4 Adwaita: contemplate selected insensitive items. 2015-09-01 18:43:48 +02:00
Lapo Calamandrei
c92c25b5d7 Adwaita: fix GtkPlacesSidebar styling. 2015-09-01 18:14:45 +02:00
Lapo Calamandrei
71c64aa677 Adwaita: remove unneded background from list-row 2015-09-01 16:03:02 +02:00
Lapo Calamandrei
cca97c5b0f Adwaita: remove bogus box-shadow in GtkComboBox 2015-09-01 15:47:53 +02:00
Carlos Soriano
528c576590 gtkplacessidebar: add sidebar row style
So designers can style it at their will.
2015-09-01 14:28:38 +02:00
Lapo Calamandrei
b8f4e943fe Adwaita: remove bogus @at-root from sidebar styling.
See https://bugzilla.gnome.org/show_bug.cgi?id=754292 for
details.
2015-09-01 13:30:07 +02:00
Andika Triwidada
9fa1d6dd02 Updated Indonesian translation 2015-09-01 09:05:07 +00:00
Dušan Kazik
0760261f9a Updated Slovak translation 2015-09-01 08:50:45 +00:00
Jakub Steiner
c21a16e2bc Adwaita: make focus visible in GtkColorSwatch
- use the same fg color as the selection icon
- both dark & light to use the same opacity
2015-09-01 10:17:48 +02:00
Matthias Clasen
e50c37c8a3 Revert "GtkTextView: various scroll fixes"
This reverts commit 016f6596e7.

Pushed prematurely by accident.
2015-09-01 01:04:53 -04:00
Matthias Clasen
b3a3e91f02 file chooser: Make sure places view type is known
Similar to how we handle GtkPathBar, make sure that the
type for GtkPlacesView is registered before we load the
template.

https://bugzilla.gnome.org//show_bug.cgi?id=754133
2015-09-01 01:00:46 -04:00
Matthias Clasen
48ecad844e glade: Add some more private widget types
Add GtkColorEditor and GtkPlacesView to this list, on the assumption
that all private widgets should be listed here.
2015-09-01 00:59:27 -04:00
Sebastien Lafargue
016f6596e7 GtkTextView: various scroll fixes
Due to the introduction of view's margin and padding,
some bugs in scrolling behaviour have come.
This commit fix them.

https://bugzilla.gnome.org/show_bug.cgi?id=753815
2015-08-31 23:59:34 -04:00
Balázs Úr
2aaba34f8a Updated Hungarian translation 2015-08-31 17:03:40 +00:00
Balázs Úr
db41f2c62c Updated Hungarian translation 2015-08-31 16:56:05 +00:00
Matthias Clasen
b7ad7ea918 Fix the build 2015-08-31 11:31:24 -04:00
Matthias Clasen
9326f1a57c Turn off inspector keybindings by default
This is a 'developer mode' feature, and it can and does interfere
with preexisting key bindings in some applications, so keep it
off by default in stable releases, at least.

http://bugzilla.gnome.org/show_bug.cgi?id=754115
2015-08-31 11:08:25 -04:00
Matthias Clasen
690a11b5b8 wayland: Stop key repeat on focus out
This should address the occasional 'key repeat gone wild' issue
that some people have been seeing in gnome-terminal under Wayland.

http://bugzilla.gnome.org/show_bug.cgi?id=747684
2015-08-31 11:07:00 -04:00
Matthias Clasen
77b506e22a wayland: Stop key repeat when a seat goes away
Seems unlikely, but it is the right thing to do.
2015-08-31 11:07:00 -04:00
Matthias Clasen
cfeed32c4e wayland: Trivial refactor
Break out a stop_key_repeat function instead of open-coding this
in several places.
2015-08-31 11:07:00 -04:00
Christian Hergert
04f3b52c38 textview: handle NULL cursors gracefully
Under some cases, we can get NULL back for the cursor. Simply use
g_clear_object() to handle that case gracefully.
2015-08-31 05:18:29 -07:00
Daniel Mustieles
5dff95c981 Updated Spanish translation 2015-08-31 11:07:24 +02:00
Daniel Mustieles
86aa1cb220 Updated Spanish translation 2015-08-31 11:06:47 +02:00
Jakub Steiner
4d307db13c Adwaita: rerender css
- fixes previous commit
- for some reason sass won't overwrite a confliced css
2015-08-31 10:47:01 +02:00
Jakub Steiner
c5d195ccfe Adwaita, HighContrast: day names in GtkCalendar
Ideally I'd like to mimic the treeview column-header style,
but font-weight: bold; doesn't seem to work. Making them plain
for now.

https://bugzilla.gnome.org/show_bug.cgi?id=753357
2015-08-31 10:11:27 +02:00
Kalev Lember
ed168197ab Adwaita: Fix a few typos in README 2015-08-30 21:12:35 +02:00
Piotr Drąg
17411d348e Updated Polish translation 2015-08-30 15:33:27 +02:00
Pedro Albuquerque
3cc2c9a7ca Updated Portuguese translation 2015-08-30 10:00:44 +00:00
Yosef Or Boczko
a8892b0be6 Updated Hebrew translation 2015-08-30 11:09:16 +03:00
Carlos Soriano
3cdf8fda37 gtkplacesview: don't warn for cancelled operations
This was intended to filter out cancelled operations, not
the other way around.

https://bugzilla.gnome.org/show_bug.cgi?id=754150
2015-08-30 09:47:29 +02:00
Carlos Soriano
0d93db7e68 gtkplacesview: make consistent loading state
Until now the code was not very clear about why the loading property is
needed, since we didn't forced all the async operations to mark the
view as loading. This cause that clients are not aware when the view
is busy on those situations.

For instance Nautilus uses the property for a few things, one of it
is to show a busy spinner on the tab title.

To improve the situation, mark as loading when a volume operation,
a mount operation or a connect to server operation is being performed.

https://bugzilla.gnome.org/show_bug.cgi?id=754150
2015-08-30 09:47:28 +02:00
Carlos Soriano
150bb6245c gtkplacesview: don't fetch networks if local only
We were fetching networks even on local only mode.
Avoid to do extra work if not necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=754150
2015-08-30 09:47:28 +02:00
Carlos Soriano
9fe9b78497 gtkplacesview: dont invalidate headers if not necessary
We were invalidating the headers after adding the placeholder
row, but GtkListBox already update the header of that row in that
case.

https://bugzilla.gnome.org/show_bug.cgi?id=754150
2015-08-30 09:47:28 +02:00
Carlos Soriano
03cd8e9558 gtkplacesview: don't rely on widgets on headers
We are showing a GtkSpinner on the networks header to provide feedback
to the user if we are fetching networks, therefore we have to modify
the spinner state when doing it.
However GtkListBox doesn't give guarantees about the widgets
set by gtk_list_box_set_header, and we could access an invalid
widget.

To avoid to access invalid widgets, bind the fetching networks
view property to the networks header spinner active property instead
of modifying directly the spinner in the private structure.

Not having the spinner in the private structure also makes the code
cleaner.

https://bugzilla.gnome.org/show_bug.cgi?id=754150
2015-08-30 09:47:28 +02:00
Carlos Soriano
bdb17a0890 gtkplacesview: create placeholder before fetching networks
If not we don't show the header at all.
This was an accidental removal before commiting.

https://bugzilla.gnome.org/show_bug.cgi?id=754150
2015-08-30 09:47:28 +02:00
Carlos Soriano
a427f1e82e gtkplacesview: only filter out placeholder if searching
We were filtering out placeholders if the list box filters
while not searching, which is not what we want, since placeholders
should only be hidden if the view is searching.

https://bugzilla.gnome.org/show_bug.cgi?id=754150
2015-08-30 09:47:28 +02:00
Dušan Kazik
e713faaf06 Updated Slovak translation 2015-08-30 06:51:51 +00:00
Andika Triwidada
a662c0224b Updated Indonesian translation 2015-08-30 04:35:32 +00:00
Matthias Clasen
09567d19a7 gtk-demo: Change an accel
The application demo had a "Blue" and a "Bold" menuitem both with
the Ctrl-B accel. This is confusing, since only one of them works.
Change the accelerator for bold to Ctrl-Shift-B, so they both work.
2015-08-29 18:09:58 -04:00
Matthias Clasen
b371fb09fb accel group: Make gtk_accelerator_get_default_mod_mask more lenient
Make this function harmless to call without an open display connection.
This happens during gobject introspection, which instantiates GTK+
types without calling gtk_init.
2015-08-29 18:09:58 -04:00
Dušan Kazik
e6b3805c27 Updated Slovak translation 2015-08-29 15:42:29 +00:00
Emmanuele Bassi
b8f103bfaa build: Do not call gtk_init()
It needs to open a display connection, which is obviously going to fail
miserably on any headless build machine.

Instead, we need to find where we started requiring to initialize GTK
when calling a get_type() function, and stop doing that.

This commit and commit 15cc85db29 fully
revert commit 6838861d26.
2015-08-29 14:17:37 +01:00
Emmanuele Bassi
15cc85db29 build: Do not force inclusion of gtk.h
GCC will not do the right thing, and it will just break the build when
trying to include gtk.h first.

We'll have to live with the warning from the compiler about a missing
gtk_init() — though it would be better not to have to init GTK at all to
generate the introspection data.

This commit unbreaks the build in GNOME Continuous introduced by commit
6838861d26.
2015-08-29 13:38:28 +01:00
Dušan Kazik
281e5aa45e Updated Slovak translation 2015-08-29 09:00:31 +00:00
Matthias Clasen
e8c5bc8d73 accel label: Remove unneeded spaces
Having these extra spaces in the accel string is a bit awkward,
since they will be included in text decorations such as underlines.
Removing them has no visible effect.
2015-08-29 03:12:59 -04:00
Matthias Clasen
6838861d26 Fix introspection
Calling our get_type functions without prior gtk_init() is not ok,
and causes warnings now. Avoid that by teaching g-ir-scanner to
put a gtk_init() call into its generated code.
2015-08-29 03:11:01 -04:00
Matthias Clasen
f44358b76a accel label: Allow a different font for the accelerator
We were using the .accelerator style for rendering the accel string,
but we need to explicitly set the font from this style for it to
apply.
2015-08-29 00:47:32 -04:00
Jakub Steiner
ecc5abfe3b Adwaita, HighContrast: day names in GtkCalendar
Ideally I'd like to mimic the treeview column-header style,
but font-weight: bold; doesn't seem to work. Making them plain
for now.

https://bugzilla.gnome.org/show_bug.cgi?id=753357
2015-08-28 20:14:53 -04:00
Matthias Clasen
454e7f3f21 places view: Always use the eject icon
Otherwise, we end up using different metaphors in the place view
and in the sidebar, and nobody is going to know what the disconnect
icon means in this context.

http://bugzilla.gnome.org/show_bug.cgi?id=754022
2015-08-28 16:17:40 -04:00
Matthias Clasen
ea66300cf9 wayland: Make display closing work
The code in _gdk_wayland_window_dispose was not safe against
being called twice - it would call g_hash_table_destroy twice
on the known_globals hash table, the second time operating on
freed memory. It was also leaking the list of async_roundtrips.

After fixing both of these issues, the displayclose testcase
now works on Wayland.
2015-08-28 16:15:26 -04:00
Matthias Clasen
0dc6726f02 wayland: Be more careful when destroying windows
We call gdk_wayland_window_hide_surface when the window gets
destroyed, and in this case, the frame clock might not exist
anymore.

This was showing up in the displayclose testcase.
2015-08-28 16:15:26 -04:00
Matthias Clasen
de684dac1b Trivial formatting fix 2015-08-28 16:15:26 -04:00
Matthias Clasen
578ba0f974 wayland: Don't assert non-recursing in gdk_window_destroy
While we do not have subwindows in Wayland, we do create an
artificial root window. When the display is closed, the root
window gets destroyed, causing recursing to be true for the
toplevel windows.
2015-08-28 16:15:26 -04:00
Matthias Clasen
dc79d4f50d Trivial formatting fix 2015-08-28 16:15:26 -04:00
Tom Tryfonidis
c095645437 Updated Greek translation 2015-08-28 18:37:44 +00:00
Tom Tryfonidis
0f6de214d4 Updated Greek translation 2015-08-28 18:37:03 +00:00
Lapo Calamandrei
c32fa1aa8d Adwaita: remove .list-row.activatable reset.
Since being 'activatable' istead of 'button' now that reset
is not needed anymore, the patch is pretty noisy since sass
interpreter changes, those look innocuous though.
2015-08-28 19:18:35 +02:00
Matthias Clasen
3d7d2f245f Work towards succeeding make check under Wayland
Skip tests that don't work under Wayland, such as tests for GtkPlug
and GtkSocket.
2015-08-28 13:08:23 -04:00
Matthias Clasen
aa3bf0ac14 plug/socket: Warn if used outside X11
Give a clear warning when either of these are realized on a non-X11
screen.
2015-08-28 12:48:02 -04:00
Matthias Clasen
cbe5e596af Make display test not fail under Wayland
This test really only works under X, since it relies on modifying
the DISPLAY env var.
2015-08-28 12:26:25 -04:00
Matthias Clasen
919f9b24d2 places view: Don't spew needlessly
The check here was obviously meant to filter out cancellations,
not warn for them.
2015-08-28 12:15:39 -04:00
Andika Triwidada
f14b7d303a Updated Indonesian translation 2015-08-28 13:22:19 +00:00
Christian Kirbach
b87d719b99 Updated German translation 2015-08-27 22:01:51 +00:00
Yosef Or Boczko
2bde10db29 Updated Hebrew translation 2015-08-27 23:19:12 +03:00
Benjamin Otte
34941efc3a Adwaita: Make selector more specific
A * selector applies to all widgets, so even GtkBox or GtkGrid - and
most importantly GtkListBoxRow - need to recompute their style because
of the * selector.

By using a more specific one, these common cases aren't affected
anymore.

Fixes slowdowns in gtk3-demo's listbox demo and in gnome-software.
2015-08-27 20:18:40 +02:00
Benjamin Otte
9ce91a1251 combobox: Add a special class for the button in the combobox
That way, the GTK engine doesn't think that the general .button CSS
might potentially apply to it.
And because combobox button is overly complex and stupid, it cannot be
cached.

So buttons thought they cannot ever cache anything because they might
suddenly end up inside a combobox without noticing and then they'd need
to round their corners differently. Of course they're just regular
"Remove" buttons like all the other 100s of "Remove" buttons in
gnome-software. But hey, better not cache anything for them and
recompute their CSS every time the :hover state changes on one of the
rows.
2015-08-27 20:08:15 +02:00
Benjamin Otte
dc060154e0 css: Add gtk_css_change_to_string()
Nobody is able to look up those hex values.
2015-08-27 17:22:00 +02:00
Benjamin Otte
4ebb5781ea css: Fix GtkCssChange enum
Get rid of unused values (POSITION_ENUM) and use different values for
NAME and ID.
2015-08-27 17:22:00 +02:00
Benjamin Otte
f1ca75d181 cssnode: Loosen requirements for style caching
We can actually share :first-child/:last-child related things now,
because we special case them. So the only positions we cannot cache are
nth-child/nth-last-child.

This should take care of a lot of Adwaita's styling.
2015-08-27 17:21:59 +02:00
Gábor Kelemen
2080e7318c Updated Hungarian translation 2015-08-27 15:06:37 +00:00
Jakub Steiner
f7d5d83dd0 HighContrast: GtkListBox fixes
Make flat buttons in list-rows work.
2015-08-27 11:09:39 +02:00
Pedro Albuquerque
64147dd2a8 Updated Portuguese translation 2015-08-27 09:09:20 +00:00
Matthias Clasen
407d3fae81 Adwaita: Theme calendar day names differently
Just to show how its done. This will need some tweaks.
2015-08-26 22:59:55 -04:00
Matthias Clasen
692f60ebb0 flow box: Avoid a critical in keynav
We were not taking into account that gtk_flow_box_get_next_focusable
can return NULL, in all callers. Fix that.
2015-08-26 20:00:40 -04:00
Matthias Clasen
29f5cdda10 testflowbox: Add an example with buttons
This example populates a flow box with buttons, and makes the
flow box children unfocusable, with the intention that the focus
moves directly between the buttons. Currently, keynav does not
work at all in this case.
2015-08-26 20:00:03 -04:00
Matthias Clasen
0f1c4a303e gdkgears: Add a popover
As pointed out in bug 754143, this reveals a crash in the Wayland
backend.
2015-08-26 18:26:56 -04:00
Piotr Drąg
e693069440 Updated Polish translation 2015-08-26 17:09:31 +02:00
Piotr Drąg
c75edd32ab places view row: Use proper gettext macros
P_() is meant only for property nicks and blurbs. Everything
else should use _().

Follow-up to 2d83dd6217

http://bugzilla.gnome.org/show_bug.cgi?id=754086
2015-08-26 16:45:33 +02:00
Benjamin Otte
bffeae6203 inspector: Handle object destruction without row references
This way, we can live without row references.

A side effect is that opening the inspector on the gtk-demo list box
example now only takes 0.5s instead of the previous 3 minutes.
2015-08-26 16:33:52 +02:00
Benjamin Otte
1f2bd47965 inspector: Implement find_object() without GtkTreeRowReference
Tree row references are slow to update. And we update the widget list
quite a bit, so when it grows it can get REALLY slow.
2015-08-26 15:46:07 +02:00
Benjamin Otte
c7ed2c2130 inspector: Refactor object tree construction
Instead of having lots of if statements, create a vtable. This will be
useful for the following patches.
2015-08-26 15:46:07 +02:00
Benjamin Otte
5037d134c5 window: Only update the inspector once
Instead of queueing a new idle handler every time we call
gtk_window_update_debugging(), only queue one if none is queued that.

Saves a lot of work, in particular when templates create context menus
for every row in a large listbox as in the gtk-demo listbox example.
2015-08-26 15:46:07 +02:00
Benjamin Otte
207e593075 listbox: Mark activatable rows with a .activatable style class
Do not use .button anymore.

This is for 2 reasons:
1. The styling is seperate in our themes, so it doesn't make sense to
   share the style class.
2. Due to the shared styling of .buton, listbox rows inherit all the
   special case styles that exist for buttons - such as linked buttons,
   header buttons, entry buttons, spinbutton buttons, etc. This means
   that the code has to check all these special cases all the time and
   for listbox rows, this is very slow.
2015-08-26 15:46:07 +02:00
Gábor Kelemen
0897a7a43d Updated Hungarian translation 2015-08-26 12:55:27 +00:00
Timm Bäder
571da2a8b3 Inspector: Protect against childless windows 2015-08-26 12:04:44 +02:00
Pedro Albuquerque
7051c322f4 Updated Portuguese translation 2015-08-26 05:33:35 +00:00
Matthias Clasen
2d83dd6217 places view: Use proper gettext macros
P_() is meant only for property nicks and blurbs. Everything
else should use _().

http://bugzilla.gnome.org/show_bug.cgi?id=754086
2015-08-25 23:28:56 -04:00
Chao-Hsiung Liao
b287412249 Updated Chinese (Taiwan) translation 2015-08-25 22:41:58 +00:00
Chao-Hsiung Liao
82ab8fade0 Updated Chinese (Taiwan) translation 2015-08-25 22:40:15 +00:00
Matthias Clasen
9cc41307d1 flow box: Document incompatible configurations
Explain in the docs that using a model is incompatible with
using filter or sort functions.
2015-08-25 15:54:58 -04:00
Matthias Clasen
c099859872 flow box: Warn for nonworking configurations
GtkFlowBox sort and filter functionality does not work with
models. Issue a warning in this case.
2015-08-25 15:54:58 -04:00
Matthias Clasen
808ea8645a list box: Document incompatible configurations
Explain in the docs that using a model is incompatible with
using filter or sort functions.

http://bugzilla.gnome.org/show_bug.cgi?id=752615
2015-08-25 15:54:58 -04:00
Matthias Clasen
a27309c6e4 list box: Warn for nonworking configurations
GtkListBox sort and filter functionality does not work with
models. Issue a warning in this case.

http://bugzilla.gnome.org/show_bug.cgi?id=752615
2015-08-25 15:54:58 -04:00
Matthias Clasen
a5e2256770 Fix a startup ordering problem
Defer a11y initialization until we have a display. A11y initialization
causes widget classes to be initalized, which in turn needs some
backend-specific information about modifier masks that can't be
obtained before we have a display.

https://bugzilla.gnome.org/show_bug.cgi?id=736125
2015-08-25 15:54:58 -04:00
John Ralls
c55ff6e41f Bug 736125 - The default gtk accelerator mod mask does not include all default backend modifiers 2015-08-25 15:54:58 -04:00
Timm Bäder
30d56933d4 Inspector: Make monitor rows unactivatable 2015-08-25 18:11:46 +02:00
Piotr Drąg
826ac52e43 Fix grammar in "No networks locations found" 2015-08-25 17:47:12 +02:00
Fran Dieguez
f7655fa24f Update Galician translations 2015-08-25 16:43:42 +02:00
Fran Dieguez
f004c11a29 Updated Galician translations 2015-08-25 16:29:19 +02:00
Daniel Mustieles
9e7204d332 Updated Spanish translation 2015-08-25 11:07:47 +02:00
Daniel Mustieles
fcc0f74b86 Updated Spanish translation 2015-08-25 11:07:23 +02:00
Pedro Albuquerque
d8994973ee Updated Portuguese translation 2015-08-25 06:13:59 +00:00
Pedro Albuquerque
14bcc780f4 Updated Portuguese translation 2015-08-25 06:10:53 +00:00
Benjamin Otte
df5ee78c28 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-08-24 21:28:53 +02:00
Benjamin Otte
a7f40fc0ea gtk-demo: Order tweets newest first in listbox example 2015-08-24 21:28:53 +02:00
Dušan Kazik
ca4823c250 Updated Slovak translation 2015-08-24 16:30:15 +00:00
Dušan Kazik
338d97eba1 Updated Slovak translation 2015-08-24 16:08:34 +00:00
Paolo Borelli
8e975b28ff filechooser: check if we can access the parent folder
If we manually enter an unaccessible path in the entry, e.g
"/root/foo.txt", we should receive an error saying that the
folder is not accessible instead of showing the replace
confirmation dialog.

https://bugzilla.gnome.org/show_bug.cgi?id=753969
2015-08-23 15:44:09 +02:00
Matthias Clasen
2bf97567ce Revert "gtkoverlay: Optimize size allocations"
This reverts commit 93171cf4f3.

This broke overlay controls in page 3 of widget-factory, gnome-photos,
gnome-documents, etc.
2015-08-22 15:51:42 -04:00
Matthias Clasen
1d2ff9a069 list box: Make focusable headers possible
Previously we were assuming that only list box rows could occur
as focus children of a list box, and would crash if that wasn't
the case. This commit handles this case, and integrates focusable
headers into directional keynav and the focus chain.

The typical case of using separators as headers is not affected
by this change.

https://bugzilla.gnome.org/show_bug.cgi?id=753694
2015-08-21 20:51:03 -04:00
Matthias Clasen
bff28ac6b0 GtkOverlay: Update the description
State that the overlays are placed wrt to the GtkOverlay, not
with respect to the main widget. This makes a difference for
small main widgets which are not configured to fill the entire
GtkOverlay.
2015-08-21 18:19:26 -04:00
Matthias Clasen
58f363c852 Revert "popover: Optimize the transition"
This reverts commit 84bd32a09a.

It turned out that this did break the transition in some places.
2015-08-21 18:08:30 -04:00
Carlos Soriano
00b17651b1 gtkplacesview: bail out if operation cancelled
When an operation is cancelled it's never safe to access
the object itself or the private struct, since it could be
called (and probably is) during finalize.

In case the operation is cancelled, just bail out to fix
the crashes.
2015-08-21 19:58:52 +02:00
Jordi Mas
232ab9d30d Upload Catalan translator 2015-08-21 18:21:06 +02:00
Carlos Soriano
6d0edd0056 gtkplacessidebar: order mounts by label
We were not ordering them at all, and therefore they were
jumping around

https://bugzilla.gnome.org/show_bug.cgi?id=753925
2015-08-21 15:01:22 +02:00
Carlos Soriano
d0c45f19b8 gtkplacesview: use g_utf8_collate for sorting
Also rename the variable, since we usually use location
for GFiles variables.
2015-08-21 14:49:11 +02:00
Carlos Soriano
036ba25eb1 gtkplacesview: add a loading property
So clients of the view can know if the view is busy.

https://bugzilla.gnome.org/show_bug.cgi?id=753786
2015-08-21 13:29:21 +02:00
Carlos Soriano
89a34210cb gtkplacesview: improve networks feedback
Add a spinner when networks are being fetched and make
the network section permanent and show a placeholder with
a message that no networks were found in case there are no
networks. In this way users from previous versions won't be
confused with the fact that no networks are shown.

https://bugzilla.gnome.org/show_bug.cgi?id=753786
2015-08-21 13:29:20 +02:00
Carlos Soriano
7347a69328 gtkplacesview: add networks in network:///
Previously we had a network item in the sidebar, which now
is replaced by the network section on other-locations view.
However we were not exposing the networks in network:///.

Fetch them and add them in the network section of other-locations
view.

https://bugzilla.gnome.org/show_bug.cgi?id=753786
2015-08-21 13:28:12 +02:00
Carlos Soriano
16bea59b78 gtkplacesview: style fix
https://bugzilla.gnome.org/show_bug.cgi?id=753786
2015-08-21 12:04:05 +02:00
Dušan Kazik
8891640c47 Updated Slovak translation 2015-08-21 08:55:24 +00:00
Jonas Ådahl
32cd1a7447 wayland: Only bind supported unstable pointer gestures global
As the protocol is still considered unstable (meaning not backward
compatible), we should, as stated in the protocol, only bind the version
advertised is the version we implement.

https://bugzilla.gnome.org/show_bug.cgi?id=753856
2015-08-21 10:04:02 +08:00
Benjamin Otte
8026575947 overlay: Always align widgets relative to the overlay
... not to the contained widget, which might not occupy the whole
overlay when an align mode is set.
2015-08-21 00:47:30 +02:00
Benjamin Otte
2039ab8853 overlay: Use actual size of the overlay when positioning
Previously we were using the natural requested size which is unrelated.
2015-08-21 00:47:30 +02:00
Aurimas Černius
2607aae7dd Updated Lithuanian translation 2015-08-20 23:01:41 +03:00
Christian Hergert
b37400752b 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-08-20 11:13:30 -07:00
Jordi Mas
391149fc0a Update Catalan translation 2015-08-20 19:04:10 +02:00
Benjamin Otte
c6219c913f immodule: Remove unused parameter 2015-08-20 14:42:04 +02:00
Piotr Drąg
8ed4e439e4 Updated POTFILES.skip 2015-08-20 13:01:14 +02:00
Matthias Clasen
4d9a943338 gtk-demo: Add a model button demo
This shows how to hook model buttons up to various action types,
or how to create them manually.
2015-08-19 23:18:01 -04:00
Sebastien Lafargue
8baab8f33d GtkTextView: fix margin/padding scroll behaviour
When you move line by line, only padding is
automaticly shown and you need to use Page key to show margin.

This commit also fix cursor going out of the screen bug.
2015-08-19 22:51:39 +02:00
Carlos Garnacho
25557c1c5d gdkevent: Hold refs to device/source_device
The extra reference will be held from GdkEventPrivate data, so there's
a common place to all events. Without this, events queued after devices/
capabilities disappear (eg. on TTY switch) might hold invalid pointers.
Windowing level operations on those devices (queries, grabs...) are
expected to fail at that time, but we should hold meaningful data for
the regular event handling paths.

https://bugzilla.gnome.org/show_bug.cgi?id=753185
2015-08-19 22:13:08 +02:00
Carlos Garnacho
8599f209c1 gtkscrolledwindow: Fold kinetic deceleration handling into scroll_event()
In order to play along with child widgets that use scroll events for anything
else than scrolling, it will be better to do this in the bubble phase, so
the child widget has an opportunity to GDK_EVENT_STOP the event before we
trigger kinetic scrolling.

This of course won't work for widgets that choose to reimplement scroll event
handling themselves, they should be smart at resorting to GtkScrolledWindow's
scroll event handling.

This fixes kinetic scrolling kicking in too pervasively on widgets that eg.
implement zoom on scroll events.

https://bugzilla.gnome.org/show_bug.cgi?id=753495
2015-08-19 21:54:51 +02:00
Gábor Kelemen
ee8c80a531 Updated Hungarian translation 2015-08-19 10:07:21 +00:00
Georges Basile Stavracas Neto
88edada0d9 placessidebar: set Other Locations uri
By assigning an URI to Other Locations item, we
can programaticaly select it. Fixes a bug in Nautilus,
where the Other Locations item is unselected imediately
after being clicked.
2015-08-18 19:34:21 -03:00
Matthias Clasen
24174e5528 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-08-18 15:44:45 -04:00
Paolo Borelli
9f9c5ca49a 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-08-18 15:14:42 +02:00
Daniel Mustieles
31efc4097e Updated Spanish translation 2015-08-18 13:56:26 +02:00
Daniel Mustieles
e4f36d0657 Updated Spanish translation 2015-08-18 13:56:16 +02:00
Matthias Clasen
a1b2e7c1c2 3.17.7 2015-08-17 22:16:22 -04:00
Jonas Ådahl
e1fd87728d wayland: Use g_get_prgname() to get the xdg_surface.set_app_id string
Prior to this patch, the ID of the GtkApplication was always used for
clients which were GtkApplications. This would only be guaranteed to be
correct for D-Bus activatable programs. As a result, all
non-D-Bus-activatable applications would set the wrong ID making the
shell unable to find the corresponding .desktop file.

This change makes it so that the GDK backend always uses the name
passed to g_set_prgname, or the default value if not explicitly set, as
this more often corresponds to the .desktop file.

This means that in order to make D-Bus activatable applications set the
correct application ID, they must, for now, manually call
g_set_prgname() with their application ID (basename of the .desktop
file).

If g_get_prgname() returns NULL, fallback to gdk_get_program_class()
even though it will most likely never be correct according to the
xdg_surface.set_app_id specification.

https://bugzilla.gnome.org/show_bug.cgi?id=746435
2015-08-18 08:45:12 +08:00
Carlos Soriano
af78792720 gtkplacesview: allow to cancel connection to server
We were not allowing to cancel the operation at all, and at
most the operation was cancelled only when clicked connect again.

Also due to gvfs bug 753735 we actually weren't cancelling
at all, and therefore creating multiple dialogs.
2015-08-18 01:05:20 +02:00
Georges Basile Stavracas Neto
8192a058a9 places-view: show a more verbose entry hint
As pointed out by Allan, this is not very helpful. A
call to action label fits better in this case.
2015-08-17 14:25:18 -03:00
Emmanuele Bassi
3de1bd383a flowbox: Sink the floating reference of model-based children
We don't want to leak references if the widget created to represent the
item in the model does not have a floating reference — which is usually
what happens in bindings, as they automatically sink references when
creating new instances.

See commit 6e03e7e8 for the similar change in GtkListBox.
2015-08-17 13:32:35 +01:00
Chun-wei Fan
e8063bcb21 MSVC Introspection Builds: Remove GCC Requirement
Sorry, the last commit added a generated file instead of the
template.

G-I has been updated to not require a Windows GCC installation
anymore to generate the .gir files, so update the NMake Makefiles
that are used for this purpose.

As a result, it is no longer necessary to define time_t for the .gir
generation as we are on the same compiler throughout the process.
2015-08-17 19:20:04 +08:00
Chun-wei Fan
40a1905207 Revert "MSVC Introspection Builds: Remove GCC Requirement"
This reverts commit aea7809f55.
2015-08-17 19:18:03 +08:00
Chun-wei Fan
aea7809f55 MSVC Introspection Builds: Remove GCC Requirement
G-I has been updated to not require a Windows GCC installation
anymore to generate the .gir files, so update the NMake Makefiles
that are used for this purpose.

As a result, it is no longer necessary to define time_t for the .gir
generation as we are on the same compiler throughout the process.
2015-08-17 19:11:53 +08:00
Matthias Clasen
ab09ffaa8c gtk-demo: Use top/bottom-margin for text views
This lets us replace the hack of inserting tags in the first
and last paragraph to set a above/below-paragraph space.
2015-08-17 01:40:32 -04:00
Sebastien Lafargue
d1381569fd text view: add padding and margin
Add API to set top and bottom margins, and add the CSS padding
from the theme to the programmatically set margins.

https://bugzilla.gnome.org/show_bug.cgi?id=406159
2015-08-17 01:40:32 -04:00
Fran Dieguez
825d1285e3 Updated Galician translations 2015-08-17 01:31:09 +02:00
Matthias Clasen
3d7647991a Add a test for gtk_flow_box_bind_model 2015-08-16 18:20:50 -04:00
Matthias Clasen
a777186785 Add gtk_flow_box_bind_model 2015-08-16 18:20:50 -04:00
Matthias Clasen
408358c9d9 Add a test for g_list_box_bind_model 2015-08-16 18:20:50 -04:00
Matthias Clasen
a6bb7a9a46 list box: Shorten some static function names 2015-08-16 18:12:16 -04:00
Christoph Reiter
b24ce67c46 Bump Pango requirement to 1.37.3
GTK+ now uses pango_attr_foreground_alpha_new, pango_attr_background_alpha_new,
PANGO_ATTR_FOREGROUND_ALPHA, PANGO_ATTR_BACKGROUND_ALPHA,
pango_renderer_set_alpha, pango_renderer_get_alpha, which were all added
after 1.37.2.
2015-08-16 08:25:16 +02:00
Pedro Albuquerque
b93cb76fbc Updated Portuguese translation 2015-08-16 06:10:06 +00:00
Matthias Clasen
775800f76e popover: Don't restore stale default widget
Only restore the saved default widget if the default hasn't been
changed while the popover was visible.
2015-08-15 23:38:20 -04:00
Matthias Clasen
b437f89c05 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-08-15 22:20:16 -04:00
Carlos Garnacho
02f3fe0671 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-08-15 22:11:10 -04:00
Matthias Clasen
84bd32a09a popover: Optimize the transition
There's no need to queue a resize here.

https://bugzilla.gnome.org/show_bug.cgi?id=753568
2015-08-15 22:02:40 -04:00
Matthias Clasen
0455e56517 window: Set name on idle
Use gdk_threads_add_idle, and set a name on the source to aid
debugging, as we do everywhere else.
2015-08-15 16:05:11 -04:00
Matthias Clasen
568def7a86 searc engine model: Set name on idle
Use gdk_threads_add_idle, and set a name on the source to aid
debugging, as we do everywhere else.
2015-08-15 16:04:09 -04:00
Matthias Clasen
73f1d62b68 Update release notes a bit 2015-08-15 13:40:30 -04:00
Matthias Clasen
07942446d7 Fix a thinko in GtkLabel 2015-08-15 11:24:55 -04:00
Matthias Clasen
4453c4401f Support alpha in text cell renderer colors
This is easily possible, now that Pango supports alpha.
2015-08-15 11:24:55 -04:00
Dušan Kazik
87981c8894 Updated Slovak translation 2015-08-15 09:57:23 +00:00
Matthias Clasen
0f871be508 GtkLabel: Add alpha support for buildable attributes
Make it possible to set foreground or background alpha in the
builder ui support for Pango attributes.
2015-08-14 23:42:48 -04:00
Matthias Clasen
e02acc7d71 GtkTextDisplay: Use pango renderer alpha support
We don't need to store our own copy of the colors anymore,
now that PangoRenderer can do alpha.
2015-08-14 23:42:48 -04:00
Matthias Clasen
0de600c9dd Updates 2015-08-14 21:56:58 -04:00
Ray Strode
83c25169e8 Revert "wayland: require WAYLAND_DISPLAY be set to open wayland display"
This reverts commit 35489f5d31.

It snuck in when i was trying to push

commit f4d2022d46
2015-08-14 11:24:44 -04:00
Ray Strode
f4d2022d46 wayland: change wl_log level to G_LOG_LEVEL_DEBUG
wl_log() currently logs using G_LOG_LEVEL_ERROR
(which is fatal). The wayland client library doesn't
expect this behavior. It uses wl_log to log recoverable
errors.

This commit changes the log level to G_LOG_LEVEL_DEBUG
instead.

https://bugzilla.gnome.org/show_bug.cgi?id=753635
2015-08-14 11:06:48 -04:00
Ray Strode
35489f5d31 wayland: require WAYLAND_DISPLAY be set to open wayland display
The wayland client libraries now require WAYLAND_DISPLAY be set
to use them.

See:

http://cgit.freedesktop.org/wayland/wayland/commit/?id=fb7e13021730d0a5516ecbd3712ea4235e05d24d

This commit makes _gdk_wayland_display_open bail early if
WAYLAND_DISPLAY is unset, just as it does for XDG_RUNTIME_DIR.
2015-08-14 10:28:31 -04:00
Руслан Ижбулатов
4a26366ff2 GDK W32: Add missing commas 2015-08-14 12:12:01 +00:00
Matthias Clasen
a6b52c4275 Revert "Revert "Revert "gtkwindow: Reset maximize / fullscreen_initially on state changes"""
This reverts commit 8001b2c1b3.
2015-08-12 19:35:52 -04:00
Matthias Clasen
5cea77de38 Revert "Revert "Revert "window: fix initial shadow width for maximized/fullscreen windows"""
This reverts commit 968ac90e89.
2015-08-12 19:35:10 -04:00
Matthias Clasen
8001b2c1b3 Revert "Revert "gtkwindow: Reset maximize / fullscreen_initially on state changes""
This reverts commit de2ea1ebaa.

No reason in the commit message was given for the revert, and we need
this for proper behavior on map.
2015-08-12 14:40:31 -07:00
Jasper St. Pierre
968ac90e89 Revert "Revert "window: fix initial shadow width for maximized/fullscreen windows""
This reverts commit 8b695cc727.

No reason in the commit message was given for the revert, and we need
this for proper behavior on map.
2015-08-12 14:40:20 -07:00
Carlos Garnacho
45d15b302e wayland: Implement touchpad gesture events
On wayland, the gestures protocol defines a wl_pointer_gestures global
object, that will match in number with wl_seats, swipe and pinch
interfaces can be obtained from it, which events are translated into
GdkEventTouchpadSwipe/Pinch events.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
b037d4d628 wayland: Add touchpad gestures protocol 2015-08-12 23:20:25 +02:00
Carlos Garnacho
dc77989a1c gtkgesture: Add note to gtk_gesture_get_bounding_box()
This is the only function that's will be semantically confusing
with touchpad gesture events, explain what's to be expected there.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
e55b3c6501 gtkgesture: Add touchpad gesture event bit to the controller evmask 2015-08-12 23:20:25 +02:00
Carlos Garnacho
8e5be43e02 gtkgesturedrag: Handle touchpad swipe events
These will only trigger the gesture if it's been created with
the same GtkGesture::n-points than n_fingers in the event.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
5d17338b4d gtkgestureswipe: Handle touchpad swipe events
These will only trigger the gesture if it's been created with
the same GtkGesture::n-points than n_fingers in the event.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
5f68a2877d gtkgesturerotate: Handle touchpad pinch events
We let these through in GtkEventController::filter, and handle
these especially on GtkGesture::update.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
068a844930 gtkgesturezoom: Handle touchpad pinch events
We let these through in GtkEventController::filter, and handle
these especially on GtkGesture::update.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
d756463d9b gtkgesture: Add docs blurb about touchpad gestures
Not too long though, the precautions to take are minimal.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
e736e8dcb9 gtkgesture: Accumulate touchpad events' dx/dy in point data
This will make the gesture "center" the pointer position, plus
the accumulated dx/dy throughout the gesture progress.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
4457be688d gtkgesture: Handle touchpad events
These will be mutually exclusive with touch events, so it won't
be possible to trigger gestures through mixed input and whatnot.

The accounting of touchpad events is slightly different, there
will be a single internal PointData struct, stored in the hashtable
with the NULL event sequence/key (same than pointer events in
this regard), just that the events stored will be GdkEventTouchpad*,
so will hold information about all fingers at once.

But this difference is just internal, the GtkGesture API doesn't
make explicit assumptions about the number of points (the closest
to a per-point query API is gtk_gesture_get_sequences()). All
signals emitted just contain the last changed GdkEventSequence,
and API takes GdkEventSequences, so everything is consistent with
sequence=NULL for touchpad events.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
67ae7322e9 gtkgesture: Refactor n-points querying into a single function
Along the code, we're basically asking for 1) the total count of
touchpoints, and 2) the number of active touchpoints (not denied
nor ended).

Wrap both usecases into a _gtk_gesture_get_n_physical_touchpoints(),
and replace all occurrences.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
97e67e21a1 gtkgesture: Filter out touchpad events by default.
The gestures that don't want touchpad gesture events are majority,
even those that want such events will only listen to subsets (eg.
pinch, swipe,...).

So it makes sense to ignore touchpad events by default, and let
subclasses opt those in.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
8b1c9c0687 gtkgesture: Refactor gtk_gesture_handle_event()
We'll be dealing with event types and touchpad gesture phases,
replace the switch by a battery of if/elses. Otherwise, it's
just an style change.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
3808322f80 eventcontroller: Add private ::filter method
This will be used right before handle_event() in order to filter
out events, useful to make the previous "no touchpad events" behavior
the default, and have gesture subclasses include manually the touchpad
events they handle.
2015-08-12 23:20:25 +02:00
Carlos Garnacho
777ac92862 gtkwidget: Ensure touchpad events trigger the bubbling phase
For all other events, we run the bubble phase deep in the specific
::motion/button-press/release/touch handlers.

For touchpad events, it doesn't make sense to use GtkWidgetClass
slots if the intended way to deal with these are gestures, so we
run the bubble phase directly from gtk_widget_event_internal().
2015-08-12 23:20:25 +02:00
Carlos Garnacho
6cd45af8b0 gtkmain: Handle rewriting of event fields during grabs for touchpad events
The window/coordinates will need translation in the case of touchpad gesture
events, same than with other pointer events.
2015-08-12 23:20:24 +02:00
Carlos Garnacho
5092febaf8 gdk: Proxy touchpad events through the client-side window hierarchy
This includes poking the deepmost window, checking for the
GDK_TOUCHPAD_GESTURE_MASK bit set, and translating coordinates in events
accordingly.
2015-08-12 23:20:24 +02:00
Carlos Garnacho
8c2b3930da gdk: Add GDK_TOUCHPAD_GESTURE_MASK to GdkEventMask
Users will need to manually select on this in order to receive gesture
events.
2015-08-12 23:20:24 +02:00
Carlos Garnacho
a3b402a949 gdk: Add touchpad gesture events and event types.
Each gesture type has its separate GdkEvent struct, and begin/update/
end/cancel event types.

There is support for multi-finger swipe (3-4 fingers), and 2-finger
rotate/pinch gestures.
2015-08-12 23:20:24 +02:00
Paolo Borelli
7281803169 cellrendererpixbuf: do not clear the icon helper twice
Do not call _gtk_icon_helper_clear explicitely when the properties
are set, since the corresponding _gtk_icon_helper_set_* method
already calls clear internally.
While at it rename the reset function to make it clear that it
is calling notify for the previous image type and avoid the
notification if the image type is not changing.
2015-08-12 21:40:04 +02:00
Matthias Clasen
a1332167fb color chooser: Reset show-editor on unmap
We have a testcolorchooser test, with a --edit option. It was
supposed to make the color chooser come up in edit mode, but
it didn't work ever since we dropped the ::response handler.
Fix it by resetting show-editor on unmap, instead of on map.
This way, users can set show-editor before showing the dialog,
and it will take effect.
2015-08-12 11:29:11 -04:00
David King
4a8ff565bc listbox: Describe behavior change in GtkListBoxCreateWidgetFunc
Help applicaiton authors who may already be binding GtkListBox to a
GListModel by describing the change for 3.18.

https://bugzilla.gnome.org/show_bug.cgi?id=753392
2015-08-12 12:56:05 +01:00
Daniel Mustieles
c06de97234 Updated Spanish translation 2015-08-12 09:04:05 +02:00
Daniel Mustieles
bb3bc752d2 Updated Spanish translation 2015-08-12 09:03:50 +02:00
Matthias Clasen
12e98498f6 label: Flesh out pango attribute support
A few attribute types were missing from the support:
rise, letterspacing, fallback, font features. Add support
for these.
2015-08-11 20:57:52 -04:00
Kjartan Maraas
2a03476c8f Updated Norwegian bokmål translation. 2015-08-11 19:58:17 +02:00
Daniel Mustieles
3197399fec Updated Spanish translation 2015-08-11 12:34:59 +02:00
Matthias Clasen
cf237eccbe widget-factory: Add a lock button 2015-08-10 22:43:19 -04:00
Matthias Clasen
aa9dd72e8f font chooser: Make repeated Escape cancel the dialog
The first Escape clears the search entry, the second Escape
closes the dialog.
2015-08-10 22:43:19 -04:00
Matthias Clasen
5f44339ce3 font chooser: Make the entry activate the default 2015-08-10 22:43:19 -04:00
Matthias Clasen
ecc8cd2369 font chooser: Use browse as selection mode 2015-08-10 22:43:19 -04:00
Matthias Clasen
61ffb517bc font chooser: Make Escape stop search 2015-08-10 22:43:18 -04:00
Georges Basile Stavracas Neto
e548c71394 placesview: show Disconnect instead of Eject
Since we're dealing with networks, terms like "Eject" or
the eject button are misleading, since we're not actually
ejecting but disconnecting.

Fix that by showing the appropriate icon and tooltip.
2015-08-10 15:35:56 -03:00
Georges Basile Stavracas Neto
0dff248516 placesview: sort by path
As pointed out by Cosimo, we should sort the
items according to their path.
2015-08-10 15:33:34 -03:00
Georges Basile Stavracas Neto
025f74161d placesview: plug a leak 2015-08-10 15:24:43 -03:00
Georges Basile Stavracas Neto
1219b67cdb placesview: no url for networks
We are not showing the URL of network locations
anymore, since they are distracting and not
necessary.

The code, however, forgot to cleanup the URL,
so we are still showing the URL for network
locations.

Fix that by properly cleanup the URL for network
locations.
2015-08-10 14:59:50 -03:00
Matthias Clasen
843a8791a6 Adwaita: Don't leak underlines
The .button:link .label selector matches any label "inside" a
link button. And a label inside the context menu counts as inside
for this purpose. This causes the text-decoration property to
leak into the context menu, even though the property is not
inherited. Avoid this by tightening the selector to
.button:link > .label.

https://bugzilla.gnome.org/show_bug.cgi?id=753451
2015-08-10 16:41:18 +02:00
Georges Basile Stavracas Neto
5e3d0b19b0 placesview: jumps to the default location
When we connect to a server, the default and expected
behavior is going to the default location, which usually
is the home directory or a writable directory.

GtkPlacesSidebar behaves properly, while GtkPlacesView
doesn't.

Fix that by jumping to the default locations instead of
the root location.
2015-08-10 10:42:43 -03:00
Daniel Mustieles
525732b623 Updated Spanish translation 2015-08-10 09:17:16 +02:00
Matthias Clasen
b9bced693a Remove some unused data 2015-08-09 23:39:14 +02:00
Matthias Clasen
3eb0eaffe2 Remove an unused function 2015-08-09 23:39:00 +02:00
Matthias Clasen
62dce64a48 Remove a self-assignment
clang doesn't like those.
2015-08-09 23:38:40 +02:00
Matthias Clasen
0f851be368 Fix a doc comment typo 2015-08-09 23:32:04 +02:00
Necdet Yücel
0f6781788e Updated Turkish translation 2015-08-09 15:53:28 +00:00
Pedro Albuquerque
37c09d92d2 Updated Portuguese translation 2015-08-09 07:31:44 +00:00
Matthias Clasen
9ecfffa830 Formatting fixes 2015-08-08 23:10:00 +02:00
Matthias Clasen
b54fab2b89 HighContrast: Fix undershoot in sidebars
This was just not implemented, and the sidebars solid white
background color was inherited by undershoot rectangle.

https://bugzilla.gnome.org/show_bug.cgi?id=753391
2015-08-08 23:10:00 +02:00
Kalev Lember
d6f51ef7b2 listbox: Avoid using show_all on rows
Don't use gtk_widget_show_all() on row widgets because that would
unconditionally show all of its children. This might be unwanted in case
the row implementation wants to keep some of its children hidden.

This commit changes it to use show() instead of show_all() and relies on
the row widget to control the visibility of its children itself as
appropriate.

https://bugzilla.gnome.org/show_bug.cgi?id=753392
2015-08-08 16:54:31 +02:00
Aurimas Černius
1f4f8833b1 Updated Lithuanian translation 2015-08-08 17:09:56 +03:00
Jordi Mas
e2e2c96bac Update Catalan translation 2015-08-08 15:20:14 +02:00
Christoph Reiter
6eaf5bd0f2 quartz: Implement CSD drag resize for all edges/corners
Manual resizing for CSD windows only worked with the bottom
right corner. This extends it to work for all corners and edges.

https://bugzilla.gnome.org/show_bug.cgi?id=753329
2015-08-08 13:28:35 +02:00
Matthias Clasen
27afd624cd HighContrast: Improve GtkCalendar drawing
Make days gray that are not in the current month.

https://bugzilla.gnome.org/show_bug.cgi?id=753357
2015-08-08 10:02:49 +02:00
Matthias Clasen
defc0cf5df file chooser button: Fix some refcounting confusion
GtkFileSystem has a complicated way to handle cancellables.
You keep the cancellable pointer that is returned by
_gtk_file_system_get_info and similar methods so that you can
cancel the operation, but you do not own a reference to it.
The only place where it is ok to unref a cancellable is in
your callback, which gets handed a cancellable that you need
to unref at the end. You are expected to compare it to the
pointer you stashed away to find out if the operation has
already been superseded by a newer call, in which case you
disregard the results.

GtkFileChooserButton was following these rules for most of
the cancellables it keeps around, but it was sometimes unreffing
the cancellables that are stored in the model, which could lead
to refcount confusion and crashes. This commit makes it follow
the rules for that case too, which fixes the crash in the bug
below, and does not show up any leaks in valgrind under light
testing.

https://bugzilla.gnome.org/show_bug.cgi?id=737804
2015-08-06 14:51:25 +02:00
Chun-wei Fan
f0a1a0c0a4 gtk/gtkcsstypesprivate.h: Fix Build
The recent change to the enum declaration for GtkCssChange actually
relied on compiler-dependent behavior, which also breaks the build on
some non-GCC compilers, such as Visual Studio.  As noted in the
G_STATIC_ASSERT line just beneath this declaration, we need to change
this enum declaration to #define's, in order to fix the build in such
situations.

https://bugzilla.gnome.org/show_bug.cgi?id=752814
2015-08-06 05:48:22 +08:00
Matthias Clasen
dea3bb2690 3.17.6 2015-08-05 14:20:12 -04:00
Matthias Clasen
9711608ba3 Fix a doc comment 2015-08-05 14:20:12 -04:00
Matthias Clasen
f2060d6881 Documentation fixes 2015-08-05 13:48:16 -04:00
Matthias Clasen
239ac145f7 Updates 2015-08-05 13:36:07 -04:00
Ting-Wei Lan
68e00e9e5d placesview: Fix wrong property type when creating a GtkLabel
The type of xalign property of GtkLabel is float, not int. Using wrong type
crashes GtkFileChooser on x86_64 when compiling with clang.

https://bugzilla.gnome.org/show_bug.cgi?id=753284
2015-08-05 23:31:13 +08:00
Marek Kasik
359534ee59 GtkScrolledWindow: Don't handle key event when can't scroll
Don't return that a key event was handled when the corresponding
scrollbar can not scroll.

https://bugzilla.gnome.org/show_bug.cgi?id=753256
2015-08-05 17:15:52 +02:00
Jakub Steiner
01371085ee Adwaita: calendar button fix
- provide insensitive button state for GtkCalendar buttons

https://bugzilla.gnome.org/show_bug.cgi?id=753230
2015-08-05 14:05:57 +02:00
Matthias Clasen
e34ab3561f color chooser: Use a popover for the context menu
It works just as well here as it does in the file chooser, and
this lets us unify the right-click and long-press behavior a bit.
We used to switch directly to the editor on long-press, now we
can show the popover, just as we do on right-click.
2015-08-04 22:59:58 -04:00
Jonas Ådahl
27763743b1 wayland: Don't assume drag context has a source window when finalizing
Only a drag context which was created with 'drag_begin' will be
guaranteed to have a source window at all times. Thus, in finalize we
cannot assume we can retrieve a GdkDisplay from the source_window
pointer since it may be NULL. Though, the display is only needed for
contexts created via 'drag_begin' thus we can retrieve it after
checking that is the case.

https://bugzilla.gnome.org/show_bug.cgi?id=749339
2015-08-05 10:31:55 +08:00
Carlos Garnacho
69c9cb85e2 gtkwindow: bail out on WM operations in the presence of grabs
These operations will require a grab on the WM side, so we can spare the
attempt from the WM to take a grab when we're certain it won't suceed.

https://bugzilla.gnome.org/show_bug.cgi?id=752327
2015-08-04 17:59:01 +02:00
Carlos Garnacho
a6ca56969e gtkmain: Don't process WM events if there's a grab on another toplevel
This is implicitly done for us in the case of grabs on windows from other
groups, but we must perform this check explicitly for grabs with
owner_events=True on windows from the same group, in that case the window
would handle the events as if there was no grab.

https://bugzilla.gnome.org/show_bug.cgi?id=752327
2015-08-04 17:58:39 +02:00
Matthias Clasen
56d39241a9 inspector: Fix a typo
Blocking a signal should be paired with unblocking.
Spotted by Krzesimir Nowak
2015-08-04 07:11:34 -04:00
Matthias Clasen
b10bfe128f GtkButton: Pick up images that are set early
We were failing to construct the child if an image was set
before constructed (e.g. in the init() function of a button
subclass).

https://bugzilla.gnome.org/show_bug.cgi?id=753048
2015-08-03 22:35:36 -04:00
Matthias Clasen
ba45fa09b4 HighContrast: Avoid resizing treeview headers
https://bugzilla.gnome.org/show_bug.cgi?id=753060
2015-08-03 22:16:34 -04:00
Matthias Clasen
198d99d680 Whitespace fixes 2015-08-03 22:02:22 -04:00
Rui Matos
bd3b496586 wayland: Ensure modal hint gets set on map
We need to be mapped to have a gtk_surface and thus be able to do
requests on it so we need to save the modal hint and apply it when we
get mapped so that code that sets the hint before showing a window
doesn't get ignored.

https://bugzilla.gnome.org/show_bug.cgi?id=753138
2015-08-03 14:24:38 +02:00
Rui Matos
36263076b2 wayland: Invalidate our gtk_surface when we're unmapped
Otherwise if we get mapped again we'll try to use an invalid
gtk_surface and the compositor will disconnect us.

https://bugzilla.gnome.org/show_bug.cgi?id=753138
2015-08-03 14:24:36 +02:00
Timm Bäder
61ba7adfc8 GtkLabel: Show erroneous text if parsing markup failed
https://bugzilla.gnome.org/show_bug.cgi?id=752920
2015-08-03 11:31:00 +02:00
Matthias Clasen
14de03cedf file chooser: Don't leave out icons by accident
We only load thumbnails when we find that the row is in the visible
range of the treeview. It seems that animated scrolling makes it so
that the bottommost row stays out of the visible range until it is
too late. To work around this, extend the range by one row in each
direction.

http://bugzilla.gnome.org/show_bug.cgi?id=753142
2015-08-02 20:51:12 -04:00
Jasper St. Pierre
9cbd9c4187 Adwaita: Remove non-working selector
This was suppsed to be ".list-row.button", I'd imagine, but the missing
dot meant it never worked in the first place. Just clean it up.
2015-08-02 12:57:32 -07:00
Jasper St. Pierre
03ae86d9f6 Don't trigger extraneous redraws on font / text-attr changes
Any time that these change, we shouldn't need to force a redraw on
the widget either.
2015-08-02 12:57:31 -07:00
Jasper St. Pierre
4da945dc4b widget: Don't queue redraws for properties that don't affect anything
Properties like transition-property might change when hovering over
something, even if the property itself does not change. These properties
don't affect drawing, so don't queue redraws for them.
2015-08-02 12:57:31 -07:00
Jasper St. Pierre
36c0c9d0b8 listbox: Don't queue draws on the entire widget
The set_state_flags code should already queue redraws when needed.
2015-08-02 12:57:31 -07:00
Jasper St. Pierre
ce75c835e1 cssimage: Don't start a transition if the start and end are the same
Since a lot of Adwaita sets transition: all, it's easy to end up in a
state where we're making dummy transitions for all of the icons, most of
which we'll never be showing.
2015-08-02 12:57:31 -07:00
Matthias Clasen
142efd186d Inspector: Preserve selection when rescanning
We are semiregularly repopulating the object tree. Whenever
we do, we loose the selection, needlessly. Do the extra work
to preserve it.

http://bugzilla.gnome.org/show_bug.cgi?id=753130
2015-08-02 15:20:17 -04:00
Paolo Borelli
ca8f6dd7f6 cleanup: do not set members to null in finalize 2015-08-01 21:31:49 +02:00
Paolo Borelli
3fec677da0 cleanup: no need to set members to null when freeing the struct 2015-08-01 21:30:53 +02:00
Paolo Borelli
7921ac510e cleanup: one more g_slist_free_full 2015-08-01 21:30:16 +02:00
Piotr Drąg
0520547335 Updated POTFILES.skip 2015-08-01 19:25:16 +02:00
Pedro Albuquerque
4d61126814 Updated Portuguese translation 2015-08-01 10:02:32 +00:00
Pedro Albuquerque
725e7c399e Updated Portuguese translation 2015-08-01 09:55:44 +00:00
Benjamin Otte
186e94bafb searchenginetracker: Ignore NULL directories 2015-08-01 05:50:20 +02:00
Jasper St. Pierre
93171cf4f3 gtkoverlay: Optimize size allocations
Doing raises / lowers here will invalidate the entire child widget
almost every time, since raising each widget causes it to invalidate
that area.
2015-07-31 20:39:02 -07:00
Matthias Clasen
9f24b54786 Code cleanup
Use g_slist_free_full more consistently. This commit just converts
the obvious cases where g_slist_forall is directly followed by
g_slist_free.
2015-07-31 22:23:35 -04:00
Jakub Steiner
9dd2645c4a HC: shade spinbuttons as entries
https://bugzilla.gnome.org/show_bug.cgi?id=746491
2015-08-01 02:22:34 +02:00
Matthias Clasen
b048181157 gtk-demo: Add a scale example 2015-07-31 16:36:02 -04:00
Matthias Clasen
fb0a13b7f0 file chooser: Allow activating without double-click
Interpret a unmodified primary click on the selection like a double
click. This makes it possible to activate a file or open a folder
without using double-click.
2015-07-31 13:46:35 -04:00
Matthias Clasen
28b4599f9b gesture single: Use gtk_simulate_touchscreen
Instead of manual tests.
2015-07-31 13:46:35 -04:00
Matthias Clasen
72d0b4d2c2 text view: Use gtk_simulate_touchscreen
Instead of repeated manual tests.
2015-07-31 13:46:34 -04:00
Matthias Clasen
5aa1f0923c entry: Use gtk_simulate_touchscreen
Instead of repeated manual checks.
2015-07-31 13:46:34 -04:00
Matthias Clasen
98121aa302 Add a private function to determine if we simulate
These same two or three tests are currently duplicated
in several places, with separate static variables. Lets
do this in one place.
2015-07-31 13:46:34 -04:00
Jakub Steiner
230c248326 HC: custom color button fixes
https://bugzilla.gnome.org/show_bug.cgi?id=753051
2015-07-31 15:43:44 +02:00
Christian Dywan
18dddddbab entry completion: Clarify index in documentation
https://bugzilla.gnome.org/show_bug.cgi?id=579466
2015-07-31 09:11:57 -04:00
Matthias Clasen
c514d1dd5e testfilechooser: Say Save
Thats a more typical affirmative action in save mode.
2015-07-31 07:12:35 -04:00
Matthias Clasen
6f194564ff Use pango_fc_font_map_config_changed
Use pango_fc_font_map_confit_changed() instead of
pango_fc_font_map_cache_clear().

https://bugzilla.gnome.org/show_bug.cgi?id=748772
2015-07-31 00:50:47 -04:00
Carlos Garnacho
65f7fb04ad 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-07-30 22:37:53 -04:00
Benjamin Otte
2550c6a4db combobox: Refactor cell view treatment
Instead of putting it inside the button manually, put it there properly
by adding a box containing the cell view and the arrow.

Do the same thing in list mode, instead of creating an event box that
tries to behave as a button.
2015-07-31 04:03:44 +02:00
Benjamin Otte
bbd9c59832 combobox: Handle NULLing the cellview on remove simpler 2015-07-31 04:03:44 +02:00
Benjamin Otte
1261ec985b combobox: Remove unused variables 2015-07-31 04:03:44 +02:00
Benjamin Otte
62c43aac43 combobox: Create cell view identically
... in the two places it can be created.
2015-07-31 04:03:44 +02:00
Matthias Clasen
ec338b0ab6 file chooser: Don't crawl recent://
This is unnecessary - all the recent files are in the model already.
It also leads to duplicates, since our duplicate filtering is based
on g_file_equal, which does not consider recent:///blabla with
target-uri=/my/example to be the same as file:///my/example.
2015-07-30 14:29:10 -04:00
Matthias Clasen
7d91ca3183 widget-factory: Test busy state
Makes it easy to test insensitive state of widgets.i
Also exposes brokenness in the shell busy indicator...
2015-07-30 10:36:34 -04:00
Jakub Steiner
ffec25b015 HC: no need for green in scales 2015-07-30 14:02:58 +02:00
Jakub Steiner
cd08b427c9 HC: fix typo 2015-07-30 13:54:29 +02:00
Matthias Clasen
ce3ebaf6f9 Expand builder menu documentation
List the supported attributes.
2015-07-29 23:17:43 -04:00
Matthias Clasen
6bf2e9e7a7 gtk-demo: Move the transparent example under Overlay 2015-07-29 21:43:28 -04:00
Matthias Clasen
1ce7c76cda gtk-demo: Rename textview demos to "Text View"
Fits better with "Tree View".
2015-07-29 21:43:20 -04:00
Matthias Clasen
94120094ab gtk-demo: Tweak the markup demo 2015-07-29 21:43:13 -04:00
Matthias Clasen
627886c682 gtk-demo: Add font features to markup demo 2015-07-29 21:43:07 -04:00
Matthias Clasen
c6838fbff0 GtkTextView: Support font features
Add a ::font-features attribute to GtkTextTag, and support
font features when inserting Pango markup into a text buffer.
2015-07-29 21:42:58 -04:00
Georges Basile Stavracas Neto
98f9532a22 placesview: don't show mount for Computer row
The "Computer" row from places view is an abstract volume
that represents the root of the current partition. As such,
it cannot be mounted or unmounted.

Remove the related item on context menu for Computer row.
2015-07-29 19:39:03 -03:00
Christian Hergert
08addd9859 fontchooserwidget: use appropriate model for GtkTreeIter
We were previously mixing the model used when filtering with an iter that
has been resolved to the backing model.

This results in both an invalid row index as well as an invalid
iter->stamp.
2015-07-29 12:57:43 -07:00
Matthias Clasen
8695cf3c5a Fix oversights in templates
Some of our templates were not setting the domain attribute
on the <interface> element.
2015-07-29 15:15:10 -04:00
Matthias Clasen
3c2a759c21 gtk3-demo: Add a markup demo 2015-07-29 13:57:25 -04:00
Jakub Steiner
b5a684de68 HC: make progressbar labels more visible
- use the same colro as regular labels, no
need to be more subtle

https://bugzilla.gnome.org/show_bug.cgi?id=752978
2015-07-29 13:32:34 +02:00
Jakub Steiner
a0ee054bb1 HC: make pushed columns visible
https://bugzilla.gnome.org/show_bug.cgi?id=752977
2015-07-29 13:27:17 +02:00
Jakub Steiner
66cacaf725 HC: provide explicit treeview styling
deals with some details like:

- DND stuff
- progressbar
- expanders
- separators

https://bugzilla.gnome.org/show_bug.cgi?id=752975
2015-07-29 13:24:11 +02:00
Jakub Steiner
2cd86139fa HC: :checked:hover color fix for menuitems
https://bugzilla.gnome.org/show_bug.cgi?id=752969
2015-07-29 12:40:16 +02:00
Jakub Steiner
9dabc4efd5 HC: make link buttons distinct
https://bugzilla.gnome.org/show_bug.cgi?id=752965
2015-07-29 12:34:44 +02:00
Jakub Steiner
3cf28a835f HC: whitespace for sidebar
- make some room around the sidebar icons

https://bugzilla.gnome.org/show_bug.cgi?id=752960
2015-07-29 12:20:28 +02:00
Matthias Clasen
1fb154e62a gtk3-demo: Add a scrollbar context menu
Just to demonstrate the capability, not because this is
excellent UI.
2015-07-28 23:48:10 -04:00
Matthias Clasen
763bf27d9c gtk3-demo: Add another overlay demo 2015-07-28 22:47:57 -04:00
Georges Basile Stavracas Neto
e51946270a placesview: simplify code
Since we started adding a persistent Computer item,
all the code related to the view modes became obsolete,
since the view is never empty anymore. So, drop this
dead code and use the plain stack to manage the empty
search results view.

Also, this patch fixed a very annoying keyboard navigation
issue where we couldn't go from the On This Computer to Networks
lists, because they were two separate widgets. Merge the two
lists into a single one, and update headers accordingly.
2015-07-28 11:46:25 -03:00
Georges Basile Stavracas Neto
da11404719 placesviewrow: hook up finalize
It is needed to hook up the finalize method, since
it's overriden manually.
2015-07-28 07:41:32 -03:00
Georges Basile Stavracas Neto
c3b6345377 placessidebar: fix ellipsizing glitch
The places sidebar rows' labels were missing a proper
xalign, which caused the labels to keep shaking while
the sidebar was resized.

Fix that by setting the label's xalign to 0.
2015-07-28 07:08:03 -03:00
Georges Basile Stavracas Neto
317ba620e2 placesview: plug some memory leaks
The GFile containing the Computer item was not
properly dereferenced, so plug that leak by both
dereferencing it and adding some reference management
on GtkPlacesViewRow.
2015-07-28 07:03:09 -03:00
Georges Basile Stavracas Neto
a5e762e6a7 placesview: show Computer item
GtkPlacesView widget manages persistent locations,
factoring out GtkPlacesSidebar functionality.

It, however, does not completely shows all sidebar
locations, since Computer is still missing.

Add a Computer item, adjusting some internal behavior
to make that possible.
2015-07-28 07:03:09 -03:00
Georges Basile Stavracas Neto
5134e4b3bd placesview: don't show network addresses
It is distracting, not relevant and too space
consuming.

Remove the network addresses label.
2015-07-28 07:03:09 -03:00
Georges Basile Stavracas Neto
c00f216d92 placesview: fix documentation
The doc for gtk_places_view_get_search_query was being
set twice, while gtk_places_view_set_search_query was
never set.

Fix that by correcting the wrong getter documentation.
2015-07-28 07:03:09 -03:00
Georges Basile Stavracas Neto
ea3a80c19f placessidebar: fix documentation
Use the same explanation of why GtkPlacesSidebar::show-connect-server
was deprecated and its replacements on getter and setter.

Also, fix a mistakenly deprecated function.
2015-07-28 07:03:09 -03:00
Matthias Clasen
df50858dfd inspector: Show monitor information
This is useful to verify the monitor information returned by
other backends.
2015-07-28 01:14:49 -04:00
Matthias Clasen
bc68600cb0 inspector: Show wayland display information
Don't call it "X display" when we show useful information under
Wayland as well.
2015-07-28 00:46:34 -04:00
Matthias Clasen
7d87eebfe7 wayland: Return a display name
Make gdk_screen_make_display_name() return a likely correct
name for the Wayland socket we are using.
2015-07-28 00:43:54 -04:00
Matthias Clasen
55edc81c10 x11: Make selection handling work across screens
When dealing with selection events, we might see windows from
other screens in the requestor field. The current x11 backend
code fails to wrap these in a foreign GdkWindow, since we
don't have the corresponding GdkScreen anymore. Work around
this by creating such 'foreign screens' on demand. We still
maintain the 1:1 relation between the display and the screen
returned by gdk_display_get_default_screen().

https://bugzilla.gnome.org/show_bug.cgi?id=721398
2015-07-27 23:20:53 -04:00
Jordi Mas
1b43c3f493 Update Catalan translation 2015-07-27 23:03:13 +02:00
Matthias Clasen
4050abe2fa Plug a memory leak
GtkCssProvider was using the wrong unref function for GtkCssKeyframe
objects. Funnily, this didn't crash at all, the refcount was at the
same place in the struct - it just didn't free all the memory, causing
valgrind to complain.
2015-07-27 14:54:13 -04:00
Christoph Reiter
048d710d67 quartz app menu: add hidpi support for menu icons
Use the new cairo to NSImage converter function
to set the device scale.

Remove the pixbuf converter function as this was
the last user.
2015-07-27 17:28:36 +02:00
Christoph Reiter
4b23ba53c5 quartz dnd: add hidpi support for gtk_drag_set_icon_surface()
Instead of storing the dnd icon as a pixbuf store it
as a cairo surface and transfer the device scale
when converting it to a NSImage. In the pixbuf/stock/named
setters convert to a surface instead (no hidpi support yet)
2015-07-27 17:28:14 +02:00
Christoph Reiter
5003b5873a quartz dnd: fix drag icon position relative to cursor position
The y axis is reversed on osx
2015-07-27 17:27:51 +02:00
Christoph Reiter
2c329f5b3a quartz: disable system shadows if a GdkWindow shadow is set.
The shadow will be drawn in the wrong place in those cases so all we can
do is disable it. This fixes double shadows drawn around menus, popups
and tooltips.

https://bugzilla.gnome.org/show_bug.cgi?id=734984
2015-07-27 17:26:46 +02:00
Georges Basile Stavracas Neto
e0339c5244 placessidebar: show Computer item when not in Other Locations
Previous commits removed from places sidebar the code related
to displaying the Computer item, which should be shown when
the sidebar is not displaying the Other Locations item.

Add back the item when the sidebar is not in Other Locations'
mode.
2015-07-27 12:21:36 -03:00
Patrick Griffis
ee73e27fd7 quartz: Fix building
Broken by 6d04183c5d and 6ac07a2e85
2015-07-27 09:33:32 -04:00
Matthias Clasen
49a596aa52 file chooser: Note when searching remote locations
Inform the user that we won't search recursively when searching
in remote locations.
2015-07-27 08:07:39 -04:00
Matthias Clasen
eee85d39e5 Avoid more GFile<>uri roundtrips
Make GtkSearchHit carry a GFile instead of an uri. Most of the
search engines already have the object around, and converting
to an uri and back is unnecessary extra work.
2015-07-27 08:07:39 -04:00
Matthias Clasen
f7bba525fc search engine: Don't crawl remote locations
This is slow, and causes too much network I/O.
So skip locations that look like they are remote.
2015-07-27 08:07:39 -04:00
Matthias Clasen
93bfec3ac5 Add a helper function for remote locations
Add a helper function that says whether a location should be
considered remote. To determine this, we look at the filesystem
type reported by gvfs, and say 'remote' for sftp, webdav, ftp,
nfs and cifs.
2015-07-27 08:07:39 -04:00
Matthias Clasen
30de4cc7bb Actually use search results from the model
We didn't connect to the signals, so we never picked up
any search results from the model engine. Good thing, since
it was returning the wrong thing.
2015-07-27 08:07:39 -04:00
Matthias Clasen
1069e2b9cc Port to GtkSearchHit
GtkSearchEngineModel was still trying to return uris as hits.
This is not working anymore, we are expected to return GtkSearchHit
structs.
2015-07-27 08:07:38 -04:00
Matthias Clasen
48c172f4e0 Always pass a location into the query
Failure to do so was causing search to start from the home dir
when the current folder is not represented on the sidebar.
2015-07-27 08:07:38 -04:00
Matthias Clasen
71b3e0b66b Store locations as GFile
It is a bit pointless to have the file chooser get a uri from an
existing GFile to put in the query, only to have some of the search
engines reconstruct a GFile from it.
2015-07-27 08:07:38 -04:00
Matthias Clasen
859db92183 Remove a redundant assignment 2015-07-27 08:07:27 -04:00
Dušan Kazik
48815d2c7d Updated Slovak translation 2015-07-27 08:21:37 +00:00
Dimitris Spingos
0a6b624440 Updated Greek translation 2015-07-27 12:36:37 +03:00
Benjamin Otte
5e2ab6db7f combobox: Use ui file to construct internal button child 2015-07-26 17:18:42 +02:00
Benjamin Otte
5ad5431cb7 combobox: Create button on init() and destroy in destroy()
The button is the same in both menu and list mode, so there's no need to
destroy and recreate it.
2015-07-26 17:18:42 +02:00
Benjamin Otte
e0572212bc combobox: Add scroll support in list mode 2015-07-26 17:18:42 +02:00
Benjamin Otte
8243140731 combobox: Remove unused argument
The visible check is always FALSE, so no need to keep the code around.
2015-07-26 17:18:42 +02:00
Benjamin Otte
63c219b8e7 combobox: Remove the box from the button
... when in menu mode.

Now that we don't have a separator anymore, the box is not needed
anymore.
2015-07-26 17:18:42 +02:00
Benjamin Otte
fcb26376df combobox: Remove the separator
It was a special case and it's not used by themes anymore.

Plus, in the CSS world, if a theme wants a separator, it can just
style the button's border to create one.
2015-07-26 17:18:42 +02:00
Matthias Clasen
93a4030c45 Remove a duplicate string
dialog-information was twice in the list of accessible labels
for icon names.
2015-07-26 02:57:39 -04:00
Matthias Clasen
58fa3d96a8 listbox: Fix shift-selection
Selecting a range of rows with Shift-click was accidentally broken
in e6e511eb46. Make it work again.
2015-07-26 02:40:26 -04:00
Matthias Clasen
6ac07a2e85 quartz: Implement NO_TARGET drag result
This is necessary to make notebook tab DND work.

https://bugzilla.gnome.org/show_bug.cgi?id=752638
2015-07-26 02:10:47 -04:00
Matthias Clasen
6d04183c5d quartz: Check if a drag ends inside a known window
If a drag ends inside a known window, set the dest_window field
in the drag context. This information is needed to implemented
notebook tab dragging.

https://bugzilla.gnome.org/show_bug.cgi?id=752638
2015-07-26 02:05:47 -04:00
Jonas Ådahl
955c1c7734 GtkMenu: Properly detach menu when the window is detached
Without properly cleaning up GtkMenu private attach state
(GtkMenuAttachData) when the attached widget is freed, we would end up
with an invalid pointer to a freed widget. Trying to detach from that
widget would cause a segmentation fault.

https://bugzilla.gnome.org/show_bug.cgi?id=752761
2015-07-26 01:57:26 -04:00
Giovanni Campagna
83b7a0f0e5 wayland: Fix initial fullscreen monitor support
-1 means that we have no specific preference for an initial
fullscreen monitor, and -1 is less than the number of monitors,
so we would end up accessing invalid memory. Prevent that.

https://bugzilla.gnome.org/show_bug.cgi?id=752875
2015-07-26 01:55:56 -04:00
Matthias Clasen
b2b4a3bb0a Fix a warning 2015-07-26 01:49:19 -04:00
Matthias Clasen
5c2759af3c Use standard cursor names
This changes GTK+ to use gdk_cursor_new_from_name() with the
'standard' css names, instead of GdkCursorType.

https://bugzilla.gnome.org/show_bug.cgi?id=652085
2015-07-26 01:45:06 -04:00
Matthias Clasen
b3fb1aefd8 win32: Support all css cursor names
Approximate some of the resize cursors with similar cursors.
2015-07-26 01:43:56 -04:00
Peter Wu
fffbe61c23 broadway: fix use-after-free on read errors
Call chain:
 - input_data_cb
   - broadway_server_read_all_input_nonblocking (input)
     - broadway_input_free (input)
       (now input is invalid)
     attempt to use input->active -> use-after-free

Make broadway_server_read_all_input_nonblocking return a boolean, TRUE
if the input was valid, FALSE otherwise. This allows input_data_cb to
detect whether the input was gone or not.

https://bugzilla.gnome.org/show_bug.cgi?id=741685
2015-07-26 00:46:13 -04:00
Matthias Clasen
030aa540ef Fix x11-less build
We don't use pangoft2 at all in libgdk, but we are using it in libgtk
both under X and Wayland.
2015-07-26 00:35:25 -04:00
Matthias Clasen
62d785a6b7 Don't use libcanberra without X
libcanberra calls x11 backend functions, so we can't use it
when the x11 backend is disabled.
2015-07-25 23:22:04 -04:00
Matthias Clasen
69d90d4f50 places view: Documentation fixups
Rewrite gtk_places_sidebar_set_show_enter_location docs, add
references to the relevant signals, remove mentions of
GtkPlacesView from the docs, since it is not public at this point.

https://bugzilla.gnome.org/show_bug.cgi?id=752633
2015-07-25 12:11:05 -04:00
Jeremy Whiting
f9d903995d Added api to set a window to fullscreen on a given monitor.
https://bugzilla.gnome.org/show_bug.cgi?id=752677
2015-07-25 07:08:59 -06:00
Pedro Albuquerque
2a2a1487d9 Updated Portuguese translation 2015-07-25 08:37:40 +00:00
Piotr Drąg
94eaa505c1 Updated POTFILES.skip 2015-07-24 20:34:13 +02:00
Matthias Clasen
b847937772 gtk-demo: Expand the filter model example
Show normal filtering as well.
2015-07-24 14:27:08 -04:00
Matthias Clasen
13b4500f52 widget-factory: hook up callbacks to the tab close buttons
Just to show that buttons in notebook tabs work.
2015-07-24 12:22:19 -04:00
Matthias Clasen
a8512e097a Fix a typo
https://bugzilla.gnome.org/show_bug.cgi?id=752810
2015-07-24 11:28:59 -04:00
Carlos Garnacho
76c1337675 GdkEvent: Turn out parameters optional
As pointed out by lazka in IRC, /me clearly out of phase after allow-none.
2015-07-24 14:42:34 +02:00
Carlos Garnacho
dc9e54887a GdkEvent: Fix introspection annotations on gdk_event_get(_root)_coords
These functions respect NULLs being passed, so the return values are
(nullable).
2015-07-24 13:44:22 +02:00
Carlos Garnacho
862cac7fe6 GtkGesture: minor cleanup
We're not really using the coordinates in that function, we just
double check it's not an unrelated event.
2015-07-24 13:44:22 +02:00
Chun-wei Fan
9c37fe94d1 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:39:55 +08:00
Chun-wei Fan
d9985dad5b gtk/gtkplacessidebar.c: Fix Build on C89
Ensure variables are declared at the top of the block, and remove a ';;',
which C89 compilers don't like.
2015-07-24 16:25:01 +08:00
Pedro Albuquerque
62286b9481 Updated Portuguese translation 2015-07-24 07:37:18 +00:00
Pedro Albuquerque
d017395beb Updated Portuguese translation 2015-07-24 07:34:41 +00:00
Matthias Clasen
dc82949fbe file chooser dialog: Better spacing
When the dialog is as narrow as possible, we still want some
space between the entry and the search button, so use margins
around the entry and label instead of box spacing.
2015-07-23 22:15:32 -04:00
Matthias Clasen
e2b9caf26a file chooser: Fix gtk_file_chooser_set_show_hidden
We should not override an explicitly set show-hidden value
when loading the setting.

https://bugzilla.gnome.org/show_bug.cgi?id=610925
2015-07-23 21:54:47 -04:00
Matthias Clasen
3fec234c22 inspector: Rescan toplevels when they change
This ensures that windows appear in the inspectors tree when
they are created, and it prevents GTK_DEBUG=interactive from
coming up with an empty object tree.

https://bugzilla.gnome.org/show_bug.cgi?id=752664
2015-07-23 21:28:28 -04:00
Matthias Clasen
9a44f18940 inspector: Add a function to rescan
Currently, we only ever scanned the toplevel list and
widget tree once. That is not enough.
2015-07-23 21:27:37 -04:00
Matthias Clasen
1138d4f489 Another fix for unmapped window states
The previous fix was falling into the crack between
realized and mapped - we would apply the state when a window
is just realized, then unset the _initially flag, and then
when the window gets mapped, we'd undo the state. To fix
this, go back to the way things were when these flags were
first introduced.

https://bugzilla.gnome.org/show_bug.cgi?id=752765
2015-07-23 17:54:50 -04:00
Timm Bäder
56051b0bd8 GtkWidget: Fix set_font_map docs
A typo and non-matching parameter names.
2015-07-23 17:59:17 +02:00
Pavel Grunt
44608dadc6 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
2015-07-23 17:52:01 +02:00
Timm Bäder
c28d0a7e0a gtk3-demo: Don't use xalign on GtkCheckButton 2015-07-23 17:37:49 +02:00
Christoph Reiter
7ed5816829 quartz: remove maximized state when the window position/size is changed
So a window can be maximized/zoomed again after being moved away from
its maximized position. This makes the zoom button on non-CSD windows
work as before.
2015-07-23 13:20:05 +02:00
Christoph Reiter
eb37fd22e7 quartz: implement maximized/unmaximized
Instead of using the default zoom behaviour use the internal
maximized state for selecting our own zoom target. This makes
zooming work for CSD windows where for some reason the
given default zoom target is the current window frame itself
resulting in a shadowless window of the same size.

While this makes the zoom button behave a bit different as expected
it makes things more consistent with other platforms and fixes CSD
zooming.
2015-07-23 13:19:09 +02:00
Christoph Reiter
61ce90a8e2 quartz: make moving CSD windows right up to the screen's menu bar work.
The default implementation prevents the window + shadow to move above
the menu bar. Change it so only the window is considered.
2015-07-23 13:18:49 +02:00
Matthias Clasen
707459fe4e file chooser: Make keynav in save mode smoother
When using the location popup to complete to a directory name
(with a trailing /), we should not punish the user by making the
Open button insensitive and preventing the Enter key from doing
the expected thing (switching to that directory).

https://bugzilla.gnome.org/show_bug.cgi?id=752708
2015-07-23 01:04:15 -04:00
Matthias Clasen
3f18e76a34 Remove debug spew 2015-07-23 00:45:32 -04:00
Matthias Clasen
91c05f6f6b file chooser entry: Special-case ., .. and ~
Make sure entering the three special strings ".", ".." or "~" in
the location entry works as expected. They already worked correctly
if you append a '/' to force them to be recognized as the 'folder'
part, but that should not be necessary.

https://bugzilla.gnome.org/show_bug.cgi?id=752707
2015-07-23 00:42:19 -04:00
Matthias Clasen
f30637bbae GtkWindow: Rework the _initially variables
Go back to use these variables only for pre-mapped state changes.
Their use got muddied over the years, and it was hard to keep track
of what is acutal state, and what just a queued request.
2015-07-22 23:28:39 -04:00
Matthias Clasen
8b695cc727 Revert "window: fix initial shadow width for maximized/fullscreen windows"
This reverts commit 740bcf5fe0.
2015-07-22 23:16:52 -04:00
Matthias Clasen
de2ea1ebaa Revert "gtkwindow: Reset maximize / fullscreen_initially on state changes"
This reverts commit 862e0dab03.
2015-07-22 23:16:44 -04:00
Matthias Clasen
167734c153 file chooser: Fix a crash
The save_widgets_create function was not safe against
being called multiple times in save mode, calling
gtk_file_chooser_set_create_folders was a way to trigger
this crash.
2015-07-22 19:16:23 -04:00
Stefan Sauer
0076b943ad toolbutton: linkify properties 2015-07-22 21:48:06 +02:00
Stefan Sauer
71b278fb4d toolbutton: fix misleading docs
First only label-widget clashes with icon-name and not the label property. In
addtion fix the propertyname to use '-' instead of '_'.
2015-07-22 19:13:07 +02:00
Matthias Clasen
6a5586a416 gtk-demo: Add a filter model example
This shows computed columns.
2015-07-22 10:59:53 -04:00
Benjamin Otte
31191d5566 fontchooserwidget: Refactor code so we actually optimize
Previously, we would pango_font_describe() every time the code ran and
we wouldn't ever hit the optimized quick exit.

The code now is a lot more complex because the
compute-actual-value-when-required-the-first-time approach is not
supported out of the box in GtkTreeModel (or GValue).
2015-07-22 16:01:21 +02:00
Timm Bäder
3fc5d09890 gtk3-demo: Don't set xalign of GtkCheckButton
It's deprecated and doesn't make a difference here.
2015-07-22 06:58:08 +02:00
Matthias Clasen
a56bd1c490 GtkImage: Plug a memory leak 2015-07-21 23:04:30 -04:00
Matthias Clasen
0d7a9dc4b8 gtk-demo: Properly clean up timeouts in search entry demo 2015-07-21 21:12:36 -04:00
Matthias Clasen
3243ae6e08 places sidebar: Don't leak shortcuts
Poined out by valgrind.
2015-07-21 21:00:12 -04:00
Matthias Clasen
fbee8c5ba3 GtkSearchEngine: Be more robust in cancellation cases
When the search is cancelled, we may end up with a tracker
dbus reply coming in after the GtkSearchEngine object is
already gone, and bad things happen. Prevent this by
using g_signal_connect_object instead of g_signal_connect.
2015-07-21 20:40:46 -04:00
Matthias Clasen
38a5db8f83 GtkQuery: Make API follow GTK+ conversions
We generally have const getters for strings, and the two users
of this API were promptly leaking the (unexpected) copy they
got from gtk_query_get_location and gtk_query_get_text.
2015-07-21 20:39:29 -04:00
Matthias Clasen
9418712782 places sidebar: Always chain up in finalize
The GtkSidebarRow class was forgetting to do this. The visible
symptom of this in valgrind is that you notice GObject data
being leaked.
2015-07-21 19:52:54 -04:00
Matthias Clasen
3e6177d2dd places sidebar: Plug a memory leak 2015-07-21 19:52:54 -04:00
Marek Černocký
0189cb0e0a Updated Czech translation 2015-07-22 00:48:45 +02:00
Matthias Clasen
bb0b54526f Use versioned deprecations more seriously
I invadvertendly introduced a dependency on a recent GLib recently,
by cherry-picking a fix that used new GLib API. This commit will
help catching such errors before release, by using the versioned
deprecation machinery to turn such events into build-time
warnings.
2015-07-21 17:49:08 -04:00
Matthias Clasen
1e981790de places sidebar: Improve docs
Clarify the deprecation note for ::show-connect-to-server.
https://bugzilla.gnome.org/show_bug.cgi?id=752633
2015-07-21 15:07:37 -04:00
Matthias Clasen
7a84c26d0b places sidebar: Improve the docs
Reword the docs of gtk_places_sidebar_set_drop_targets_visible().
2015-07-21 15:07:37 -04:00
Matthias Clasen
b4b46b74e5 places sidebar: Fix a copy-paste leftover
The ::populate-all nick and blurb where not referrering to this
property at all.
https://bugzilla.gnome.org/show_bug.cgi?id=752633
2015-07-21 15:07:37 -04:00
Stefan Sauer
658a1ef069 toolbutton: improve docs wrt stock deprecation
Docuemnt where to get the images from.
2015-07-21 20:17:16 +02:00
Piotr Drąg
22056ced7a Updated Polish translation 2015-07-21 17:21:35 +02:00
Yosef Or Boczko
cb38a2ebce Updated Hebrew translation 2015-07-21 12:56:02 +03:00
Matthias Clasen
e8a0e8f1b0 3.17.5 2015-07-21 00:19:10 -04:00
Matthias Clasen
dee75bce2d Fix distcheck
Makefile.decl does not work well with scripts that stay
in srcdir, so generate test-simplify from test-simplify.in,
just os that it ends up in builddir.
2015-07-21 00:19:10 -04:00
Matthias Clasen
8102425f03 places view: Disconnect from volume monitor
Just unreffing the volume monitor object won't stop it from emitting
signals that we are connected to. Disconnect from the signals in
finalize.
2015-07-20 21:23:06 -04:00
Benjamin Otte
99d4ec2676 reftests: Fix underlines in link-coloring reftest
Underlines now need to be manually specified in CSS since GTK got
text-decoration support.
2015-07-21 02:28:53 +02:00
Benjamin Otte
ceab99ff2f treeview: Don't underallocate editing widgets that are too big 2015-07-21 02:28:53 +02:00
Benjamin Otte
3402363684 combobox: Unconditionally draw background and border 2015-07-21 02:28:53 +02:00
Benjamin Otte
5f6db9a182 combobox: Remove autoscroll timer on popdown 2015-07-21 02:28:53 +02:00
Benjamin Otte
19726a5a0e combobox: Remove cell_view_frame
Cell views can draw their own frames now.
2015-07-21 02:28:53 +02:00
Benjamin Otte
7b57221522 cellview: Implement border and background drawing 2015-07-21 02:28:52 +02:00
Stefan Sauer
6f4518ab4b gtkimagemenuitem: improve the replacement docs even more
Since the stock strings usually have menmosics suggest
gtk_menu_item_new_with_mnemonic().
2015-07-20 21:04:28 +02:00
Timm Bäder
173ef4ee66 offscreen_window: Remove deprecated API calls 2015-07-20 21:02:58 +02:00
Stefan Sauer
8a6bad7faf 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-20 20:54:52 +02:00
Cosimo Cecchi
62af1cbb1d drawingarea: use same background approach as GtkLayout
Call gtk_style_context_set_background() every time the style is updated
and add a comment as to why we still need to do it here.

https://bugzilla.gnome.org/show_bug.cgi?id=752599
2015-07-20 08:43:08 -07:00
Cosimo Cecchi
90d237ced4 Revert "drawingarea: don't call gtk_style_context_set_background()"
This reverts commit 6786c9d724.

https://bugzilla.gnome.org/show_bug.cgi?id=752599
2015-07-20 08:43:08 -07:00
Cosimo Cecchi
11ce41d9c4 Revert "drawingarea: checks parent's draw() before call it"
This reverts commit b3166b745f.

https://bugzilla.gnome.org/show_bug.cgi?id=752599
2015-07-20 08:43:08 -07:00
Matthias Clasen
2dfad2b0d1 file chooser: Memory handling fixes
I forgot to clean up the long press gesture, and in additon, creating
the rename popover from the ui template was causing the tree view
to not be disposed when the file chooser goes away. Work around this
by manually unsetting the relative-to widget of the popover in dispose.
2015-07-20 11:12:49 -04:00
Ting-Wei Lan
50a2428739 Fix return value error in gtk_stack_get_interpolate_size 2015-07-20 21:55:40 +08:00
Daniel Mustieles
fb3adebde2 Updated Spanish translation 2015-07-20 12:00:21 +02:00
Daniel Mustieles
98f4e0656a Updated Spanish translation 2015-07-20 12:00:01 +02:00
Jonas Ådahl
2943bfef46 wayland: Always apply scaling factor to cursor hotspot and dimension
Prior to this patch, the hotspot would be passed in buffer coordinate
space. Where this were ever tested, i.e. in a patched mutter, the
server interpreted them incorrectly, which meant it went undiscovered.
In the updated mutter patches the incorrect behavior in GTK+ was
discovered due to the behavior in mutter was corrected.

In the themed cursor case, the dimensions were not correctly scaled
either, but this had no negative visible effect because the dimension is
only used for reporting damage tracking, and passing a bigger damage
region than surface has no negative visible effects.

https://bugzilla.gnome.org/show_bug.cgi?id=752616
2015-07-20 17:36:38 +08:00
Timm Bäder
ddcb309b5b GtkPopover: Set interpolate-size on the stack...
... in gtk_popover_bind_model
and gtk_popover_menu_init
2015-07-20 10:26:06 +02:00
Timm Bäder
469db13b81 GtkStack: Add interpolate-size property
And use it to determine whether we should actually interpolate between
stack sizes or not.
2015-07-20 10:26:06 +02:00
Matthias Clasen
1da92c2800 GtkListBox: Improve focus scrolling
We are trying to scroll the header in view together with the
focus row. The way this is implemented works fine when scrolling
up, but falls short when scrolling down. Fix this by making sure
that both the row and the header bar visible.
2015-07-19 22:18:58 -04:00
Matthias Clasen
52c4955d21 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-19 22:08:36 -04:00
Matthias Clasen
55652b6b09 places sidebar: Improve keynav
Remove the code in the sidebar keypress handler that imperfectly
reproduces what GtkListBox already does: moving selection and
focus in response to arrow keys.
2015-07-19 22:07:21 -04:00
Matthias Clasen
bd41c92b28 trivial: Some reformatting 2015-07-19 17:39:23 -04:00
Matthias Clasen
5b5b4de495 places sidebar: Remove pointless code
No need to set or unset adjustments explicitly.
2015-07-19 17:37:39 -04:00
Matthias Clasen
f263c11ce8 spin button: Add Home and End as key bindings
Make these go to the lower/upper boundary of the adjustment, like
Ctrl-PageUp/PageDown already do.
https://bugzilla.gnome.org/show_bug.cgi?id=309300
2015-07-19 17:17:53 -04:00
Matthias Clasen
e7fe194b2d GtkWidget: Add custom font map support
This allows to use a custom font map for parts of the widget
hierarchy - this can be used for application-specific fonts.

https://bugzilla.gnome.org/show_bug.cgi?id=751812
2015-07-19 16:58:43 -04:00
Matthias Clasen
c9a2e4c0a3 font chooser: Add placeholder text to preview entry
This will make things more understandable if an application
sets an empty preview text.
https://bugzilla.gnome.org/show_bug.cgi?id=725551
2015-07-19 16:52:03 -04:00
Daniel Hams
e0f0197d0c GdkGLContext little fix to property names and descriptions.
https://bugzilla.gnome.org/show_bug.cgi?id=752502
2015-07-19 14:14:25 -04:00
Matthias Clasen
dbeb41eaa2 Updates for 3.17.5 2015-07-19 14:04:47 -04:00
Matthias Clasen
defc3d8cbc builder-tool: Don't strip border-width
Strictly speaking, this would only have to be special-cased inside
GtkDialog, but lets just skip it altogether.
2015-07-19 13:18:30 -04:00
Matthias Clasen
f881f37789 Fix csd decorations
By accident, commit b9b17c3c2a removed one line
that wasn't unused, but important for hiding close buttons on
dialogs. Bring it back.
2015-07-19 09:59:18 -04:00
Yosef Or Boczko
4fbd9a3d28 Updated Hebrew translation 2015-07-19 10:59:19 +03:00
Benjamin Otte
04883e72fa window: Set the type hint when it changes, not just on map()
There is no reason to wait until map() to reset a type hint on the GDK
window. Just set it when it changes.
2015-07-19 04:45:25 +02:00
Benjamin Otte
b0ac837271 window: g_object_notify() on type-hint change 2015-07-19 04:45:25 +02:00
Benjamin Otte
38a07cde75 window: Don't update type hint when it didn't change 2015-07-19 04:45:25 +02:00
Benjamin Otte
7a16039c2d window: Allow setting type hint on mapped windows 2015-07-19 04:45:25 +02:00
Benjamin Otte
8a238c7886 window: Don't keep 2 type hints
1. This confuses the code as it's using the old type hint with the new
type hint on GDK window creation

2. It only existed as a workaround for old code that directly accessed
window->type_hint which hasn't been possible since 3.0.
2015-07-19 04:45:25 +02:00
Pedro Albuquerque
fbbc203f23 Updated Portuguese translation 2015-07-18 10:24:02 +00:00
Pedro Albuquerque
4354b0598a Updated Portuguese translation 2015-07-18 10:19:20 +00:00
Marek Černocký
c7202b975f Updated Czech translation 2015-07-18 09:42:25 +02:00
Benjamin Otte
8d3bcb6ef8 combobox: Simplify code
We don't add new children to the child's parent, we add them to ourself.
Because guess who a child's parent is?
2015-07-18 05:39:01 +02:00
Benjamin Otte
d071415d56 combobox: Remove unused header function functionality 2015-07-18 05:18:19 +02:00
Benjamin Otte
1ec7f435d8 combobox: Remove unused argument from private function 2015-07-18 05:18:19 +02:00
Matthias Clasen
c27b90cc79 Fix the build 2015-07-17 20:45:28 -04:00
Matthias Clasen
7fd307f881 Revert "GtkGrid: Add a few NULL checks"
This reverts commit e215db6da2.

We are actually requiring non-NULL out arguments here now.
2015-07-17 20:18:34 -04:00
Matthias Clasen
ccfacb383c testgtk: Remove pointless code
The display is getting overwritten immediately. Pointed out by
coverity.
2015-07-17 19:54:09 -04:00
Matthias Clasen
d8a40c4587 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:52:52 -04:00
Matthias Clasen
0bb2567ff5 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:19:24 -04:00
Matthias Clasen
a9ee745dc1 file chooser: remove an unused GError variable
Pointed out by coverity
2015-07-17 19:19:03 -04:00
Matthias Clasen
2eb39a3b7a inspector: Remove some dead code
Not sure what I was thinking here. Coverity pointed this out.
2015-07-17 18:47:39 -04:00
Matthias Clasen
ff86433ea1 inspector: Avoid a NULL deref 2015-07-17 18:42:24 -04:00
Matthias Clasen
ee43462d74 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 18:41:14 -04:00
Matthias Clasen
0ebcc56a77 tooltip: Remove unnecessary checks
Coverity uses these as clues to complain.
2015-07-17 18:40:37 -04:00
Matthias Clasen
361915628d list box: Remove unnecessary checks
Again, coverity takes these as clues to complain.
2015-07-17 18:40:11 -04:00
Matthias Clasen
6a9944cbc5 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 18:39:14 -04:00
Matthias Clasen
e215db6da2 GtkGrid: Add a few NULL checks
Coverity complained about these.
2015-07-17 18:38:59 -04:00
Matthias Clasen
363e791d08 GtkActionHelper: Avoid null deref in debug code 2015-07-17 18:38:01 -04:00
Matthias Clasen
bb29c1fcc5 gdk: Add some parameter checking
This may help coverity recognize that we're not called with
invalid combinations.
2015-07-17 18:37:20 -04:00
Matthias Clasen
2b105dc3d9 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:11:17 -04:00
Matthias Clasen
0ee14211b1 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:11:17 -04:00
Matthias Clasen
1b8d06da2d 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:11:16 -04:00
Matthias Clasen
f960d4f486 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:11:16 -04:00
Matthias Clasen
8ba55d80fc 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:11:16 -04:00
Matthias Clasen
91b147622b 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:11:16 -04:00
Matthias Clasen
770fc90e7c gtk-demo: Check a return value
Found by coverity.
2015-07-17 16:11:16 -04:00
Benjamin Otte
6c862f229f css: Fix GtkCssChange enum
Previously, the (1<<31) value evaluated to the 64bit value
  0xFFFFFFFF80000000
instead of
  0x0000000080000000
Avoid this by explicitly casting the value to unsigned long long.

Also cast all values to unsigned long long to achieve consistency
and hopefully in the future get new values added the same way.
2015-07-17 22:06:16 +02:00
Benjamin Otte
dbb1830728 headerbar: Switch css positions on direction change 2015-07-17 19:13:09 +02:00
Balázs Úr
0480517886 Updated Hungarian translation 2015-07-17 14:25:22 +00:00
Matthias Clasen
9b81372ad9 file chooser: Improve popover positioning
We keep the popover vertically tied to the selected row, but pick
up the horizontal position from the click / touch.
2015-07-17 08:57:40 -04:00
Matthias Clasen
7627ed8000 places sidebar: Preserve ::populate-popup functionality
We "fix" this signal the same way we did for GtkEntry and
GtkTextView: slightly change the signature so that the passed
widget may be a container other than a GtkMenu, and add a
property to explicitly opt in to receiving the signal in
this case.
2015-07-17 08:57:39 -04:00
Matthias Clasen
33cc51d994 file chooser: Use a popover for the context menu
Use a popover for the context menu, and add a long press gesture
to allow opening it with touch.
2015-07-17 08:57:39 -04:00
Matthias Clasen
e08c5262b7 places sidebar: Use a popover for the context menu
Use a popover for the context menu, and add a long press gesture
to allow opening it with touch.
2015-07-17 08:57:39 -04:00
Ignacio Casal Quinteiro
186c8f5254 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-17 14:26:11 +02:00
Matthias Clasen
02577ddb06 inspector: Avoid a gratitious use of g_strv_length
No need to count the strings first before iterating over them.
2015-07-16 23:42:55 -04:00
Matthias Clasen
1fb075dbca file chooser: Make bindings work in save entry
With the name entry being in the header bar now, we no longer
get bindings working by just letting the key event bubble up,
we have to explicitly apply them on key events that the save
entry is not handling.
2015-07-16 23:38:47 -04:00
Timm Bäder
c53bed3b39 GtkFileChooserButton: Don't update icon/label so often
They were updated in style-changed, causing the label to get set to
(None), then to the actual file name again a frame later, both of the
updates cause the GtkFileChooserButton to resize, possibly to the
minimal width, causing the layout to jump. Fix this by only updating
icon/label in style-updated when the icon theme actually changed, which
is the only case we care about here.

https://bugzilla.gnome.org/show_bug.cgi?id=752509
2015-07-17 05:36:44 +02:00
Timm Bäder
2902585518 gtkprintunixdialog: Set border_width to 0 2015-07-16 18:37:13 +02:00
Emmanuele Bassi
e259b2f30d Avoid O(n²) walking of string arrays
"Yo, we heard you like traversing NULL-terminated arrays to operate on
them, so we called g_strv_length() as the for condition, so you can
iterate the array while iterating the array."

Instead of making famed rapper and television producer Xzibit proud, we
should avoid calling g_strv_length() on an array while looping on the
array, to avoid quadratic complexity.

We do this in various places that deal with arrays of strings that we
cannot really guess are short enough not to matter — e.g. the list of
CSS selectors in the inspector, or the required authentication
information for printing.
2015-07-16 16:19:55 +01:00
Georges Basile Stavracas Neto
3b41daca78 placessidebar: show persistent drives when not showing Other Locations
Previous commits changes the behavior of GtkPlacesSidebar, as it stops
handling persistent devices and only manages mounted networks, XDG
directories and bookmarks.

By radically breaking the previous behavior, we may have trouble
since we provide no alternatives to that besides the private widget
GtkPlacesView.

Fix that by showing the persistent devices when not showing Other
Locations item.
2015-07-16 11:41:03 -03:00
Emmanuele Bassi
b274a2656d 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-16 14:55:25 +01:00
Georges Basile Stavracas Neto
a39b8f67ba placessidebar: fix Connect to Server position
Commit 7db399d975 introduces
the Other Locations item, as well as some behavioral changes
to GtkPlacesSidebar. It, howevers, wrongly changes the section
of code that handles the Connect to Server item, with various
side effects depending on the environment setup.

Fix that by adding the Connect to Server at the right section
of code.
2015-07-16 09:37:56 -03:00
Yosef Or Boczko
40efaf67bf Updated Hebrew po-properties translation 2015-07-16 12:59:49 +03:00
Yosef Or Boczko
0916b58d02 Updated Hebrew translation 2015-07-16 12:54:42 +03:00
Yosef Or Boczko
09baf865b6 Updated Hebrew translation 2015-07-16 12:44:56 +03:00
Daniel Mustieles
9a0fcfe081 Updated Spanish translation 2015-07-16 10:41:16 +02:00
Daniel Mustieles
a2a227f939 Updated Spanish translation 2015-07-16 10:40:58 +02:00
Piotr Drąg
5b8938440b Updated POTFILES.in and POTFILES.skip 2015-07-16 06:49:33 +02:00
Benjamin Otte
bc19ea965f tests: Remove testplacesview test
The GtkPlacesView widget was made private, so we can't create it in a
testcase.
2015-07-16 06:37:37 +02:00
Benjamin Otte
974c60a0d5 tests: Fix gcc complaints about testfilechooser 2015-07-16 06:37:32 +02:00
Benjamin Otte
3d2ead0fce headerbar: Get rid of get_path_for_child()
Instead, reorder CSS nodes.
2015-07-16 06:15:13 +02:00
Benjamin Otte
a039fd1699 headerbar: Finish widget setup before showing it. 2015-07-16 06:15:13 +02:00
Benjamin Otte
792076e09b headerbar: forall() the button boxes in the right order 2015-07-16 06:15:13 +02:00
Benjamin Otte
b9b17c3c2a headerbar: Remove unused variables in private struct 2015-07-16 06:15:13 +02:00
Benjamin Otte
8e87988179 toolbar: Switch from get_path_for_child() to css node managing 2015-07-16 06:15:13 +02:00
Benjamin Otte
a7680c68de cssnode: Add gtk_css_node_reverse_children() 2015-07-16 06:15:13 +02:00
Benjamin Otte
6e4f42f97e cssnode: Change API of some functions
gtk_css_node_set_after/before() are now called
gtk_css_node_insert_after/before().

This brings them in line with other similar APIs (ie GtkListStore). And
it allows easier usage of the API (see changes to gtkbox.c).
2015-07-16 06:15:13 +02:00
Georges Basile Stavracas Neto
79f2400c0d filechooserwidget: use places view to manage fixed devices
Previous patch modified places sidebar widget to stop handling
fixed devices by adding an "Other Locations..." item. Up to now,
however, these changes are isolated from each other since the
bundled file manager widgets ignore the sidebar requests for
external management of fixed devices and networks.

To fix that, make the file chooser widget be aware of the
GtkPlacesSidebar::show-other-locations signal and, when requested,
show places view to manage the fixed devices and networks.

https://bugzilla.gnome.org/show_bug.cgi?id=752034
2015-07-15 23:11:52 -03:00
Georges Basile Stavracas Neto
7db399d975 placessidebar: add Other Locations item
Places sidebar is a widget that enabled the user to select
XDG directories, bookmarks and mounted network locations,
as well as manages permanent and removable devices.

The new design that aims to look less clutered makes the
sidebar display only removable devices, as well as mounted
networks, bookmarks and XDG directories, and delegates the
management of permanent devices such as hard drive partitions
to GtkPlacesView, a newly introduced widget for this specific
purpose.

To delegate it, add an "Other Locations..." item to notify
when the permanent devices manager is required. Besides that,
don't show these fixes devices on the sidebar itself, as they
are not supposed to be handled by the sidebar anymore.

https://bugzilla.gnome.org/show_bug.cgi?id=752034
2015-07-15 23:11:52 -03:00
Georges Basile Stavracas Neto
7af88d40b1 placesview: add view for fixed drives and networks
Places sidebar shows XDG directories, mounted and unmounted devices,
connected networks, bookmarks and actions like 'Connect to server'
and 'Insert location', which causes the sidebar to grow very quickly
and look cluttered. Because of that, new mockups for the sidebar try
to simplify it.

To make the sidebar simpler, the new mockups propose that it should
only handle connected networks and removable devices such as flash
drives and USB devices, and delegates other devices for external
widgets through the 'Other Locations' item.

To handle fixed devices and manage network connections, add a new
widget named GtkPlacesView, based on Nautilus mockups to keep
consistency between GNOME file management tools - in this case,
between Nautilus and the bundled Gtk's file chooser.

https://bugzilla.gnome.org/show_bug.cgi?id=752034
2015-07-15 23:11:52 -03:00
Carlos Garnacho
72bfb40ccf Revert "x11: Query pointer devices' scroll valuators on toplevel enter events"
This reverts commit 77b8495bc4.

The commit broke more scenarios than fixed, better to go back to square one.
2015-07-15 21:19:25 +02:00
Owen W. Taylor
6504b2e534 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:46:06 -04:00
Matthias Clasen
24e1323eb3 places sidebar: Handle menu key
It is good practice to handle the menu key and Shift-F10 to
allow keyboard-driven use of context menus.
2015-07-15 12:46:06 -04:00
William Hua
bd71b801de mir: don't ensure_surface if window not visible 2015-07-15 07:43:55 -04:00
William Hua
064f28fcbc mir: don't warn if transient_for is NULL 2015-07-15 07:43:55 -04:00
William Hua
b32899b98a mir: add more default settings under mir 2015-07-15 07:43:55 -04:00
Pedro Albuquerque
88b278b45c Updated Portuguese translation 2015-07-15 10:02:38 +00:00
Daniel Mustieles
34388d147f Updated Spanish translation 2015-07-15 11:13:29 +02:00
Matthias Clasen
e7c0bb6025 file chooser: Show progess spinner even if not empty
With the previous approach, we could only show the spinner
before we had any results. With the new approach, we can just
leave the timeout in place and always show the spinner until
the search is done.
2015-07-15 00:15:44 -04:00
Matthias Clasen
6d757750f1 file chooser: Stop search when entry is cleared 2015-07-15 00:12:33 -04:00
Matthias Clasen
5bd6013165 file chooser: Refine search progress display
Move the spinner to the search bar, so we can keep it around
until the search is over.
2015-07-15 00:03:09 -04:00
Matthias Clasen
eb67d14551 file chooser: Be more careful with subtitles
We were showing things like "Searching in (null)" if the current
folder is not in the sidebar. Avoid that by falling back to using
current_folder.

Pointed out by Carlos Soriano.
2015-07-14 23:50:40 -04:00
Ryan Lortie
a00a5ed210 GtkApplication: avoid using stale timestamps
Avoid using a stale timestamp (from the last user interaction with the
application) when a message arrives from D-Bus requesting that a new
window be created.

In this case the most-correct thing that we can do is to use no
timestamp at all.

We modify gdk_x11_display_set_startup_notification_id() to allow a NULL
value to mean "reset everything" and then call this function
unconditionally on receipt of D-Bus activation requests.  The result
will be that a missing desktop-startup-id in the platform-data struct
will reset the timestamp.

Under their default configuration metacity and mutter will both map
windows presented with no timestamp in the foreground.  This could
result in false-positive, but there is very little we can do about that
without the original timestamp from the user event.

https://bugzilla.gnome.org/show_bug.cgi?id=752000
2015-07-14 18:34:09 -07:00
Jasper St. Pierre
18dbe181fb gtkframe: Don't queue a redraw on the entire widget every size allocate
Lots of applications often use GtkFrame as a giant toplevel container,
and that means that they get size allocated often. When frames get size
allocated, they invalidate their entire widget tree, even if they
haven't changed size or anything like that happens at all. This is
because the shadow / label needs to be redrawn if the child changes
size. We can optimize this out and only mark ourselves for a redraw if
the child has actually changed its size.
2015-07-14 18:32:45 -07:00
Lars Uebernickel
2dda89cbd5 GtkButtonBox: remove spacing when buttons are linked
GtkButtonBox adds the "linked" class to its style context when its
layout is set to GTK_BUTTONBOX_EXPAND. It shouldn't ever make sense to
have spacing between buttons in that case, as themes generally draw
linked elements with a continuous border.

Thus, always set spacing to 0 and ignore GtkDialog's button-spacing
style property when the layout is set to EXPAND.

Also remove the now-redundant css rules which set button-spacing to 0
for message dialogs.

https://bugzilla.gnome.org/show_bug.cgi?id=752131
2015-07-14 15:12:56 +02:00
Matthias Clasen
0f479deb5e range: Tweak button bindings
Change things around so that warp-to-click and jump-by-pages are
bound to left-click and shift-left-click, depending on the value
of gtk-primary-button-warps-slider. Autoscrolling is bound to
right-click.

To achieve this, reorganize gtk_range_multipress_gesture_pressed
so that the functions are clearly separated.
2015-07-13 22:40:43 -04:00
Daniel Mustieles
437254d20f Updated Spanish translation 2015-07-13 10:51:18 +02:00
Daniel Mustieles
c459413005 Updated Spanish translation 2015-07-13 10:51:05 +02:00
Kalev Lember
6b05a686dc GtkSettings: Fix a documentation typo 2015-07-12 20:18:17 +02:00
Matthias Clasen
1ca6d8b1b5 range: Trivial field ordering 2015-07-12 01:53:36 -04:00
Matthias Clasen
1c780beb8b range: Add a stepper alternative
Make shift right-click on the trough start autoscrolling. The
autoscrolling is similar to the way steppers operate now, with
the difference that we vary the scrolling speed based on the
distance of the pointer from the widget.
2015-07-12 01:42:03 -04:00
Matthias Clasen
6e280d2478 range: switch secondary and middle button on steppers
Clicking on steppers does different things depending on which
button you use. We used to scroll to the end on secondary click
and use high-speed autoscrolling on middle-click. Switch these
two around, since the scroll-to-end functionality is less likely
to be useful, and the seconary button makes the autoscrolling
more easily available.
2015-07-12 00:23:32 -04:00
Matthias Clasen
f35c7b83d9 font chooser: Remove a stray notify
This was forgotten when I changed to font map to not be a
property.
2015-07-11 00:15:42 -05:00
Matthias Clasen
301cf24b33 file chooser: Clean up unused includes 2015-07-11 00:15:42 -05:00
Matthias Clasen
995e87322c file chooser: Remove some obsoltete code
We no longer have editable rows in the list, so no need to
check for them anymore.
2015-07-11 00:15:42 -05:00
Matthias Clasen
0c7237f15e file chooser: Fix multi-selection
Even if we only ever hit the code with a singleton selection,
calling gtk_tree_selection_get_selected is not ok if the tree
selection mode allows multi-selection. Replace all calls to
gtk_tree_selection_get_selected in the file chooser code with
callback loops iterating over the selection. This problem
was introduced with the recently added rename and delete
menuitems.
2015-07-11 00:15:42 -05:00
Matthias Clasen
24dc6f8771 file chooser: Do less work
We only need to update the sensitivity of the context menu
items rihgt before we are going to pop it up. Everything else
is pointless work.
2015-07-11 00:15:42 -05:00
Matthias Clasen
201d4c1101 file chooser: Avoid doing excess work
Whenever we change directories, we unset the model, and then
we set a new model. This causes several emissions of
GtkTreeSelection::changed, for each of which we do a bunch
of work to update the path bar, the location entry, etc.

We can savely ignore some of these signals, and do less work.
2015-07-11 00:15:42 -05:00
Matthias Clasen
72a8064c7d Trivial code cleanup 2015-07-11 00:15:41 -05:00
Matthias Clasen
410d180b45 file chooser: Avoid animations when setting up
There is no need to animate things when we are just setting up
the startup mode, so disable transitions in the revealer and
the stack. Pointed out by Carlos Soriano
2015-07-11 00:15:41 -05:00
Matthias Clasen
e43ba9d726 file chooser: Ensure we update subtitles
Notify the ::subtitle property when modes change that may
affect it. Also ensure that we update the location mode when
we switch back to the pathbar.
2015-07-11 00:15:41 -05:00
Benjamin Otte
190f025f74 cssnode: Only queue_validate() when node is visible
This avoids running animations in hidden toplevels.
2015-07-10 21:44:32 +02:00
Benjamin Otte
adcb52e82b cssnode: Only invalidate sibling nodes if changed node is visible 2015-07-10 21:44:32 +02:00
Pedro Albuquerque
c05cd611e6 Updated Portuguese translation 2015-07-10 08:37:25 +00:00
Eric Williams
6038474060 Added an additional explanation and code snippet for GtkImageMenuItem.c
https://bugzilla.gnome.org/show_bug.cgi?id=752093
2015-07-08 13:53:07 -04:00
Eric Williams
a74a3da745 Added a more meaningful description for /deprecated/gtkimagemenuitem.c
https://bugzilla.gnome.org/show_bug.cgi?id=752088
2015-07-08 06:10:00 -04:00
Matthias Clasen
8e53a01188 places sidebar: Fix rows getting 'lost' when dnd fails
There was some code that lead to the places sidebar loosing track
of the row being dragged if a motion event came in between letting
go of the button and the drag snap-back animation ending. This would
cause us to not show the row again, giving the appearance that it
was 'lost'.

https://bugzilla.gnome.org/show_bug.cgi?id=751448
2015-07-08 06:10:00 -04:00
Benjamin Otte
8756c03885 testtoolbar: Don't expand rows that shouldn't be expanded 2015-07-08 05:48:59 +02:00
Benjamin Otte
0f6c955795 frame: Remove get_path_for_child implementation
As far as I can read the code it added the .frame style class to the
GtkFrame element. But GtKFrame already has a .frame style class these
days.
2015-07-08 05:48:59 +02:00
Benjamin Otte
6379a425b0 actionbar: Remove get_path_for_child implementation
It wasn't used because CSS walks the widget->parent chain, so it'd only
ever call this func for priv->revealer.
2015-07-08 05:48:59 +02:00
Benjamin Otte
7f8de66c0a css: text-decoration-style is not inherited 2015-07-08 05:48:59 +02:00
Matthias Clasen
bdf0820c50 Simplify Xft setting fallback
If we don't find Xft values in the X resource db, simply fall
back to the values that are hardcoded in /etc/X11/Xresources
anyway. Extra trickery with likely-made-up screen dimensions
is not going to yield better results, and only makes for a
deeper rabbit hole when debugging.
2015-07-07 20:54:16 -04:00
Carlos Soriano
3fb1d1806d gtksidebarrow: remove unused property
The sensitive property was a workaround which commit
3f8982a0cd fixed.
Just remove it now that is not necessary.
2015-07-07 23:01:47 +02:00
Carlos Soriano
0f935a0483 gtkrevealer: fix preferred width calculation
A typo which was using minimum_width for natural_width and viceversa.
2015-07-07 22:49:45 +02:00
Piotr Drąg
d51e8a73cb Fix a minor typo 2015-07-07 21:51:55 +02:00
Piotr Drąg
254f13d103 Updated Polish translation 2015-07-07 20:27:46 +02:00
Tom Schoonjans
7d43cda493 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 09:36:29 -07:00
Ryan Lortie
d2f27bfe71 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-07 09:28:59 -04:00
Carlos Garnacho
9e2092d306 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-07 12:50:14 +02:00
Carlos Garnacho
dadb2750b1 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-07 11:24:37 +02:00
Pedro Albuquerque
4b31962475 Updated Portuguese translation 2015-07-07 05:25:12 +00:00
Matthias Clasen
826c1db859 file chooser: Add a shortcut to focus the sidebar
Alt+P used to do this in the gtk2 filechooser (well, sometimes).
Add this back as a key binding.

https://bugzilla.gnome.org/show_bug.cgi?id=720684
2015-07-07 00:25:22 -04:00
Matthias Clasen
fb316156e2 place sidebar: Make removing bookmarks work again
This was accidentally broken in ae8c07c67c when I
forgot to switch the sense of a condition.
2015-07-06 23:21:51 -04:00
Matthias Clasen
e1211577b3 file chooser: Make delete confirmation match nautilus
No need to diverge here.
2015-07-06 23:03:56 -04:00
Matthias Clasen
b96b796a8d file chooser: Separate out delete and trash
We only ever show one of the two context menu items (and we prefer
Move to Trash over Delete). Only use the confirmation dialog when
deleting.
2015-07-06 22:57:40 -04:00
Matthias Clasen
3cbe6d86af place sidebar: minor change
We generally prefer for loops to iterate over lists.
2015-07-06 21:59:10 -04:00
Matthias Clasen
06f9102840 file chooser: Allow rename-to-self
When checking for a name clash for renaming, don't complain if the
name is unchanged. That's harmless.
2015-07-06 21:39:39 -04:00
Matthias Clasen
7c9e3df198 wip: reshuffle name checks 2015-07-06 21:35:03 -04:00
Matthias Clasen
88cee9288b file chooser: Remove unused field 2015-07-06 20:57:11 -04:00
Matthias Clasen
56af2358de file chooser: Clear search entry when it goes away
Keeping the entry contents conflicts with type-to-search.
2015-07-06 20:50:08 -04:00
Paolo Borelli
1eb1481bdf css: support text-decoration-style
The support is limited to underline single, double and wavy, which
is what pango has today.
2015-07-06 20:06:20 +02:00
Michael Catanzaro
09273d91f3 wayland: print correct coordinates during DnD
Convert wl_fixed values to floats for printing, rather than printing
them as non-meaningful integers.

https://bugzilla.gnome.org/show_bug.cgi?id=752025
2015-07-06 11:32:26 -05:00
Carlos Garnacho
3f8982a0cd gtkdnd: Traverse across insensitive widgets
The current widget lookup code bails out on insensitive widgets, there's
however legit cases where we want DnD handled by a parent of the insensitive
widget, so just keep going upwards in that case.

We also use now the widget state flags, because get_sensitive() doesn't
propagate across hierarchies, so we could conceivably find a drop site
inside an insensitive widget.

https://bugzilla.gnome.org/show_bug.cgi?id=751793
2015-07-06 18:19:07 +02:00
Carlos Garnacho
7f57f63eba gtkwindow: Only allow unrestricted positioning to text handle popovers
This behavior has been made optional on add_popover() time, text handles
will keep being able to overflow the window, in order to allow text
selection on views too close to the window edge.

Regular GtkPopovers are reinstaurated to the previous size positioning
logic though, that is, limited by the visible area of the window.
2015-07-06 16:39:06 +02:00
Carlos Garnacho
dec95caf94 scrolledwindow: Keep scrollbars out of GtkScrollable::get_border
It looks a bit odd that scrollbars stay over treeview headers and
similar, seems nicer to just avoid the border regions.

https://bugzilla.gnome.org/show_bug.cgi?id=751805
2015-07-06 16:37:31 +02:00
Benjamin Otte
4cbab1180c cssmatcher: Make nth-child(odd) work on first line
.. instead of only on 3rd, 5th, 7th, ...
2015-07-06 15:33:50 +02:00
Benjamin Otte
8d3737e4e3 cssnode: Do finer-grained position invalidation
As a side effect, this should fix this bug:

https://bugzilla.gnome.org/show_bug.cgi?id=751910
2015-07-06 15:33:50 +02:00
Benjamin Otte
df7113812b csstypes: Change NTH_CHILD and NTH_LAST_CHILD change propagation
For now assume that if those flags change for a node, they also changed
for all sibling nodes. This is not strictly true but simplifies
invalidation.

The reason it simplifies invalidation is that when removing or adding a
node, we can just invalidate the first node (for NTH_LAST_CHILD) and the
new node (for NTH_CHILD) and all the other nodes will be invalidated
automatically.
2015-07-06 15:33:50 +02:00
Benjamin Otte
69e396ea0a cssselector: Report finer granularity for position changes 2015-07-06 15:33:50 +02:00
Benjamin Otte
6323010e2e csstypes: expand GtkCssChange enum
Instead of GTK_CSS_CHANGE_POSITION we now have 4 values:
GTK_CSS_CHANGE_FIRST_CHILD, GTK_CSS_CHANGE_LAST_CHILD,
GTK_CSS_CHANGE_NTH_CHILD and GTK_CSS_CHANGE_NTH_LAST_CHILD

Nobody is using them directly yet.
2015-07-06 15:33:50 +02:00
Jasper St. Pierre
abc47d7faa 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-05 17:00:52 -07:00
Paolo Borelli
803430a779 pango: make merge_attrs return the merged list
This simplifies all the callers
2015-07-06 00:31:56 +02:00
Paolo Borelli
180a378a07 css: add shorthand text-decoration property
Note that for now we take into account only text-decoration-line
and text-decoration-color
2015-07-06 00:04:06 +02:00
Paolo Borelli
a57e6731c4 css: support text-decoration-color 2015-07-06 00:04:06 +02:00
Paolo Borelli
77658b76ae linkbutton: use the text-decoration-line css
Remove the custom add() implementation and use css to underline the
label.
2015-07-06 00:04:06 +02:00
Paolo Borelli
384df61c90 css: add support for text-decoration-line 2015-07-06 00:04:06 +02:00
Paolo Borelli
9e26fa9a42 entry: add css letter-spacing 2015-07-06 00:04:06 +02:00
Paolo Borelli
a19331f231 label: add support for CSS letter-spacing property
Support letter-spacing CSS property on GtkLabel.
Reftest is included.
2015-07-06 00:04:05 +02:00
Paolo Borelli
b92c530a61 pango: move an utility function from gtklabel
This will be used both by gtklabel and gtkentry
2015-07-06 00:04:05 +02:00
Dimitris Spingos
3175d0fcf0 Updated Greek translation 2015-07-06 02:28:20 +03:00
Ting-Wei Lan
5436c74a19 Fix return value error in _gtk_file_system_model_get_directory 2015-07-06 03:27:42 +08:00
Pedro Albuquerque
c222d59f53 Updated Portuguese translation 2015-07-05 10:02:44 +00:00
Matthias Clasen
39822092f4 file chooser: Allow deleting files
This is another often requestsed feature for save mode.

Based on a patch by John Beard,
https://bugzilla.gnome.org/show_bug.cgi?id=325150
2015-07-04 23:46:11 -04:00
Matthias Clasen
15617a69aa file chooser: Allow renaming files
This has often been requested as a useful feature in save mode.

Based on a patch by John Beard,
https://bugzilla.gnome.org/show_bug.cgi?id=325150
2015-07-04 22:44:30 -04:00
Matthias Clasen
530d295a2e Fix up some whitespace mishap 2015-07-04 22:38:30 -04:00
Matthias Clasen
8379ef3067 file chooser: Redo the trailing space warning
Redo this slightly differently, so we can keep all the simple
checks in one place. This will make it easier to reuse the code
for file renaming.
2015-07-04 22:38:30 -04:00
Matthias Clasen
8b90c79037 places sidebar: Fix memory handling of rename popover
We were freeing the same string twice here, leading to
badness.
2015-07-04 22:38:29 -04:00
Arc Riley
94bcdd3217 Strip leading and trailing whitespace from filechooser save filenames
This makes a local copy of the file part of the entry to strip it transparently
Since this is assumed to be a mistake, the user is not notified.

https://bugzilla.gnome.org/show_bug.cgi?id=593372
2015-07-04 19:21:45 -04:00
Arc Riley
02b5ac9ee4 Warn for whitespace at beginning or end of new folder names
The warning is not intended to disable the Create button and must only be shown
when the folder is not found, so this is implemented in the folder name exists
callback.

A "name" entry was added to FileExistsData to pass the filename to the callback

https://bugzilla.gnome.org/show_bug.cgi?id=751800
2015-07-04 18:57:13 -04:00
Emmanuele Bassi
d2569a3860 docs: Drop deprecated symbolic icon names
Do not suggest using icons that do not exist.
2015-07-04 19:34:23 +01:00
Emmanuele Bassi
c5a250ce37 container: Update the add() warning
Now that gtk_widget_reparent() has been deprecated, we should not
suggest it.
2015-07-04 19:34:23 +01:00
Pedro Albuquerque
bea3cbaba5 Updated Portuguese translation 2015-07-04 07:54:42 +00:00
Pedro Albuquerque
6c8f7aae4f Updated Portuguese translation 2015-07-04 07:47:04 +00:00
Matthias Clasen
309c845e69 file chooser: Make Ctrl-L work in search mode
There is no real reason to not allow this. The transition is
not quite as smooth as it should be, currently, but at least
it works.
2015-07-04 00:29:27 -04:00
Matthias Clasen
a453212591 file chooser dialog: Make button not take focus
Things work smoother, keynav-wise, if the search button does not
take focus on click.
2015-07-04 00:29:27 -04:00
Matthias Clasen
4dafcf9c8b file chooser: Make unsetting save entry work
Fix an overzealous assertion.
2015-07-04 00:29:27 -04:00
Matthias Clasen
017025c1a7 file chooser dialog: Make action changes work
We were not listening for action changes to update the
save entry.
2015-07-04 00:29:26 -04:00
Matthias Clasen
bb6f698abe file chooser: Cleanups 2015-07-04 00:29:26 -04:00
Matthias Clasen
4a21c129e4 testfilechooser: Add a --local-only flag
This allows for easier testing of !local-only mode.
2015-07-04 00:29:26 -04:00
Matthias Clasen
29abbdd3e3 file chooser: Don't show Trash in save mode
You can't save there...
2015-07-04 00:29:26 -04:00
Matthias Clasen
78db92df7e GtkPlacesSidebar: Allow hiding Trash
We will use this in the filechooser in save mode.
2015-07-04 00:29:26 -04:00
Matthias Clasen
fa3ff773be GtkTreeViewColumn: Fix a documentation typo 2015-07-04 00:29:26 -04:00
Matthias Clasen
22294a4a0d file chooser: Improve column sizing
Allow the name and location columns to be resized, but arrange
for their sizing to be reset when the column layout changes (either
by the location column appearing/disappearing, or by the time
column changing between mtime and atime. This gives a decent
compromise between good automatic sizing and user control.
2015-07-04 00:29:26 -04:00
Matthias Clasen
ed1c349e0b file chooser: Remove a wrong assumption
The code for getting the selected files was assuming that
we are always in browse mode, and was causing warnings when
hitting Ctrl-L twice, right after opening the file chooser.

The fix is to simple use the model that is passed into the
callback.
2015-07-04 00:29:26 -04:00
Matthias Clasen
17a860cea2 file chooser: Don't show Enter Location in sidebar
Following the file chooser mockups.
2015-07-04 00:29:26 -04:00
Matthias Clasen
c7bc902093 file chooser: Update empty state for search
Follow the mockups more.
2015-07-04 00:29:26 -04:00
Matthias Clasen
191bccebf3 file chooser: Add search progress
Show a spinner if no search reasults have shown up yet and
the search is still going, after 2 seconds.
2015-07-04 00:29:26 -04:00
Matthias Clasen
31a022175f file chooser: Set fixed sort functions for recent and search 2015-07-04 00:29:26 -04:00
Matthias Clasen
0ac17418dd file chooser: Improve location column formatting 2015-07-04 00:29:26 -04:00
Matthias Clasen
39c2d12330 file chooser: Improve the mode switching operation
Avoid reloading models unnecessarily, e.g. when the user
switches to search and back without starting a search.
Keep the current list contents visible until a search is
actually started. Also, synchronize any changes in the
column layout with the corresponding model changes.
2015-07-04 00:29:26 -04:00
Matthias Clasen
9a44467318 Add a getter for the directory to file system model
This will allow us to aovid reloading if the directory is
unchanged.
2015-07-04 00:29:26 -04:00
Matthias Clasen
5763199e43 file chooser: Clean up enum handling
Use g_settings_get_set_enum to handle the clock and date format
settings.
2015-07-04 00:29:25 -04:00
Matthias Clasen
f690167b0d file chooser: Code cleanups
Shorten excessively long field names.
2015-07-04 00:29:25 -04:00
Matthias Clasen
443601addc file chooser: Consistently clear model caches
This was not done for all models in all places, leading to e.g.
icon theme updates not applying correctly to search results.
2015-07-04 00:29:25 -04:00
Matthias Clasen
2cd6d1a351 file chooser: Add a way to toggle time display 2015-07-04 00:29:25 -04:00
Matthias Clasen
215a9a1b08 file chooser: remove a stale comment 2015-07-04 00:29:25 -04:00
Matthias Clasen
8974ec7413 file chooser: Improve time and date formatting
Use the same formats as nautilus, and put date and time in
separate cells, so they are neatly aligned.
2015-07-04 00:29:25 -04:00
Matthias Clasen
1c82a533ed file chooser: Don't allow resorting recent files
They are inherently sorted by access time.
2015-07-04 00:29:25 -04:00
Matthias Clasen
412e33da16 file chooser: Use access time for recent files
Use access time for sorting the recent files, and show it in
the list instead of mtime.
2015-07-04 00:29:25 -04:00
Matthias Clasen
33b5c26f41 file chooser: Add and use a model search engine
This search engine reuses the GFileInfo that is already loaded
for the file list, to ensure that hits from the current directory
always appear promptly.
2015-07-04 00:29:25 -04:00
Matthias Clasen
f87f43b622 testfilechooser: Disable the terrible preview
It makes testing the intended user experience harder.
2015-07-04 00:29:25 -04:00
Matthias Clasen
fe128b5b4d file chooser: Don't show recent in save mode
Don't show Recent in the sidebar when we are in save mode.
We also ignore the startup-mode = recent in save mode now - we
don't want to populate the file list with recent files if Recent
is not on the sidebar. If you really want to go there, you can
still enter recent:// in the location entry.

https://bugzilla.gnome.org/show_bug.cgi?id=751653
2015-07-04 00:29:25 -04:00
Matthias Clasen
648e4a7ea9 file chooser: Add Ctrl-F as search shortcut
This is what nautilus uses, and is more discoverable than the
somewhat easter-egg Alt-S, which is still supported.
2015-07-04 00:29:25 -04:00
Matthias Clasen
5bc88bdc67 file chooser: Make search shortcut toggle
This is more in line with having a toggle button for search,
and it matches what we do e.g. in nautilus.
2015-07-04 00:29:25 -04:00
Matthias Clasen
75411efa48 file chooser: Tweak bindings in save mode
In save modes, the entry is really more for entering a name than
entering a full location, so don't go there eagerly when '.', '/'
or '~' are pressed. Make Ctrl-L work better in this mode too.
2015-07-04 00:29:25 -04:00
Matthias Clasen
1c3ccb39c7 file chooser: Trigger location entry not just from file list
Use the same code that brings up the location entry on '/',
'~' or '.' also when the focus is not on the file list. This
prevents those key presses on the sidebar from ending up in
the search entry.
2015-07-04 00:29:25 -04:00
Matthias Clasen
5825965027 file chooser: Open location entry on '.'
Typing ./ is a fairly common practice to enter a location
relative to the cwd, so make this open the location entry.
2015-07-04 00:29:25 -04:00
Matthias Clasen
a3470521ae Revert "file chooser: Open location entry more easily"
This reverts commit e6c1cbc88e.
2015-07-04 00:29:24 -04:00
Matthias Clasen
c0afb891c8 Revert "file chooser: Don't start search too eagerly"
This reverts commit f126157bfa.
2015-07-04 00:29:24 -04:00
Matthias Clasen
1883c5fb28 file chooser: Improve keynav
Some internal containers were erroneously taking focus, interrupting
the flow of tab keynav, and using arrow keynav to go from the file
list to the sidebar did not work anymore, after the recent sidebar
rewrite.
2015-07-04 00:29:24 -04:00
Matthias Clasen
710d193f91 file chooser: Give the location column more space
Giving it 15 characters makes it at least fit "Documents" without
ellipsizing.
2015-07-04 00:29:24 -04:00
Matthias Clasen
356f507059 file chooser: Sort search results better
Set a default sort function that sorts results from the
current folder first.
2015-07-04 00:29:24 -04:00
Matthias Clasen
9b5e00b3c4 file chooser entry: Capture Escape and emit :hide-entry
Make the file chooser entry optionally capture Escape
and emit a signal. Make the file chooser widget hide the
entry on that signal and go back to the path bar.
This gives us a two-level undo:
location entry -> path bar -> dialog close.
When the location entry is permanently displayed in the
header for save mode, we still let the first Escape close
the dialog.
2015-07-04 00:29:24 -04:00
Matthias Clasen
e0b81faade file chooser: Make Escape work in search entry
Arrange things so that hitting Escape during a running
search stops the search, but leaves the search results
around, and hitting Escape again leaves the search mode.
2015-07-04 00:29:24 -04:00
Matthias Clasen
0f9b87cfeb file chooser: Make location column work better
The location column did not work for search results in recent://.
Fix that by looking at the target uri in this case. Show the location
column in recent mode. And make it more similar to nautilus by
showing the full path if it is not below $HOME.
2015-07-04 00:29:24 -04:00
Matthias Clasen
f968199b02 file chooser: Make search in recent work
All that was needed here was to set the query location.
2015-07-04 00:29:24 -04:00
Matthias Clasen
0b11d8c115 file chooser dialog: Put save entry into header
When we have a header bar, put a save entry there and
make the file chooser use it.
2015-07-04 00:29:24 -04:00
Matthias Clasen
4f3f61bf5f file chooser widget: Allow external save entry
Prepare the file chooser to use an external entry in
save mode, instead of the builtin one.
2015-07-04 00:29:24 -04:00
Matthias Clasen
140a157d47 file chooser: Update sidsebar when entry goes away 2015-07-04 00:29:24 -04:00
Matthias Clasen
6516437353 file chooser: Use icon for create folder button
This follows the latest mockups.
2015-07-04 00:29:24 -04:00
Matthias Clasen
e9e4ed5f7f file chooser dialog: Show a subtitle
Use the new "subtitle" property of the file chooser widget
to display a subtitle in the headerbar, if we have one.
2015-07-04 00:29:24 -04:00
Matthias Clasen
10f5076bb5 file chooser widget: Expose a "subtitle" property
Give the file chooser widget a "subtitle" property, which
contains a short string that explains the current mode.
2015-07-04 00:29:24 -04:00
Matthias Clasen
715aba650e places sidebar: Add private api to get title
The places sidebar already does all the work to determine the
right label to use for the current location of the filechooser.
We want to use the same label in the headerbar subtitle, so
add some private API to get it.
2015-07-04 00:29:24 -04:00
Matthias Clasen
7e45b09c8e file chooser: More search rework
Drop the radio buttons for current location vs everywhere, and
always search in the current location.
2015-07-04 00:29:23 -04:00
Georges Basile Stavracas Neto
1f96f351e0 entrycompletion: no need to return boolean
The boolean _gtk_entry_completion_resize_popup's return
value is not used anywhere, and only adds more complexity
for the method.

https://bugzilla.gnome.org/show_bug.cgi?id=751913
2015-07-03 15:51:06 -03:00
William Hua
1e6c7e3af0 mir: fix mir pointer event to gdk translation 2015-07-03 13:48:13 -04:00
William Hua
2d223facdc mir: ensure parent surface before creating child surface 2015-07-03 13:48:13 -04:00
Olivier Fourdan
c806f9b709 ignore size inc when maximized/fullscreen
Under Wayland, fullscreen/maximized windows may not cover the entire
area when a size increment is specified.

Ignore size increments for fullscreen/maximized windows just like most
window managers do under X11 so that windows with size increments can
still be fullscreen or fully maximized under Wayland as well.

https://bugzilla.gnome.org/show_bug.cgi?id=751368
2015-07-03 16:21:13 +02:00
Víctor Manuel Jáquez Leal
b3166b745f drawingarea: checks parent's draw() before call it
commit 6786c9d7 introduced a bug when a drawing area is used for
rendering videos, since GtkWidgetClass doesn't set a draw()
method by itself.

https://bugzilla.gnome.org/show_bug.cgi?id=751877
2015-07-03 14:21:30 +01:00
Matthias Clasen
28e1ed4f2a Fix warnings in the font options code
This code gets called before a screen is set.
2015-07-01 23:36:29 -07:00
Matthias Clasen
a0e8d8db0b Improve the font options support
Instead of just overwriting the default options, merge the per-widget
font options with the defaults.

https://bugzilla.gnome.org/show_bug.cgi?id=751811
2015-07-01 19:15:56 -07:00
Matthias Clasen
e9b847736c Add a testcase for font options 2015-07-01 19:14:58 -07:00
Matthias Clasen
1be338fd44 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-01 18:04:56 -07:00
Jasper St. Pierre
862e0dab03 gtkwindow: Reset maximize / fullscreen_initially on state changes
Since 740bcf5, we use these properties to properly compute shadow widths
for unmapped windows. If a client calls gtk_window_maximize and a window
manager unmaximizes a window, we should draw borders, so we need to
reset these when we get the property notification.
2015-07-01 17:50:23 -07:00
Cosimo Cecchi
e67b4874eb window: don't override background every style_updated()
This queues an unnecessary resize on the toplevel, and is not needed
anymore, now that GtkWidget does not call
gtk_style_context_set_background() on the window's GdkWindow anymore.
2015-07-01 16:09:23 -07:00
Cosimo Cecchi
a1e80d99d2 stylecontext: deprecate gtk_style_context_set_background()
Nothing in GTK calls it anymore.
2015-07-01 16:09:23 -07:00
Cosimo Cecchi
d6b8261622 widget: don't call gtk_style_context_set_background()
We don't need to do this here anymore, since widgets typically render
their backgrounds now.
2015-07-01 16:09:23 -07:00
Cosimo Cecchi
a9b45e7c3c layout: add a comment for gtk_style_context_set_background()
And wrap it with G_GNUC_IGNORE_DEPRECATIONS.
Unfortunately we can't stop rendering the background altogether here.
Also, refactor some common code in a single function.
2015-07-01 16:09:23 -07:00
Cosimo Cecchi
380ebbf76d fixed: add a comment for gtk_style_context_set_background()
And wrap it with G_GNUC_IGNORE_DEPRECATIONS.
Unfortunately we can't stop rendering the background altogether here.
Also, gtk_style_context_set_background() should really be called every
time the style is updated. Fix that.
2015-07-01 16:09:23 -07:00
Cosimo Cecchi
74f2d9448f window: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
8832648846 socket: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
06b943fec9 toolitemgroup: don't use gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
e6f97f10dd textview: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
f89c86df52 revealer: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
6b0f202bf3 toolpalette: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
d4ecdbd300 viewport: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
15908cfdf9 treeview: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
18be2d697c plug: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
b4ee73a291 paned: don't call gtk_style_context_set_background() 2015-07-01 16:09:23 -07:00
Cosimo Cecchi
9230143bbf overlay: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Cosimo Cecchi
aab3d4679f offscreenwindow: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Cosimo Cecchi
b7be29390f menushell: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Cosimo Cecchi
828db3eca9 menu: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Cosimo Cecchi
db76eae41a listbox: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Cosimo Cecchi
ba2f479aa0 iconview: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Cosimo Cecchi
9696d1b4bb flowbox: don't set gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Cosimo Cecchi
1c9468c81b eventbox: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Cosimo Cecchi
6786c9d724 drawingarea: don't call gtk_style_context_set_background() 2015-07-01 16:09:22 -07:00
Pedro Albuquerque
9258b40c8b Updated Portuguese translation 2015-07-01 21:58:15 +00:00
Pedro Albuquerque
a774440baf Updated Portuguese translation 2015-07-01 21:57:37 +00:00
Alexander Larsson
ff94923666 broadway: Implement maximization 2015-07-01 21:07:28 +02:00
Carlos Garnacho
77b8495bc4 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-01 19:40:09 +02:00
Carlos Garnacho
8c9e426dc5 placessidebar: Do not set as a "track motion" DnD site
It has the unintended effect of picking the suggested action from the
context, which conflicts with the (possibly 0) status we set on our
::drag-motion handler.

Given this widget is not interested in listening to DnD from every
possible target, it is safe to just disable it.
2015-07-01 19:37:42 +02:00
Christoph Reiter
5d17b0af54 GtkWindow: don't increase the preferred size for empty windows if there is a size request set.
This fixes a reftest broken by commit 84e99b20ac

https://bugzilla.gnome.org/show_bug.cgi?id=751341
2015-07-01 09:32:19 -07:00
Carlos Garnacho
0f3995a446 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-01 07:42:41 -07:00
Krzesimir Nowak
ef93c714f8 broadway: Fix memleak in error case
https://bugzilla.gnome.org/show_bug.cgi?id=751752
2015-07-01 07:41:13 -07:00
Arc Riley
15c73a2b1a Add gtk_widget_set_font_options and gtk_widget_get_font_options
This allows a widget to override global font_options, such as hinting and
subpixel order. The widget's PangoContext is updated when this is set.

Some update code from gtk_widget_update_pango_context was moved to
update_pango_context so that gtk_widget_update_pango_context runs it.

http://bugzilla.gnome.org/show_bug.cgi?id=751677
2015-07-01 07:34:32 -07:00
Cosimo Cecchi
9913b02e3b switch: add a style property for the switch height
Instead of hardcoding an aspect ratio.
This will be replaced by min-height/max-height when we have them.

https://bugzilla.gnome.org/show_bug.cgi?id=751689
2015-06-30 13:28:26 -07:00
Dušan Kazik
6251b7bdb2 Updated Slovak translation 2015-06-30 10:20:51 +00:00
Pedro Albuquerque
64fef45208 Updated Portuguese translation 2015-06-29 22:46:43 +00:00
Pedro Albuquerque
5304a898bf Updated Portuguese translation 2015-06-29 22:46:04 +00:00
Jasper St. Pierre
04e727709d 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-06-29 14:26:45 -07:00
Piotr Drąg
6ff5db374a Updated POTFILES.skip 2015-06-29 23:07:40 +02:00
nick
802b006b37 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-06-29 20:41:04 +01:00
Carlos Garnacho
de68968f89 wayland: Return the right type atom on gdk_selection_property_get()
We mistakenly forced the "STRING" type, which was able to confuse higher
layer helpers like gtk_selection_data_get_uris(). This fixes a crash
happening anytime a drop is attempted on a GtkPlacesSidebar.
2015-06-29 18:39:33 +02:00
Carlos Garnacho
50178ce014 wayland: Prepare against NULL selection owners on data_source requests
Currently, due to the lack of progress information in the Wayland DnD
protocol, we assume a DnD operation is finished after the first
data_source.send is finished (It's either that or leaving stuck grabs).

This however breaks previous assumptions that dest widgets can request
the data multiple times, even in response to GtkWidget::drag-motion.
This leaves us with a NULL owner for the DnD atom when we aren't
finished receiving wl_data_source events yet, causing a crash.

This commit fixes the crash, the behavior left is still far from
desirable though...
2015-06-29 18:39:05 +02:00
Matthias Clasen
109572286c gtk3-demo: Group pango demos together 2015-06-28 22:46:53 -07:00
Matthias Clasen
f97786f5e9 gtk3-demo: Add a fancy text demo
This demonstrates rendering text with a pattern instead of a
single color.
2015-06-28 22:43:27 -07:00
Matthias Clasen
876a6b550b gtk-demo: Make the info bar example wrap 2015-06-28 17:41:44 -04:00
Matthias Clasen
609e04ddcf gtk-demo: Cosmetic changes
Clean up the code of many examples in minor ways, fix some memory
leaks, and avoid the use of dialogs where a regular toplevel works
just as well.
2015-06-28 17:41:35 -04:00
Matthias Clasen
be4a25231d gtk-demo: Add a spin button example
More or less copied from the spin button example in testgtk.
2015-06-28 17:40:58 -04:00
391 changed files with 66807 additions and 49588 deletions

332
NEWS
View File

@@ -1,3 +1,335 @@
Overview of Changes in GTK+ 3.17.8
==================================
* GtkFileChooser:
- Show network:/// in the places view
- Provide better loading feedback
* GtkTextView
- Fix fallout from margin/padding addition
* GtkOverlay
- Always align widgets relative to the overlay, not to the
main widget
* GtkListBox
- Support focusable headers
* Theme
- Improve performance of GtkListBox
- Better GtkCalendar theming
* Wayland:
- Make most tests work under Wayland
- Closing displays works now
- Fix key repeat sometimes running wild
* Bug fixes:
345345 PrintOperation::paginate is not emitted for class handler
736125 The default gtk accelerator mod mask does not include all ...
752615 listbox: Model items changed doesn't take sorting into account
753185 gdk_device_get_source: assertion 'GDK_IS_DEVICE (device)' f...
753357 [HighContrast] Days of a different month in GtkCalendar sho...
753495 Kinetic scrolling events still reach the GtkScrolledWindow
753644 Switching from Multipress input method to None immediately ...
753694 GtkListBox: Assumes all focusable widgets are GtkListBoxRow...
753786 Implement high priority improvements for gtkplacesview
753815 scroll fix with margin/padding
753856 wayland: Only bind supported unstable pointer gestures global
753925 Remote volumes and mounts get shuffled around
753969 check if a folder is accessible
754022 Remote locations have different actions (and icons)
754086 String marked as properties
754133 Gtk:ERROR:gtkfilechooserwidget.c:8495:post_process_ui: asse...
754150 places view network header spinner is borked
754158 wayland: Don't broadcast selection owner changes
754410 "Open" popover item on selected sidebar row does nothing
754421 settings: annotatiion typos suppress deprecation notices fo...
* Translation updates
Catalan
Chinese (Taiwan)
Galician
Greek
Hebrew
Hungarian
Indonesian
Lithuanian
Polish
Portuguese
Slovak
Spanish
Turkish
Overview of Changes in GTK+ 3.17.7
==================================
* GtkFileChooser:
- Various refinements to the places view
* GtkFontChooser:
- Make Escape stop search
- Various other keynav improvements
* GtkColorChooser:
- Make it possible to start with the editor
* GtkTextView:
- Support top margins
- Use CSS padding from the theme
* GtkFlowBox:
- Allow using a GListModel
* GtkCellRendererText:
- Support alpha in foreground color
* Theme and CSS:
- HighContrast theme improvements
* GDK:
- Add support for touchpad gesture events
* OS X:
- Implement CSD resize for all corners and edges
* Wayland:
- Support touchpad gestures
* Bugs fixed:
737804 Setting files on a GtkFileChooser twice before mainloop throws...
752814 Fix build of gtk/gtkcsstypesprivate.h
753329 quartz: Implement CSD drag resize for all edges/corners
753357 [HighContrast] Days of a different month in GtkCalendar should...
753391 [HighContrast] GtkPlacesSidebar:backdrop is white-covered on t...
753392 listbox: Avoid using show_all on rows
753451 GtkLinkButton's context menu has underlined labels
753568 popover: Optimize the transition
753621 wayland: calculate screen physical size
406159 gtk text view widget doesn't have set_top_margin function
746435 wayland: Use g_get_prgname() to get the xdg_surface.set_app_id string
* Translation updates:
Catalan
Galician
Lithuanian
Norwegian bokmål
Portuguese
Slovak
Spanish
Turkish
Overview of Changes in GTK+ 3.17.6
==================================
* GtkFileChooser:
- Handle ., / and ~ in the location entry
- Improve keyboard navigation in save mode
- Don't search recursively in remote locations
- Allow activating without double-click
* GtkFontChooser:
- Bring back a lazy loading optimization that was lost
* GtkWindow:
- Fix handling of window states before the window is mapped
- Add API to fullscreen on a given monitor
* GtkTextView:
- Support font features on tags
* Theme and CSS
- Various HighContrast theme fixes and improvements
- Reduce redraws caused by irrelevant style changes
* gtk-demo gained some more examples
* GtkInspector
- Show wayland display information
- Show monitor information
- Preserve the selected object when rescanning the object tree
* X11:
- Make copy-paste work across multiple screens again
* OS X:
- Fix maximization
- Fix winodw shadows
- Implement notebook tab DND
- Hi-dpi icon fixes
* Bugs fixed:
579466 gtk_entry_completion_insert_action documentation is misleading
610925 GtkFileChooserDialog won't pick show-hidden setting from a ...
652085 CSS cursor support
721398 clipboard not working across screens
734984 CSD windows have incorrectly sized shadows
741685 Invalid memory read on resizing window
746491 [HighContrast] GtkSpinButtons are looking bad
748772 Use new pango_fc_font_map_config_changed()
749339 [Wayland] Gdk-CRITICAL **: gdk_window_get_display: assertion ...
751721 No release event for shift key when both shift keys were pressed
752327 second right-click on header bar buttons brings WM menu, and ...
752577 infinite loop on using nautilus menu
752633 Several GtkPlacesSidebar methods need better documentation
752638 notebook tab dragging doesn't work on Quartz (patches included...
752664 Inspector only shows widget tree if created after startup
752677 x11: implement fullscreen_on_monitor
752707 Location bar navigation to parent directories
752708 File chooser in SAVE mode should accept "foobar/" to navigate
752761 GtkMenu: Properly detach menu when the window is detached
752765 GtkWindow: queue states if not mapped not if not realized
752810 Doubled spacing in string
752875 wayland: Fix initial fullscreen monitor support
752920 GtkLabel's warnings when parsing the markup failed are unhelpful
752960 [HighContrast] GtkPlacesSidebar needs padding (?) around icons
752965 [HighContrast] GtkLinkButton is similar to a non-interactive label
752969 [HighContrast] GtkCheckMenuItem:prelight:checked should be whit...
752975 [HighContrast] selected row of backdrop GtkTreeView should prob...
752977 [HighContrast] clicked header of a GtkTreeView is all black
752978 [HighContrast] label of a GtkProgressBar should probably be black
753048 GtkImage leak when a GtkButton subclass calls gtk_button_set_im...
753051 [HighContrast] double border for the “add custom color” button
753060 [HighContrast] switching from sensitive to insensitive resizes ...
753130 inspector should keep object tree expanded to the selected object
753138 wayland: Invalidate our gtk_surface when we're unmapped
753142 File icons in the filechooser listview only appear 1 out of 2 t...
753230 Adwaita: odd insensitive calendar
753256 Don't handle key event when nothing happens
753284 GtkFileChooser segfault when compiling with clang
* Translation updates:
Catalan
Czech
Greek
Hebrew
Polish
Portuguese
Slovak
Overview of Changes in GTK+ 3.17.5
==================================
* GtkFileChooser:
- Always search in the current location, and indicate this in
the subtitle. Show progress for long searches, and show a nice
empty state.
- Make search in recent files work
- Fix sorting order of recent files and search results
- Various improvements to keyboard navigation:
- Ctrl-F toggles search
- . opens location entry
- Alt-P focuses the sidebar
- Escape stops search and closes the location entry
- Move the name entry to the header bar in Save modes
- Don't show Trash and Recent in the sidebar in Save modes
- Allow renaming and deleting files in Save modes
- Improved sizing behavior of columns
- Improved formatting of the time and location columns
- Time column can show date and time
- Move fixed and network drives and volumes from the sidebar
to a new view that also allows to connect to remote servers
- Use popovers for context menus and support long press to make
them accessible with touch
* GtkScrolledWindow
- Keep scrollbars below treeview headers
- Switch the roles of secondary and middle click on scrollbar steppers
- Primary click starts low-speed autoscrolling
- Secondary click start high-speed autoscrolling
- Middle click scrolls to the end
- Tweak button bindings on scrollbars (and scales)
- Primary click warps to the location
- Primary click with Shift jumps by pages
- Secondary click starts variable-speed autoscrolling
* Theme and CSS
- GtkSwitch has a new slider-height style property to make square
switches possible
- Support CSS letter-spacing for labels and entries
- Partial support for CSS text-decoration
* Font handling
- Per-widget font options and font maps are supported now
* gtk-demo has various new and improved examples
* X11
- Fix rendering stalls over remote ssh connections
* Wayland
- Various fixes to make Copy-Paste and Drag-and-Drop work better
- Ignore size increments for maximized and fullscreen windows
- Fix cursor handling in hi-dpi
* Mir
- Various fixes and improvements
* Broadway
- Windows can now be maximized
* OS X
- Support windows with a fixed aspect ratio
* Bugs fixed:
325150 Save As dialog cannot delete or rename files
593372 save dialog treats trailing spaces literally
720684 "Places" panel in Open File Dialog should should have a mnemonic...
741800 GTK3 apps have huge rendering pauses/hangs over SSH connection
748892 wayland: focus issue with gnome-terminal
750870 gtk3 does apparently ignore replayed events?
750994 X11: First mouse wheel event ignored after right click or Alt+Ta...
751341 GtkWindow: fix default empty window size with CSD
751368 wayland: gnome-terminal does fill entire area when fullscreen or...
751401 crash on DnD
751414 File descriptor leak in gdk_wayland_selection_request_target()
751443 resource_path value cleared in gtk_image_set_from_resource
751447 GtkSearchBar takes up half the height of gnome-system-monitor's ...
751448 Bookmarks sometimes disappear when dragging them away
751625 build error with pure wayland
751677 per-widget font options
751689 switch: add a style property for the switch height
751739 Deadlock in X11 when setting XSetErrorHandler while another thre...
751752 Memleak when both opening shm and opening file in tmp fail
751754 GtkSwitch: calling gtk_switch_set_active in the handler for noti...
751793 DnD: Look up past insensitive widgets for the DnD drop site
751800 Warn for whitespace at beginning or end of new folder names
751805 Avoid the scrollable border when placing scrollbars
751811 improve the font_options setter
751877 gtkdrawingarea: crash when drawing a video
751910 Headerbar - Buttons doesn't work until focus is changed
752000 GtkApplication vs. _NET_WM_USER_TIME
752016 testgmenu: use the menu binding code
752025 wayland: print correct coordinates during DnD
752034 Delegate permanent devices and connected networks from Places Si...
752088 Improve GtkImageMenuItem documentation to reflect deprecation st...
752093 Improvement to GtkImageMenuItem long description and code snippet
752131 GtkButtonBox has spacing between buttons by default when set to ...
752509 GtkFileChooserButton causes layout jumps
752520 Crash getting a NULL visual in glx_pixmap_get
309300 Add a key binding for adjusting the value in a spin box
725551 GTK FontChooserWidget should show a placeholder text in the empt...
751812 add gtk_widget_set_font_map
752502 Documentation fix for GdkGLContext
752616 wayland: Always apply scaling factor to cursor hotspot and dimen...
752599 GtkDrawingArea: Only respects background-color if "draw" signal ...
* Translation updates:
Czech
Greek
Hebrew
Hungarian
Polish
Portuguese
Slovak
Spanish
Overview of Changes in GTK+ 3.17.4
==================================

View File

@@ -73,6 +73,18 @@ Patches should be in unified diff form. (The -up option to GNU diff)
Even better are git-formatted patches. (Use git format-patch)
Release notes for 3.18
======================
* The GtkListBox model support that was introduced in 3.16 has been
changed to no longer call gtk_widget_show_all on rows created by
the create_widget_func. You need to manage the visibility of child
widgets yourself in your create_widget_func.
* The alpha component of foreground colors that are applied to
GtkCellRendererText is no longer ignored. If you don't want your
text to be translucent, use opaque colors.
Release notes for 3.16
======================
@@ -99,7 +111,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.

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 \

View File

@@ -9,12 +9,6 @@ CHECK_PACKAGE = gdk-pixbuf-2.0 atk pangocairo gio-2.0
built_install_girs = Gdk-$(APIVERSION).gir GdkWin32-$(APIVERSION).gir Gtk-$(APIVERSION).gir
built_install_typelibs = Gdk-$(APIVERSION).typelib GdkWin32-$(APIVERSION).typelib Gtk-$(APIVERSION).typelib
!if "$(PLAT)" == "x64"
TIME_T_DEFINE = -Dtime_t=long long
!else
TIME_T_DEFINE = -Dtime_t=long
!endif
!include introspection-msvc.mak
!if "$(BUILD_INTROSPECTION)" == "TRUE"
@@ -27,7 +21,7 @@ gdk_list gdkwin32_list gtk_list:
setgirbuildnev:
@set CC=$(CC)
@set PYTHONPATH=$(BASEDIR)\lib\gobject-introspection
@set PATH=win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin;$(BASEDIR)\bin;$(PATH);$(MINGWDIR)\bin
@set PATH=win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin;$(BASEDIR)\bin;$(PATH)
@set PKG_CONFIG_PATH=$(PKG_CONFIG_PATH)
@set LIB=win32\vs$(VSVER)\$(CFG)\$(PLAT)\bin;$(LIB)
@@ -37,7 +31,7 @@ Gdk-$(APIVERSION).gir: gdk_list
-I$(BASEDIR)\include\glib-2.0 -I$(BASEDIR)\lib\glib-2.0\include \
-I$(BASEDIR)\include\pango-1.0 -I$(BASEDIR)\include\atk-1.0 \
-I$(BASEDIR)\include\gdk-pixbuf-2.0 -I$(BASEDIR)\include \
$(TIME_T_DEFINE) --namespace=Gdk --nsversion=3.0 \
--namespace=Gdk --nsversion=3.0 \
--include=Gio-2.0 --include=GdkPixbuf-2.0 \
--include=Pango-1.0 --include=cairo-1.0 \
--no-libtool --library=gdk-3.0 \
@@ -52,7 +46,7 @@ GdkWin32-$(APIVERSION).gir: gdkwin32_list
-I$(BASEDIR)\include\glib-2.0 -I$(BASEDIR)\lib\glib-2.0\include \
-I$(BASEDIR)\include\pango-1.0 -I$(BASEDIR)\include\atk-1.0 \
-I$(BASEDIR)\include\gdk-pixbuf-2.0 -I$(BASEDIR)\include \
$(TIME_T_DEFINE) --namespace=GdkWin32 --nsversion=3.0 \
--namespace=GdkWin32 --nsversion=3.0 \
--include=Gio-2.0 --include=GdkPixbuf-2.0 \
--include=Pango-1.0 --include-uninstalled=./Gdk-$(APIVERSION).gir \
--no-libtool --library=gdk-3.0 \
@@ -73,7 +67,7 @@ Gtk-$(APIVERSION).gir: gtk_list
--reparse-validate --add-include-path=$(G_IR_INCLUDEDIR) --add-include-path=. \
--pkg-export gtk+-3.0 --warn-all --c-include="gtk/gtkx.h" \
-DG_LOG_DOMAIN=\"Gtk\" -DGTK_LIBDIR=\"/dummy/lib\" \
$(TIME_T_DEFINE) -DGTK_DATADIR=\"/dummy/share\" -DGTK_DATA_PREFIX=\"/dummy\" \
-DGTK_DATADIR=\"/dummy/share\" -DGTK_DATA_PREFIX=\"/dummy\" \
-DGTK_SYSCONFDIR=\"/dummy/etc\" -DGTK_VERSION=\"@GTK_VERSION@\" \
-DGTK_BINARY_VERSION=\"3.0.0\" -DGTK_HOST=\"i686-pc-vs$(VSVER)\" \
-DGTK_COMPILATION -DGTK_PRINT_BACKENDS=\"file\" \

View File

@@ -26,7 +26,6 @@ VALID_PKG_CONFIG_PATH = FALSE
VALID_GCC_INSTPATH = FALSE
MSG_INVALID_PKGCONFIG = You must set or specifiy a valid PKG_CONFIG_PATH
MSG_INVALID_MINGWDIR = You must set or specifiy a valid MINGWDIR, where gcc.exe can be found in %MINGWDIR%\bin
MSG_INVALID_CFG = You need to specify or set CFG to be release or debug to use this Makefile to build the Introspection Files
ERROR_MSG =
@@ -47,15 +46,7 @@ VALID_PKG_CONFIG_PATH = TRUE
VALID_PKG_CONFIG_PATH = FALSE
!endif
!if ![IF EXIST %MINGWDIR%\bin\gcc.exe @echo VALID_GCC_INSTPATH=TRUE > gcccheck.x]
!endif
!if ![IF NOT EXIST %MINGWDIR%\bin\gcc.exe @echo VALID_GCC_INSTPATH=FALSE > gcccheck.x]
!endif
!include gcccheck.x
!if ![del $(ERRNUL) /q/f pkgconfig.chksize gcccheck.x]
!if ![del $(ERRNUL) /q/f pkgconfig.chksize]
!endif
VALID_CFGSET = FALSE
@@ -63,11 +54,6 @@ VALID_CFGSET = FALSE
VALID_CFGSET = TRUE
!endif
!if "$(VALID_GCC_INSTPATH)" != "TRUE"
BUILD_INTROSPECTION = FALSE
ERROR_MSG = $(MSG_INVALID_MINGWDIR)
!endif
!if "$(VALID_PKG_CONFIG_PATH)" != "TRUE"
BUILD_INTROSPECTION = FALSE
ERROR_MSG = $(MSG_INVALID_PKGCONFIG)

View File

@@ -10,7 +10,7 @@
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [17])
m4_define([gtk_micro_version], [4])
m4_define([gtk_micro_version], [8])
m4_define([gtk_interface_age], [0])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
@@ -41,8 +41,20 @@ AC_CANONICAL_HOST
m4_define([gtk_binary_version], [3.0.0])
# required versions of other packages
m4_define([glib_required_version], [2.43.4])
m4_define([pango_required_version], [1.37.1])
m4_define([glib_required_major], [2])
m4_define([glib_required_minor], [43])
m4_define([glib_required_micro], [3])
m4_define([glib_required_version],
[glib_required_major.glib_required_minor.glib_required_micro])
m4_define([glib_min_required_minor],
[m4_eval(glib_required_minor - (glib_required_minor % 2))])
m4_define([glib_max_allowed_minor],
[m4_eval(glib_required_minor + (glib_required_minor % 2))])
m4_define([glib_min_required_version], m4_join([_], [GLIB_VERSION], glib_required_major, glib_min_required_minor))
m4_define([glib_max_allowed_version], m4_join([_], [GLIB_VERSION], glib_required_major, glib_max_allowed_minor))
GLIB_VERSION_CFLAGS="-DGLIB_MIN_REQUIRED_VERSION=glib_min_required_version -DGLIB_MAX_ALLOWED_VERSION=glib_max_allowed_version"
m4_define([pango_required_version], [1.37.3])
m4_define([atk_required_version], [2.15.1])
m4_define([cairo_required_version], [1.14.0])
m4_define([gdk_pixbuf_required_version], [2.30.0])
@@ -348,7 +360,7 @@ backend_immodules=
have_gio_unix=no
GDK_BACKENDS=
GDK_EXTRA_LIBS=
GDK_EXTRA_CFLAGS=
GDK_EXTRA_CFLAGS="$GLIB_VERSION_CFLAGS"
GDK_WINDOWING=
PANGO_PACKAGES="pango pangocairo"
@@ -1311,9 +1323,6 @@ LDFLAGS="$saved_ldflags"
GDK_PACKAGES="$PANGO_PACKAGES gdk-pixbuf-2.0 >= gdk_pixbuf_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version"
GDK_PRIVATE_PACKAGES="$GDK_GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES $MIR_PACKAGES $cairo_backends epoxy >= epoxy_required_version"
if test "x$enable_x11_backend" = xyes; then
GDK_PRIVATE_PACKAGES="$GDK_PRIVATE_PACKAGES pangoft2"
fi
PKG_CHECK_MODULES(GDK_DEP, $GDK_PACKAGES $GDK_PRIVATE_PACKAGES)
GDK_DEP_LIBS="$GDK_EXTRA_LIBS $GDK_DEP_LIBS $MATH_LIB"
@@ -1348,7 +1357,7 @@ PKG_CHECK_MODULES(ATK, $ATK_PACKAGES)
GTK_PACKAGES="atk >= atk_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version gdk-pixbuf-2.0 >= gdk_pixbuf_required_version gio-2.0 >= glib_required_version"
GTK_PRIVATE_PACKAGES="$ATK_PACKAGES $WAYLAND_PACKAGES $MIR_PACKAGES epoxy >= epoxy_required_version"
if test "x$enable_x11_backend" = xyes; then
if test "x$enable_x11_backend" = xyes -o "x$enable_wayland_backend" = xyes; then
GTK_PRIVATE_PACKAGES="$GTK_PRIVATE_PACKAGES pangoft2"
fi
if test "$have_gio_unix" = "yes"; then
@@ -1678,6 +1687,10 @@ AC_ARG_ENABLE(libcanberra,
[enable_libcanberra="$enableval"],
[enable_libcanberra=auto])
if test "$enable_x11_backend" != "yes"; then
enable_libcanberra=no
fi
AC_MSG_CHECKING([whether to use libcanberra])
if test "$enable_libcanberra" != "no"; then
AC_MSG_RESULT([yes])

View File

@@ -25,6 +25,7 @@ demos_base = \
entry_completion.c \
event_axes.c \
expander.c \
filtermodel.c \
font_features.c \
gestures.c \
glarea.c \
@@ -38,10 +39,13 @@ demos_base = \
listbox.c \
flowbox.c \
list_store.c \
markup.c \
menus.c \
modelbutton.c \
offscreen_window.c \
offscreen_window2.c \
overlay.c \
overlay2.c \
panes.c \
pickers.c \
pixbufs.c \
@@ -49,12 +53,15 @@ demos_base = \
printing.c \
revealer.c \
rotated_text.c \
scale.c \
search_entry.c \
search_entry2.c \
sidebar.c \
sizegroup.c \
spinbutton.c \
spinner.c \
stack.c \
textmask.c \
textview.c \
textscroll.c \
theming_style_classes.c \
@@ -97,7 +104,7 @@ EXTRA_DIST += \
data/source.svg \
data/symbolic-source.svg \
demo.gresource.xml \
$(RESOURCES) \
$(resource_files) \
org.gtk.Demo.gschema.xml \
demos.h.win32
@@ -129,82 +136,11 @@ gtk3_demo_application_SOURCES = \
gtk3_demo_application_LDADD = $(LDADDS)
demo_resources.c: demo.gresource.xml $(RESOURCES)
resource_files = $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(builddir)/demo.gresource.xml)
demo_resources.c: demo.gresource.xml $(resource_files)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) --target=$@ --sourcedir=$(srcdir) --generate-source $(srcdir)/demo.gresource.xml
RESOURCES = \
$(demos) \
main.ui \
application.ui \
demo.ui \
menus.ui \
stack.ui \
revealer.ui \
theming.ui \
listbox.ui \
popover.ui \
alphatest.png \
apple-red.png \
brick.png \
brick2.png \
background.jpg \
floppybuddy.gif \
glarea-fragment.glsl \
glarea-vertex.glsl \
gnome-applets.png \
gnome-calendar.png \
gnome-foot.png \
gnome-fs-directory.png \
gnome-fs-regular.png \
gnome-gimp.png \
gnome-gmush.png \
gnome-gsame.png \
gnu-keys.png \
messages.txt \
css_accordion.css \
css_basics.css \
css_multiplebgs.css \
css_pixbufs.css \
css_shadows.css \
cssview.css \
reset.css \
alias_cursor.png \
all_scroll_cursor.png \
cell_cursor.png \
col_resize_cursor.png \
copy_cursor.png \
crosshair_cursor.png \
default_cursor.png \
e_resize_cursor.png \
ew_resize_cursor.png \
grabbing_cursor.png \
grab_cursor.png \
hand_cursor.png \
help_cursor.png \
move_cursor.png \
ne_resize_cursor.png \
nesw_resize_cursor.png \
none_cursor.png \
no_drop_cursor.png \
not_allowed_cursor.png \
n_resize_cursor.png \
ns_resize_cursor.png \
nw_resize_cursor.png \
nwse_resize_cursor.png \
pointer_cursor.png \
progress_cursor.png \
row_resize_cursor.png \
se_resize_cursor.png \
s_resize_cursor.png \
sw_resize_cursor.png \
text_cursor.png \
vertical_text_cursor.png \
wait_cursor.png \
w_resize_cursor.png \
zoom_in_cursor.png \
zoom_out_cursor.png
iconthemedir = $(datadir)/icons/hicolor
appsicon16dir = $(iconthemedir)/16x16/apps

View File

@@ -168,7 +168,7 @@ do_assistant (GtkWidget *do_widget)
{
assistant = gtk_assistant_new ();
gtk_window_set_default_size (GTK_WINDOW (assistant), -1, 300);
gtk_window_set_default_size (GTK_WINDOW (assistant), -1, 300);
gtk_window_set_screen (GTK_WINDOW (assistant),
gtk_widget_get_screen (do_widget));

View File

@@ -5,16 +5,13 @@
#include <gtk/gtk.h>
static GtkBuilder *builder;
static void
quit_activate (GSimpleAction *action,
GVariant *parameter,
gpointer user_data)
{
GtkWidget *window;
GtkWidget *window = user_data;
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_widget_destroy (window);
}
@@ -23,8 +20,11 @@ about_activate (GSimpleAction *action,
GVariant *parameter,
gpointer user_data)
{
GtkWidget *window = user_data;
GtkBuilder *builder;
GtkWidget *about_dlg;
builder = g_object_get_data (G_OBJECT (window), "builder");
about_dlg = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
gtk_dialog_run (GTK_DIALOG (about_dlg));
gtk_widget_hide (about_dlg);
@@ -55,6 +55,8 @@ do_builder (GtkWidget *do_widget)
if (!window)
{
GtkBuilder *builder;
builder = gtk_builder_new_from_resource ("/builder/demo.ui");
gtk_builder_connect_signals (builder, NULL);
@@ -69,7 +71,7 @@ do_builder (GtkWidget *do_widget)
actions = (GActionGroup*)g_simple_action_group_new ();
g_action_map_add_action_entries (G_ACTION_MAP (actions),
win_entries, G_N_ELEMENTS (win_entries),
NULL);
window);
gtk_widget_insert_action_group (window, "win", actions);
accel_group = gtk_accel_group_new ();
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
@@ -109,18 +111,14 @@ do_builder (GtkWidget *do_widget)
item = (GtkWidget*)gtk_builder_get_object (builder, "about_item");
gtk_widget_add_accelerator (item, "activate", accel_group,
GDK_KEY_F7, 0, GTK_ACCEL_VISIBLE);
g_object_set_data_full (G_OBJECT(window), "builder", builder, g_object_unref);
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -56,7 +56,7 @@ do_button_box (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Button Boxes demo");
gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed),
@@ -129,14 +129,9 @@ do_button_box (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -123,7 +123,7 @@ query_for_toplevel (GdkScreen *screen,
gtk_container_add (GTK_CONTAINER (frame), label);
gtk_widget_show_all (popup);
cursor = gdk_cursor_new_for_display (display, GDK_CROSSHAIR);
cursor = gdk_cursor_new_from_name (display, "crosshair");
if (gdk_device_grab (gtk_get_current_event_device (),
gtk_widget_get_window (popup),

View File

@@ -13,8 +13,6 @@
#include <gtk/gtk.h>
#include <string.h>
static GtkWidget *window = NULL;
void
copy_button_clicked (GtkWidget *button,
gpointer user_data)
@@ -107,12 +105,12 @@ drag_begin (GtkWidget *widget,
}
void
drag_data_get (GtkWidget *widget,
GdkDragContext *context,
GtkSelectionData *selection_data,
guint info,
guint time,
gpointer data)
drag_data_get (GtkWidget *widget,
GdkDragContext *context,
GtkSelectionData *selection_data,
guint info,
guint time,
gpointer data)
{
GdkPixbuf *pixbuf;
@@ -202,6 +200,8 @@ button_press (GtkWidget *widget,
GtkWidget *
do_clipboard (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *vbox, *hbox;
@@ -325,10 +325,7 @@ do_clipboard (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -32,9 +32,7 @@ response_cb (GtkDialog *dialog,
gpointer user_data)
{
if (response_id == GTK_RESPONSE_OK)
{
gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &color);
}
gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &color);
gtk_widget_destroy (GTK_WIDGET (dialog));
}
@@ -49,10 +47,8 @@ change_color_callback (GtkWidget *button,
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (dialog), &color);
g_signal_connect (dialog,
"response",
G_CALLBACK (response_cb),
NULL);
g_signal_connect (dialog, "response",
G_CALLBACK (response_cb), NULL);
gtk_widget_show_all (dialog);
}
@@ -88,7 +84,6 @@ do_colorsel (GtkWidget *do_widget)
* Create the color swatch area
*/
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
@@ -113,14 +108,9 @@ do_colorsel (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -321,8 +321,7 @@ do_combobox (GtkWidget *do_widget)
gtk_window_set_title (GTK_WINDOW (window), "Combo Boxes");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed),
&window);
G_CALLBACK (gtk_widget_destroyed), &window);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
@@ -400,8 +399,7 @@ do_combobox (GtkWidget *do_widget)
gtk_tree_path_free (path);
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo), &iter);
/* A GtkComboBoxEntry with validation.
*/
/* A GtkComboBoxEntry with validation */
frame = gtk_frame_new ("Editable");
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
@@ -441,14 +439,9 @@ do_combobox (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -6,8 +6,6 @@
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
apply_css (GtkWidget *widget, GtkStyleProvider *provider)
{
@@ -19,6 +17,8 @@ apply_css (GtkWidget *widget, GtkStyleProvider *provider)
GtkWidget *
do_css_accordion (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *container, *child;
@@ -63,10 +63,7 @@ do_css_accordion (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -7,8 +7,6 @@
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
show_parsing_error (GtkCssProvider *provider,
GtkCssSection *section,
@@ -64,6 +62,8 @@ apply_css (GtkWidget *widget, GtkStyleProvider *provider)
GtkWidget *
do_css_basics (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *container, *child;
@@ -112,10 +112,7 @@ do_css_basics (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -7,8 +7,6 @@
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
show_parsing_error (GtkCssProvider *provider,
GtkCssSection *section,
@@ -82,6 +80,8 @@ apply_css (GtkWidget *widget, GtkStyleProvider *provider)
GtkWidget *
do_css_multiplebgs (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *paned, *container, *child;
@@ -163,10 +163,7 @@ do_css_multiplebgs (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -6,8 +6,6 @@
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
show_parsing_error (GtkCssProvider *provider,
GtkCssSection *section,
@@ -63,6 +61,8 @@ apply_css (GtkWidget *widget, GtkStyleProvider *provider)
GtkWidget *
do_css_pixbufs (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *paned, *container, *child;
@@ -95,15 +95,13 @@ do_css_pixbufs (GtkWidget *do_widget)
NULL);
provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
container = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (paned), container);
child = gtk_text_view_new_with_buffer (text);
gtk_container_add (GTK_CONTAINER (container), child);
g_signal_connect (text,
"changed",
G_CALLBACK (css_text_changed),
provider);
g_signal_connect (text, "changed",
G_CALLBACK (css_text_changed), provider);
bytes = g_resources_lookup_data ("/css_pixbufs/gtk.css", 0, NULL);
gtk_text_buffer_set_text (text, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
@@ -120,10 +118,7 @@ do_css_pixbufs (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -5,8 +5,6 @@
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
show_parsing_error (GtkCssProvider *provider,
GtkCssSection *section,
@@ -86,6 +84,8 @@ create_toolbar (void)
GtkWidget *
do_css_shadows (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *paned, *container, *child;
@@ -117,15 +117,13 @@ do_css_shadows (GtkWidget *do_widget)
NULL);
provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ());
container = gtk_scrolled_window_new (NULL, NULL);
gtk_container_add (GTK_CONTAINER (paned), container);
child = gtk_text_view_new_with_buffer (text);
gtk_container_add (GTK_CONTAINER (container), child);
g_signal_connect (text,
"changed",
G_CALLBACK (css_text_changed),
provider);
g_signal_connect (text, "changed",
G_CALLBACK (css_text_changed), provider);
bytes = g_resources_lookup_data ("/css_shadows/gtk.css", 0, NULL);
gtk_text_buffer_set_text (text, g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes));
@@ -142,10 +140,7 @@ do_css_shadows (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -152,14 +152,9 @@ do_cursors (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;

BIN
demos/gtk-demo/decor1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
demos/gtk-demo/decor2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -131,6 +131,7 @@
<file>entry_completion.c</file>
<file>event_axes.c</file>
<file>expander.c</file>
<file>filtermodel.c</file>
<file>flowbox.c</file>
<file>font_features.c</file>
<file>gestures.c</file>
@@ -144,10 +145,13 @@
<file>links.c</file>
<file>listbox.c</file>
<file>list_store.c</file>
<file>markup.c</file>
<file>menus.c</file>
<file>modelbutton.c</file>
<file>offscreen_window.c</file>
<file>offscreen_window2.c</file>
<file>overlay.c</file>
<file>overlay2.c</file>
<file>pagesetup.c</file>
<file>panes.c</file>
<file>pickers.c</file>
@@ -156,11 +160,13 @@
<file>printing.c</file>
<file>revealer.c</file>
<file>rotated_text.c</file>
<file>scale.c</file>
<file>search_entry.c</file>
<file>search_entry2.c</file>
<file>sizegroup.c</file>
<file>sidebar.c</file>
<file>stack.c</file>
<file>spinbutton.c</file>
<file>spinner.c</file>
<file>textview.c</file>
<file>textscroll.c</file>
@@ -168,6 +174,7 @@
<file>toolpalette.c</file>
<file>transparent.c</file>
<file>tree_store.c</file>
<file>textmask.c</file>
</gresource>
<gresource prefix="/textview">
<file>floppybuddy.gif</file>
@@ -187,4 +194,23 @@
<gresource prefix="/font-features">
<file>font-features.ui</file>
</gresource>
<gresource prefix="/spinbutton">
<file>spinbutton.ui</file>
</gresource>
<gresource prefix="/filtermodel">
<file>filtermodel.ui</file>
</gresource>
<gresource prefix="/overlay2">
<file>decor1.png</file>
<file>decor2.png</file>
</gresource>
<gresource prefix="/markup">
<file>markup.txt</file>
</gresource>
<gresource prefix="/scale">
<file>scale.ui</file>
</gresource>
<gresource prefix="/modelbutton">
<file>modelbutton.ui</file>
</gresource>
</gresources>

View File

@@ -111,7 +111,9 @@ do_dialog (GtkWidget *do_widget)
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Dialogs and Message Boxes");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
gtk_container_set_border_width (GTK_CONTAINER (window), 8);
frame = gtk_frame_new ("Dialogs");
@@ -163,14 +165,9 @@ do_dialog (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -212,7 +212,8 @@ do_drawingarea (GtkWidget *do_widget)
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Drawing Area");
g_signal_connect (window, "destroy", G_CALLBACK (close_window), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (close_window), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 8);

View File

@@ -14,8 +14,6 @@
#include <string.h>
#include <stdlib.h>
static GtkWidget *window = NULL;
typedef struct
{
gint number;
@@ -335,6 +333,8 @@ add_columns (GtkTreeView *treeview,
GtkWidget *
do_editable_cells (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *vbox;
@@ -345,7 +345,6 @@ do_editable_cells (GtkWidget *do_widget)
GtkTreeModel *items_model;
GtkTreeModel *numbers_model;
/* create window, etc */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
@@ -406,10 +405,7 @@ do_editable_cells (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -8,56 +8,48 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
GtkWidget *
do_entry_buffer (GtkWidget *do_widget)
{
GtkWidget *content_area;
static GtkWidget *window = NULL;
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *entry;
GtkEntryBuffer *buffer;
if (!window)
{
window = gtk_dialog_new_with_buttons ("Entry Buffer",
GTK_WINDOW (do_widget),
0,
_("_Close"),
GTK_RESPONSE_NONE,
NULL);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Entry Buffer");
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
g_signal_connect (window, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
"Entries share a buffer. Typing in one is reflected in the other.");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
/* Create a buffer */
buffer = gtk_entry_buffer_new (NULL, 0);
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label), "Entries share a buffer. Typing in one is reflected in the other.");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
/* Create our first entry */
entry = gtk_entry_new_with_buffer (buffer);
gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
/* Create a buffer */
buffer = gtk_entry_buffer_new (NULL, 0);
/* Create the second entry */
entry = gtk_entry_new_with_buffer (buffer);
gtk_entry_set_visibility (GTK_ENTRY (entry), FALSE);
gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
/* Create our first entry */
entry = gtk_entry_new_with_buffer (buffer);
gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
/* Create the second entry */
entry = gtk_entry_new_with_buffer (buffer);
gtk_entry_set_visibility (GTK_ENTRY (entry), FALSE);
gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
g_object_unref (buffer);
}
g_object_unref (buffer);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);

View File

@@ -8,8 +8,6 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
/* Creates a tree model containing the completions */
GtkTreeModel *
create_completion_model (void)
@@ -38,7 +36,7 @@ create_completion_model (void)
GtkWidget *
do_entry_completion (GtkWidget *do_widget)
{
GtkWidget *content_area;
static GtkWidget *window = NULL;
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *entry;
@@ -47,23 +45,17 @@ do_entry_completion (GtkWidget *do_widget)
if (!window)
{
window = gtk_dialog_new_with_buttons ("Entry Completion",
GTK_WINDOW (do_widget),
0,
_("_Close"),
GTK_RESPONSE_NONE,
NULL);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Entry Completion");
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect (window, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
label = gtk_label_new (NULL);

View File

@@ -412,10 +412,7 @@ do_event_axes (GtkWidget *toplevel)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -3,6 +3,8 @@
* GtkExpander allows to provide additional content that is initially hidden.
* This is also known as "disclosure triangle".
*
* This example also shows how to make the window resizable only if the expander
* is expanded.
*/
#include <glib/gi18n.h>

View File

@@ -0,0 +1,178 @@
/* Tree View/Filter Model
*
* This example demonstrates how GtkTreeModelFilter can be used not
* just to show a subset of the rows, but also to compute columns
* that are not actually present in the underlying model.
*/
#include <gtk/gtk.h>
enum {
WIDTH_COLUMN,
HEIGHT_COLUMN,
AREA_COLUMN,
SQUARE_COLUMN
};
static void
format_number (GtkTreeViewColumn *col,
GtkCellRenderer *cell,
GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
gint num;
gchar *text;
gtk_tree_model_get (model, iter, GPOINTER_TO_INT (data), &num, -1);
text = g_strdup_printf ("%d", num);
g_object_set (cell, "text", text, NULL);
g_free (text);
}
static void
filter_modify_func (GtkTreeModel *model,
GtkTreeIter *iter,
GValue *value,
gint column,
gpointer data)
{
GtkTreeModelFilter *filter_model = GTK_TREE_MODEL_FILTER (model);
gint width, height;
GtkTreeModel *child_model;
GtkTreeIter child_iter;
child_model = gtk_tree_model_filter_get_model (filter_model);
gtk_tree_model_filter_convert_iter_to_child_iter (filter_model, &child_iter, iter);
gtk_tree_model_get (child_model, &child_iter,
WIDTH_COLUMN, &width,
HEIGHT_COLUMN, &height,
-1);
switch (column)
{
case WIDTH_COLUMN:
g_value_set_int (value, width);
break;
case HEIGHT_COLUMN:
g_value_set_int (value, height);
break;
case AREA_COLUMN:
g_value_set_int (value, width * height);
break;
case SQUARE_COLUMN:
g_value_set_boolean (value, width == height);
break;
default:
g_assert_not_reached ();
}
}
static gboolean
visible_func (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
gint width;
gtk_tree_model_get (model, iter,
WIDTH_COLUMN, &width,
-1);
return width < 10;
}
GtkWidget *
do_filtermodel (GtkWidget *do_widget)
{
static GtkWidget *window;
GtkWidget *tree;
GtkListStore *store;
GtkTreeModel *model;
GtkTreeViewColumn *column;
GtkCellRenderer *cell;
GType types[4];
if (!window)
{
GtkBuilder *builder;
builder = gtk_builder_new_from_resource ("/filtermodel/filtermodel.ui");
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn1");
cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext1");
gtk_tree_view_column_set_cell_data_func (column, cell,
format_number, GINT_TO_POINTER (WIDTH_COLUMN), NULL);
column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn2");
cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext2");
gtk_tree_view_column_set_cell_data_func (column, cell,
format_number, GINT_TO_POINTER (HEIGHT_COLUMN), NULL);
column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn3");
cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext3");
gtk_tree_view_column_set_cell_data_func (column, cell,
format_number, GINT_TO_POINTER (WIDTH_COLUMN), NULL);
column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn4");
cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext4");
gtk_tree_view_column_set_cell_data_func (column, cell,
format_number, GINT_TO_POINTER (HEIGHT_COLUMN), NULL);
column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn5");
cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext5");
gtk_tree_view_column_set_cell_data_func (column, cell,
format_number, GINT_TO_POINTER (AREA_COLUMN), NULL);
column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn6");
cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrendererpixbuf1");
gtk_tree_view_column_add_attribute (column, cell, "visible", SQUARE_COLUMN);
store = (GtkListStore*)gtk_builder_get_object (builder, "liststore1");
tree = (GtkWidget*)gtk_builder_get_object (builder, "treeview2");
types[WIDTH_COLUMN] = G_TYPE_INT;
types[HEIGHT_COLUMN] = G_TYPE_INT;
types[AREA_COLUMN] = G_TYPE_INT;
types[SQUARE_COLUMN] = G_TYPE_BOOLEAN;
model = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
gtk_tree_model_filter_set_modify_func (GTK_TREE_MODEL_FILTER (model),
G_N_ELEMENTS (types), types,
filter_modify_func, NULL, NULL);
gtk_tree_view_set_model (GTK_TREE_VIEW (tree), model);
column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn7");
cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext6");
gtk_tree_view_column_set_cell_data_func (column, cell,
format_number, GINT_TO_POINTER (WIDTH_COLUMN), NULL);
column = (GtkTreeViewColumn*)gtk_builder_get_object (builder, "treeviewcolumn8");
cell = (GtkCellRenderer*)gtk_builder_get_object (builder, "cellrenderertext7");
gtk_tree_view_column_set_cell_data_func (column, cell,
format_number, GINT_TO_POINTER (HEIGHT_COLUMN), NULL);
tree = (GtkWidget*)gtk_builder_get_object (builder, "treeview3");
model = gtk_tree_model_filter_new (GTK_TREE_MODEL (store), NULL);
gtk_tree_model_filter_set_visible_func (GTK_TREE_MODEL_FILTER (model),
visible_func, NULL, NULL);
gtk_tree_view_set_model (GTK_TREE_VIEW (tree), model);
g_object_unref (builder);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
gtk_widget_destroy (window);
return window;
}

View File

@@ -0,0 +1,206 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.1 -->
<interface>
<requires lib="gtk+" version="3.16"/>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name width -->
<column type="gint"/>
<!-- column-name height -->
<column type="gint"/>
</columns>
<data>
<row>
<col id="0">10</col>
<col id="1">20</col>
</row>
<row>
<col id="0">5</col>
<col id="1">25</col>
</row>
<row>
<col id="0">15</col>
<col id="1">15</col>
</row>
</data>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Filter Model</property>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="row_spacing">10</property>
<property name="column_spacing">10</property>
<property name="column_homogeneous">True</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Original</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkTreeView" id="treeview1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">liststore1</property>
<property name="headers_clickable">False</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="title" translatable="yes">Width</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn2">
<property name="title" translatable="yes">Height</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext2"/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkTreeView" id="treeview2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection3"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn3">
<property name="title" translatable="yes">Width</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext3"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn4">
<property name="title" translatable="yes">Height</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext4"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn5">
<property name="title" translatable="yes">Area</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext5"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn6">
<property name="title" translatable="yes">Square</property>
<child>
<object class="GtkCellRendererPixbuf" id="cellrendererpixbuf1">
<property name="icon-name">object-select-symbolic</property>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Computed Columns</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Filtered</property>
<property name="xalign">0</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkTreeView" id="treeview3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="headers_clickable">False</property>
<property name="search_column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection5"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn7">
<property name="title" translatable="yes">Width</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext6"/>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn8">
<property name="title" translatable="yes">Height</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext7"/>
</child>
</object>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</interface>

View File

@@ -10,8 +10,6 @@
#include <stdlib.h>
#include <string.h>
static GtkWidget *window = NULL;
static gboolean
draw_color (GtkWidget *drawingarea,
cairo_t *cr,
@@ -46,6 +44,7 @@ color_swatch_new (const gchar *color)
GtkWidget *
do_flowbox (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GtkWidget *scrolled, *flowbox;
const gchar *colors[] = {
"AliceBlue",
@@ -726,8 +725,7 @@ do_flowbox (GtkWidget *do_widget)
gtk_window_set_default_size (GTK_WINDOW (window), 400, 600);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed),
&window);
G_CALLBACK (gtk_widget_destroyed), &window);
scrolled = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
@@ -740,9 +738,7 @@ do_flowbox (GtkWidget *do_widget)
gtk_container_add (GTK_CONTAINER (window), scrolled);
for (i = 0; colors[i]; i++)
{
gtk_container_add (GTK_CONTAINER (flowbox), color_swatch_new (colors[i]));
}
gtk_container_add (GTK_CONTAINER (flowbox), color_swatch_new (colors[i]));
gtk_widget_show_all (scrolled);
}

View File

@@ -49,10 +49,7 @@
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
<property name="margin">10</property>
<property name="orientation">vertical</property>
<property name="spacing">6</property>
<child>
@@ -77,8 +74,8 @@
<object class="GtkBox" id="box13">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -90,7 +87,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -106,7 +102,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="kern_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -148,8 +143,8 @@
<object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -161,7 +156,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -177,7 +171,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="liga_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -204,7 +197,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -220,7 +212,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="dlig_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -247,7 +238,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -263,7 +253,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="hlig_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -290,7 +279,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -306,7 +294,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="clig_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -348,8 +335,8 @@
<object class="GtkBox" id="box4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -361,7 +348,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -377,7 +363,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="smcp_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -404,7 +389,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -420,7 +404,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="c2sc_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -462,8 +445,8 @@
<object class="GtkBox" id="box5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -472,7 +455,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
@@ -489,7 +471,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">numcasedefault</property>
@@ -507,7 +488,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">numcasedefault</property>
@@ -543,8 +523,8 @@
<object class="GtkBox" id="box6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -553,7 +533,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
@@ -570,7 +549,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">numspacedefault</property>
@@ -588,7 +566,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">numspacedefault</property>
@@ -624,8 +601,8 @@
<object class="GtkBox" id="box7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -634,7 +611,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
@@ -651,7 +627,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">fractiondefault</property>
@@ -669,7 +644,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="active">True</property>
<property name="draw_indicator">True</property>
<property name="group">fractiondefault</property>
@@ -705,8 +679,8 @@
<object class="GtkBox" id="box8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -718,7 +692,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -734,7 +707,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="zero_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -761,7 +733,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -777,7 +748,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="nalt_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -819,8 +789,8 @@
<object class="GtkBox" id="box9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -832,7 +802,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -848,7 +817,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="swsh_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -875,7 +843,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -891,7 +858,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="calt_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -918,7 +884,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -934,7 +899,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="hist_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -961,7 +925,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -977,7 +940,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="salt_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -1019,8 +981,8 @@
<object class="GtkBox" id="box10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">10</property>
<property name="orientation">vertical</property>
<child>
@@ -1032,7 +994,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -1048,7 +1009,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="ss01_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -1075,7 +1035,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -1091,7 +1050,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="ss02_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -1118,7 +1076,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -1134,7 +1091,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="ss03_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -1161,7 +1117,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -1177,7 +1132,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="ss04_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -1204,7 +1158,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
</object>
@@ -1220,7 +1173,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<signal name="notify::active" handler="update" swapped="no"/>
<property name="sensitive" bind-source="ss05_dflt" bind-property="active" bind-flags="sync-create|bidirectional"/>
@@ -1276,8 +1228,8 @@
<child>
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_top">20</property>
<property name="margin_bottom">20</property>
<child>
@@ -1322,8 +1274,8 @@
<object class="GtkLabel" id="settings">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">20</property>
<property name="margin_right">20</property>
<property name="margin_start">20</property>
<property name="margin_end">20</property>
<property name="margin_bottom">20</property>
<property name="xalign">0</property>
</object>

View File

@@ -1,4 +1,4 @@
/* Font Features
/* Pango/Font Features
*
* This demonstrates support for OpenType font features with
* Pango attributes. The attributes can be used manually or
@@ -189,17 +189,14 @@ do_font_features (GtkWidget *do_widget)
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
g_object_unref (builder);
}
if (!gtk_widget_get_visible (window))
{
gtk_window_present (GTK_WINDOW (window));
}
gtk_window_present (GTK_WINDOW (window));
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -7,7 +7,6 @@
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static GtkGesture *rotate = NULL;
static GtkGesture *zoom = NULL;
static gdouble swipe_x = 0;
@@ -132,6 +131,7 @@ drawing_area_draw (GtkWidget *widget,
GtkWidget *
do_gestures (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GtkWidget *drawing_area;
GtkGesture *gesture;
@@ -190,10 +190,7 @@ do_gestures (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -58,14 +58,9 @@ do_headerbar (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -1,4 +1,4 @@
/* Text Widget/Hypertext
/* Text View/Hypertext
*
* Usually, tags modify the appearance of text in the view, e.g. making it
* bold or colored or underlined. But tags are not restricted to appearance.
@@ -253,20 +253,21 @@ do_hypertext (GtkWidget *do_widget)
GtkWidget *view;
GtkWidget *sw;
GtkTextBuffer *buffer;
GdkDisplay *display;
hand_cursor = gdk_cursor_new_for_display (gtk_widget_get_display (do_widget), GDK_HAND2);
regular_cursor = gdk_cursor_new_for_display (gtk_widget_get_display (do_widget), GDK_XTERM);
display = gtk_widget_get_display (do_widget);
hand_cursor = gdk_cursor_new_from_name (display, "pointer");
regular_cursor = gdk_cursor_new_from_name (display, "text");
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "Hypertext");
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_default_size (GTK_WINDOW (window),
450, 450);
gtk_window_set_default_size (GTK_WINDOW (window), 450, 450);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
gtk_window_set_title (GTK_WINDOW (window), "Hypertext");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
view = gtk_text_view_new ();
@@ -293,14 +294,9 @@ do_hypertext (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show (window);
}
gtk_widget_show (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -328,10 +328,7 @@ do_iconview (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -8,8 +8,6 @@
#include <gtk/gtk.h>
#include <string.h>
static GtkWidget *window = NULL;
enum
{
COL_TEXT,
@@ -100,6 +98,8 @@ edited (GtkCellRendererText *cell,
GtkWidget *
do_iconview_edit (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *icon_view;
@@ -152,10 +152,7 @@ do_iconview_edit (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -436,14 +436,9 @@ do_images (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -6,14 +6,13 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
on_bar_response (GtkInfoBar *info_bar,
gint response_id,
gpointer user_data)
{
GtkWidget *dialog;
GtkWidget *window;
if (response_id == GTK_RESPONSE_CLOSE)
{
@@ -21,6 +20,7 @@ on_bar_response (GtkInfoBar *info_bar,
return;
}
window = gtk_widget_get_toplevel (GTK_WIDGET (info_bar));
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
@@ -40,6 +40,7 @@ on_bar_response (GtkInfoBar *info_bar,
GtkWidget *
do_infobar (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GtkWidget *frame;
GtkWidget *bar;
GtkWidget *vbox;
@@ -67,6 +68,8 @@ do_infobar (GtkWidget *do_widget)
gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_INFO);
label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_INFO");
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
button = gtk_toggle_button_new_with_label ("Message");
@@ -77,6 +80,8 @@ do_infobar (GtkWidget *do_widget)
gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_WARNING);
label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_WARNING");
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
button = gtk_toggle_button_new_with_label ("Warning");
@@ -88,7 +93,9 @@ do_infobar (GtkWidget *do_widget)
g_signal_connect (bar, "response", G_CALLBACK (on_bar_response), window);
gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_QUESTION);
label = gtk_label_new ("This is\nan info bar with message type\nGTK_MESSAGE_QUESTION");
label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_QUESTION");
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
button = gtk_toggle_button_new_with_label ("Question");
@@ -99,6 +106,8 @@ do_infobar (GtkWidget *do_widget)
gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_ERROR);
label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_ERROR");
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
button = gtk_toggle_button_new_with_label ("Error");
@@ -109,6 +118,8 @@ do_infobar (GtkWidget *do_widget)
gtk_box_pack_start (GTK_BOX (vbox), bar, FALSE, FALSE, 0);
gtk_info_bar_set_message_type (GTK_INFO_BAR (bar), GTK_MESSAGE_OTHER);
label = gtk_label_new ("This is an info bar with message type GTK_MESSAGE_OTHER");
gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
gtk_label_set_xalign (GTK_LABEL (label), 0);
gtk_box_pack_start (GTK_BOX (gtk_info_bar_get_content_area (GTK_INFO_BAR (bar))), label, FALSE, FALSE, 0);
button = gtk_toggle_button_new_with_label ("Other");
@@ -131,14 +142,9 @@ do_infobar (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -44,11 +44,10 @@ activate_link (GtkWidget *label,
return FALSE;
}
static GtkWidget *window = NULL;
GtkWidget *
do_links (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GtkWidget *label;
if (!window)
@@ -78,14 +77,9 @@ do_links (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show (window);
}
gtk_widget_show (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -295,7 +295,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

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.
@@ -782,41 +781,9 @@ load_file (const gchar *demoname,
fontify (source_buffer);
gtk_text_buffer_create_tag (source_buffer, "top-margin",
"pixels-above-lines", 20,
NULL);
gtk_text_buffer_get_start_iter (source_buffer, &start);
end = start;
gtk_text_iter_forward_word_end (&end);
gtk_text_buffer_apply_tag_by_name (source_buffer, "top-margin", &start, &end);
gtk_text_buffer_create_tag (source_buffer, "bottom-margin",
"pixels-below-lines", 20,
NULL);
gtk_text_buffer_get_end_iter (source_buffer, &end);
start = end;
gtk_text_iter_backward_word_start (&start);
gtk_text_buffer_apply_tag_by_name (source_buffer, "bottom-margin", &start, &end);
gtk_text_view_set_buffer (GTK_TEXT_VIEW (source_view), source_buffer);
g_object_unref (source_buffer);
gtk_text_buffer_create_tag (info_buffer, "top-margin",
"pixels-above-lines", 20,
NULL);
gtk_text_buffer_get_start_iter (info_buffer, &start);
end = start;
gtk_text_iter_forward_word_end (&end);
gtk_text_buffer_apply_tag_by_name (info_buffer, "top-margin", &start, &end);
gtk_text_buffer_create_tag (info_buffer, "bottom-margin",
"pixels-below-lines", 20,
NULL);
gtk_text_buffer_get_end_iter (info_buffer, &end);
start = end;
gtk_text_iter_backward_word_start (&start);
gtk_text_buffer_apply_tag_by_name (info_buffer, "bottom-margin", &start, &end);
gtk_text_view_set_buffer (GTK_TEXT_VIEW (info_view), info_buffer);
g_object_unref (info_buffer);
}
@@ -867,6 +834,8 @@ create_text (GtkWidget **view,
g_object_set (text_view,
"left-margin", 20,
"right-margin", 20,
"top-margin", 20,
"bottom-margin", 20,
NULL);
gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
@@ -973,6 +942,32 @@ row_activated_cb (GtkWidget *tree_view,
run_example_for_row (window, model, &iter);
}
static void
start_cb (GtkMenuItem *item, GtkWidget *scrollbar)
{
GtkAdjustment *adj;
adj = gtk_range_get_adjustment (GTK_RANGE (scrollbar));
gtk_adjustment_set_value (adj, gtk_adjustment_get_lower (adj));
}
static void
end_cb (GtkMenuItem *item, GtkWidget *scrollbar)
{
GtkAdjustment *adj;
adj = gtk_range_get_adjustment (GTK_RANGE (scrollbar));
gtk_adjustment_set_value (adj, gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj));
}
static gboolean
scrollbar_popup (GtkWidget *scrollbar, GtkWidget *menu)
{
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time ());
return TRUE;
}
static void
activate (GApplication *app)
{
@@ -982,6 +977,11 @@ activate (GApplication *app)
GtkTreeModel *model;
GtkTreeIter iter;
GError *error = NULL;
GtkWidget *sw;
GtkWidget *scrollbar;
GtkWidget *menu;
GtkWidget *item;
static GActionEntry win_entries[] = {
{ "run", activate_run, NULL, NULL, NULL }
};
@@ -1008,6 +1008,23 @@ activate (GApplication *app)
treeview = (GtkWidget *)gtk_builder_get_object (builder, "treeview");
model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview));
sw = (GtkWidget *)gtk_builder_get_object (builder, "source-scrolledwindow");
scrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (sw));
menu = gtk_menu_new ();
item = gtk_menu_item_new_with_label ("Start");
g_signal_connect (item, "activate", G_CALLBACK (start_cb), scrollbar);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
item = gtk_menu_item_new_with_label ("End");
g_signal_connect (item, "activate", G_CALLBACK (end_cb), scrollbar);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show_all (menu);
g_signal_connect (scrollbar, "popup-menu", G_CALLBACK (scrollbar_popup), menu);
load_file (gtk_demos[0].name, gtk_demos[0].filename);
populate_model (model);

View File

@@ -135,6 +135,8 @@
<property name="can_focus">True</property>
<property name="left-margin">20</property>
<property name="right-margin">20</property>
<property name="top-margin">20</property>
<property name="bottom-margin">20</property>
<property name="pixels_above_lines">2</property>
<property name="pixels_below_lines">2</property>
<property name="editable">False</property>
@@ -160,7 +162,7 @@
</packing>
</child>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow2">
<object class="GtkScrolledWindow" id="source-scrolledwindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">none</property>
@@ -170,6 +172,8 @@
<property name="can_focus">True</property>
<property name="left-margin">20</property>
<property name="right-margin">20</property>
<property name="top-margin">20</property>
<property name="bottom-margin">20</property>
<property name="editable">False</property>
<property name="cursor_visible">False</property>
</object>

64
demos/gtk-demo/markup.c Normal file
View File

@@ -0,0 +1,64 @@
/* Text View/Markup
*
* GtkTextBuffer lets you define your own tags that can influence
* text formatting in a variety of ways. In this example, we show
* that GtkTextBuffer can load Pango markup and automatically generate
* suitable tags.
*/
#include <gtk/gtk.h>
GtkWidget *
do_markup (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *view;
GtkWidget *sw;
GtkTextBuffer *buffer;
GtkTextIter iter;
GBytes *bytes;
const gchar *markup;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_default_size (GTK_WINDOW (window), 450, 450);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
gtk_window_set_title (GTK_WINDOW (window), "Markup");
view = gtk_text_view_new ();
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 10);
gtk_text_view_set_right_margin (GTK_TEXT_VIEW (view), 10);
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_NEVER,
GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (window), sw);
gtk_container_add (GTK_CONTAINER (sw), view);
bytes = g_resources_lookup_data ("/markup/markup.txt", 0, NULL);
markup = (const gchar *)g_bytes_get_data (bytes, NULL);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
gtk_text_buffer_get_start_iter (buffer, &iter);
gtk_text_buffer_insert_markup (buffer, &iter, markup, -1);
g_bytes_unref (bytes);
gtk_widget_show_all (sw);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show (window);
else
gtk_widget_destroy (window);
return window;
}

16
demos/gtk-demo/markup.txt Normal file
View File

@@ -0,0 +1,16 @@
Text sizes: <span size="xx-small">tiny</span> <span size="x-small">very small</span> <span size="small">small</span> <span size="medium">normal</span> <span size="large">large</span> <span size="x-large">very large</span> <span size="xx-large">huge</span>
Text <span color="gray">c<span color="green">o</span>l<span color="tomato">o</span>rs</span>
Colorful <span underline="low" underline-color="blue"><span underline="double" underline-color="red">under</span>lines</span>
Colorful <span strikethrough="true" strikethrough-color="magenta">strikethroughs</span>
Superscripts and subscripts: 𝜀<span rise="-6000" size="x-small" font_desc="italic">0</span> = 𝜔<span rise="8000" size="smaller">𝜔<span rise="14000" size="smaller">𝜔<span rise="20000">.<span rise="23000">.<span rise="26000">.</span></span></span></span></span>
<span letter_spacing="3000">Letterspacing</span>
OpenType font features: <span font_desc="sans regular" font_features="dlig=0">feast</span> versus <span font_desc="sans regular" font_features="dlig=1">feast</span>
Shortcuts: <tt>Monospace</tt> <b>Bold</b> <i>Italic</i> <big>Big</big> <small>Small</small> <u>Underlined</u> <s>Strikethrough</s> Super<sup>script</sup> Sub<sub>script</sub>

View File

@@ -158,14 +158,9 @@ do_menus (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show (window);
}
gtk_widget_show (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -91,7 +91,7 @@
<item>
<attribute name="label" translatable="yes">_Bold</attribute>
<attribute name="action">win.bold</attribute>
<attribute name="accel">&lt;Primary&gt;b</attribute>
<attribute name="accel">&lt;Primary&gt;&lt;Shift&gt;b</attribute>
</item>
</section>
</submenu>

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

View File

@@ -0,0 +1,69 @@
/* Model Button
*
* GtkModelButton is a button widget that is designed to be used with
* a GAction as model. The button will adjust its appearance according
* to the kind of action it is connected to.
*
* It is also possible to use GtkModelButton without a GAction. In this
* case, you should set the "role" attribute yourself, and connect to the
* "clicked" signal as you would for any other button.
*
* A common use of GtkModelButton is to implement menu-like content
* in popovers.
*/
#include <gtk/gtk.h>
static void
tool_clicked (GtkButton *button)
{
gboolean active;
g_object_get (button, "active", &active, NULL);
g_object_set (button, "active", !active, NULL);
}
GtkWidget *
do_modelbutton (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
static GActionEntry win_entries[] = {
{ "color", NULL, "s", "'red'", NULL },
{ "chocolate", NULL, NULL, "true", NULL },
{ "vanilla", NULL, NULL, "false", NULL },
{ "sprinkles", NULL, NULL, NULL, NULL }
};
if (!window)
{
GtkBuilder *builder;
GActionGroup *actions;
builder = gtk_builder_new_from_resource ("/modelbutton/modelbutton.ui");
gtk_builder_add_callback_symbol (builder, "tool_clicked", G_CALLBACK (tool_clicked));
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
actions = (GActionGroup*)g_simple_action_group_new ();
g_action_map_add_action_entries (G_ACTION_MAP (actions),
win_entries, G_N_ELEMENTS (win_entries),
window);
gtk_widget_insert_action_group (window, "win", actions);
g_object_unref (builder);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
gtk_widget_destroy (window);
return window;
}

View File

@@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.6 -->
<object class="GtkWindow" id="window1">
<child type="titlebar">
<object class="GtkHeaderBar">
<property name="visible">True</property>
<property name="show-close-button">True</property>
<property name="title" translatable="yes">Model Button</property>
</object>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="margin">80</property>
<child>
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="popover">thing_a</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">Color</property>
<property name="hexpand">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="popover">thing_b</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">Flavors</property>
<property name="hexpand">True</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="popover">thing_c</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">Tools</property>
<property name="hexpand">True</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<object class="GtkPopover" id="thing_a">
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="margin">10</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="halign">fill</property>
<property name="action-name">win.color</property>
<property name="action-target">'red'</property>
<property name="text">Red</property>
<property name="inverted">True</property>
</object>
</child>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="halign">fill</property>
<property name="action-name">win.color</property>
<property name="action-target">'green'</property>
<property name="text">Green</property>
<property name="inverted">True</property>
</object>
</child>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="halign">fill</property>
<property name="action-name">win.color</property>
<property name="action-target">'blue'</property>
<property name="text">Blue</property>
<property name="inverted">True</property>
</object>
</child>
</object>
</child>
</object>
<object class="GtkPopover" id="thing_b">
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="margin">10</property>
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="action-name">win.chocolate</property>
<property name="text">Chocolate</property>
</object>
</child>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="action-name">win.vanilla</property>
<property name="text">Vanilla</property>
</object>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
</object>
</child>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="action-name">win.sprinkles</property>
<property name="text">Add Sprinkles</property>
</object>
</child>
</object>
</child>
</object>
<object class="GtkPopover" id="thing_c">
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="margin">10</property>
<property name="orientation">vertical</property>
<property name="spacing">10</property>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="text">Hammer</property>
<property name="role">check</property>
<signal name="clicked" handler="tool_clicked"/>
</object>
</child>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="text">Screwdriver</property>
<property name="role">check</property>
<signal name="clicked" handler="tool_clicked"/>
</object>
</child>
<child>
<object class="GtkModelButton">
<property name="visible">True</property>
<property name="text">Drill</property>
<property name="role">check</property>
<signal name="clicked" handler="tool_clicked"/>
</object>
</child>
</object>
</child>
</object>
</interface>

View File

@@ -230,7 +230,6 @@ gtk_rotated_bin_realize (GtkWidget *widget)
{
GtkRotatedBin *bin = GTK_ROTATED_BIN (widget);
GtkAllocation allocation;
GtkStyleContext *context;
GdkWindow *window;
GdkWindowAttr attributes;
gint attributes_mask;
@@ -290,9 +289,6 @@ gtk_rotated_bin_realize (GtkWidget *widget)
g_signal_connect (bin->offscreen_window, "from-embedder",
G_CALLBACK (offscreen_window_from_parent), bin);
context = gtk_widget_get_style_context (widget);
gtk_style_context_set_background (context, window);
gtk_style_context_set_background (context, bin->offscreen_window);
gdk_window_show (bin->offscreen_window);
}
@@ -565,11 +561,11 @@ scale_changed (GtkRange *range,
gtk_rotated_bin_set_angle (bin, gtk_range_get_value (range));
}
static GtkWidget *window = NULL;
GtkWidget *
do_offscreen_window (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *bin, *vbox, *scale, *button;
@@ -603,10 +599,7 @@ do_offscreen_window (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -169,7 +169,6 @@ gtk_mirror_bin_realize (GtkWidget *widget)
{
GtkMirrorBin *bin = GTK_MIRROR_BIN (widget);
GtkAllocation allocation;
GtkStyleContext *context;
GdkWindow *window;
GdkWindowAttr attributes;
gint attributes_mask;
@@ -229,9 +228,6 @@ gtk_mirror_bin_realize (GtkWidget *widget)
g_signal_connect (bin->offscreen_window, "from-embedder",
G_CALLBACK (offscreen_window_from_parent), bin);
context = gtk_widget_get_style_context (widget);
gtk_style_context_set_background (context, window);
gtk_style_context_set_background (context, bin->offscreen_window);
gdk_window_show (bin->offscreen_window);
}
@@ -468,11 +464,11 @@ gtk_mirror_bin_draw (GtkWidget *widget,
/*** ***/
static GtkWidget *window = NULL;
GtkWidget *
do_offscreen_window2 (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *bin, *vbox;
@@ -516,10 +512,7 @@ do_offscreen_window2 (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -1,4 +1,4 @@
/* Overlay
/* Overlay/Interactive Overlay
*
* Shows widgets in static positions over a main widget.
*
@@ -33,7 +33,7 @@ do_overlay (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 500, 510);
gtk_window_set_title (GTK_WINDOW (window), "Overlay");
gtk_window_set_title (GTK_WINDOW (window), "Interactive Overlay");
overlay = gtk_overlay_new ();
grid = gtk_grid_new ();
@@ -77,14 +77,9 @@ do_overlay (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show (window);
}
gtk_widget_show (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

105
demos/gtk-demo/overlay2.c Normal file
View File

@@ -0,0 +1,105 @@
/* Overlay/Decorative Overlay
*
* Another example of an overlay with some decorative
* and some interactive controls.
*/
#include <gtk/gtk.h>
static GtkTextTag *tag;
static void
margin_changed (GtkAdjustment *adjustment,
GtkTextView *text)
{
gint value;
value = (gint)gtk_adjustment_get_value (adjustment);
gtk_text_view_set_left_margin (GTK_TEXT_VIEW (text), value);
g_object_set (tag, "pixels-above-lines", value, NULL);
}
GtkWidget *
do_overlay2 (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *overlay;
GtkWidget *sw;
GtkWidget *text;
GtkWidget *image;
GtkWidget *scale;
GtkTextBuffer *buffer;
GtkTextIter start, end;
GtkAdjustment *adjustment;
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 500, 510);
gtk_window_set_title (GTK_WINDOW (window), "Decorative Overlay");
overlay = gtk_overlay_new ();
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
text = gtk_text_view_new ();
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text));
gtk_text_buffer_set_text (buffer, "Dear diary...", -1);
tag = gtk_text_buffer_create_tag (buffer, "top-margin",
"pixels-above-lines", 0,
NULL);
gtk_text_buffer_get_start_iter (buffer, &start);
end = start;
gtk_text_iter_forward_word_end (&end);
gtk_text_buffer_apply_tag (buffer, tag, &start, &end);
gtk_container_add (GTK_CONTAINER (window), overlay);
gtk_container_add (GTK_CONTAINER (overlay), sw);
gtk_container_add (GTK_CONTAINER (sw), text);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
image = gtk_image_new_from_resource ("/overlay2/decor1.png");
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), image);
gtk_overlay_set_overlay_pass_through (GTK_OVERLAY (overlay), image, TRUE);
gtk_widget_set_halign (image, GTK_ALIGN_START);
gtk_widget_set_valign (image, GTK_ALIGN_START);
image = gtk_image_new_from_resource ("/overlay2/decor2.png");
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), image);
gtk_overlay_set_overlay_pass_through (GTK_OVERLAY (overlay), image, TRUE);
gtk_widget_set_halign (image, GTK_ALIGN_END);
gtk_widget_set_valign (image, GTK_ALIGN_END);
adjustment = gtk_adjustment_new (0, 0, 100, 1, 1, 0);
g_signal_connect (adjustment, "value-changed",
G_CALLBACK (margin_changed), text);
scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment);
gtk_scale_set_draw_value (GTK_SCALE (scale), FALSE);
gtk_widget_set_size_request (scale, 120, -1);
gtk_widget_set_margin_start (scale, 20);
gtk_widget_set_margin_end (scale, 20);
gtk_widget_set_margin_bottom (scale, 20);
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), scale);
gtk_widget_set_halign (scale, GTK_ALIGN_START);
gtk_widget_set_valign (scale, GTK_ALIGN_END);
gtk_widget_set_tooltip_text (scale, "Margin");
gtk_adjustment_set_value (adjustment, 100);
gtk_widget_show_all (overlay);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show (window);
else
gtk_widget_destroy (window);
return window;
}

View File

@@ -29,10 +29,7 @@ do_pagesetup (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -192,14 +192,9 @@ do_panes (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show (window);
}
gtk_widget_show (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -20,8 +20,7 @@ do_pickers (GtkWidget *do_widget)
gtk_window_set_title (GTK_WINDOW (window), "Pickers");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed),
&window);
G_CALLBACK (gtk_widget_destroyed), &window);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
@@ -76,14 +75,9 @@ do_pickers (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -183,7 +183,6 @@ do_pixbufs (GtkWidget *do_widget)
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
error = NULL;
if (!load_pixbufs (&error))
{
@@ -221,13 +220,10 @@ do_pixbufs (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
g_object_unref (frame);
}

View File

@@ -176,10 +176,7 @@ do_popover (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -6,8 +6,8 @@
#include <gtk/gtk.h>
static GtkBuilder *builder;
static gint count = 0;
static guint timeout = 0;
static void
change_direction (GtkRevealer *revealer)
@@ -18,14 +18,15 @@ change_direction (GtkRevealer *revealer)
gtk_revealer_set_reveal_child (revealer, !revealed);
}
static guint timeout = 0;
static gboolean
reveal_one (gpointer data)
{
GtkWidget *window = data;
GtkBuilder *builder;
gchar *name;
GtkRevealer *revealer;
builder = GTK_BUILDER (g_object_get_data (G_OBJECT (window), "builder"));
name = g_strdup_printf ("revealer%d", count);
revealer = (GtkRevealer *)gtk_builder_get_object (builder, name);
@@ -44,53 +45,45 @@ reveal_one (gpointer data)
return TRUE;
}
static GtkWidget *window = NULL;
static void
response_cb (GtkWidget *dialog,
gint response_id,
gpointer data)
on_destroy (gpointer data)
{
window = NULL;
if (timeout != 0)
{
g_source_remove (timeout);
timeout = 0;
}
gtk_widget_destroy (dialog);
}
GtkWidget *
do_revealer (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GError *err = NULL;
if (!window)
{
builder = gtk_builder_new ();
gtk_builder_add_from_resource (builder, "/revealer/revealer.ui", &err);
if (err)
{
g_error ("ERROR: %s\n", err->message);
return NULL;
}
GtkBuilder *builder;
builder = gtk_builder_new_from_resource ("/revealer/revealer.ui");
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "dialog1"));
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
g_signal_connect (window, "response", G_CALLBACK (response_cb), NULL);
G_CALLBACK (on_destroy), NULL);
g_object_set_data_full (G_OBJECT (window), "builder", builder, g_object_unref);
}
if (!gtk_widget_get_visible (window))
{
count = 0;
timeout = g_timeout_add (690, reveal_one, NULL);
timeout = g_timeout_add (690, reveal_one, window);
gtk_widget_show_all (window);
}
else
{
gtk_widget_destroy (window);
window = NULL;
}

View File

@@ -1,223 +1,177 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.6 -->
<object class="GtkDialog" id="dialog1">
<property name="can_focus">False</property>
<object class="GtkWindow" id="window">
<property name="border_width">5</property>
<property name="type_hint">dialog</property>
<property name="default_width">300</property>
<property name="default_height">300</property>
<property name="title">Revealer</property>
<child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area1">
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="halign">center</property>
<property name="valign">center</property>
<child>
<object class="GtkRevealer" id="revealer0">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">crossfade</property>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">_Close</property>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
<property name="left-attach">2</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid1">
<object class="GtkRevealer" id="revealer1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-up</property>
<child>
<object class="GtkRevealer" id="revealer0">
<object class="GtkImage">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">crossfade</property>
<child>
<object class="GtkImage" id="image0">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer1">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-up</property>
<child>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer2">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-right</property>
<child>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">3</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer3">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-down</property>
<child>
<object class="GtkImage" id="image3">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer4">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-left</property>
<child>
<object class="GtkImage" id="image4">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer5">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-up</property>
<child>
<object class="GtkImage" id="image5">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer6">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-right</property>
<child>
<object class="GtkImage" id="image6">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">4</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer7">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-down</property>
<child>
<object class="GtkImage" id="image7">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer8">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-left</property>
<child>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="left-attach">2</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer2">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-right</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">3</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer3">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">3</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer4">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-left</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer5">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-up</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer6">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-right</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">4</property>
<property name="top-attach">2</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer7">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">2</property>
<property name="top-attach">4</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="revealer8">
<property name="visible">True</property>
<property name="transition-duration">2000</property>
<property name="transition-type">slide-left</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">face-cool-symbolic</property>
<property name="icon-size">6</property>
</object>
</child>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">2</property>
</packing>
</child>
</object>
</child>
<action-widgets>
<action-widget response="0">button1</action-widget>
</action-widgets>
</object>
</interface>

View File

@@ -1,4 +1,4 @@
/* Rotated Text
/* Pango/Rotated Text
*
* This demo shows how to use PangoCairo to draw rotated and transformed
* text. The right pane shows a rotated GtkLabel widget.
@@ -11,8 +11,6 @@
#include <gtk/gtk.h>
#include <string.h>
static GtkWidget *window = NULL;
#define HEART "♥"
const char text[] = "I ♥ GTK+";
@@ -173,6 +171,8 @@ rotated_text_draw (GtkWidget *widget,
GtkWidget *
do_rotated_text (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *box;
@@ -186,7 +186,8 @@ do_rotated_text (GtkWidget *do_widget)
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Rotated Text");
gtk_window_set_default_size (GTK_WINDOW (window), 4 * RADIUS, 2 * RADIUS);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_set_homogeneous (GTK_BOX (box), TRUE);
@@ -218,14 +219,9 @@ do_rotated_text (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

38
demos/gtk-demo/scale.c Normal file
View File

@@ -0,0 +1,38 @@
/* Scale
*
* GtkScale is a way to select a value from a range.
* Scales can have marks to help pick special values,
* and they can also restrict the values that can be
* chosen.
*/
#include <gtk/gtk.h>
GtkWidget *
do_scale (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkBuilder *builder;
builder = gtk_builder_new_from_resource ("/scale/scale.ui");
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
g_object_unref (builder);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
gtk_widget_destroy (window);
return window;
}

143
demos/gtk-demo/scale.ui Normal file
View File

@@ -0,0 +1,143 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.6 -->
<object class="GtkAdjustment" id="adjustment1">
<property name="lower">0</property>
<property name="upper">4</property>
<property name="value">2</property>
</object>
<object class="GtkAdjustment" id="adjustment2">
<property name="lower">0</property>
<property name="upper">4</property>
<property name="value">2</property>
</object>
<object class="GtkAdjustment" id="adjustment3">
<property name="lower">0</property>
<property name="upper">4</property>
<property name="value">2</property>
</object>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Scales</property>
<property name="border-width" translatable="yes">20</property>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="row-spacing">10</property>
<property name="column-spacing">10</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">Plain</property>
<property name="xalign">0</property>
<property name="halign">fill</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkScale">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<property name="can_focus">True</property>
<property name="width-request">200</property>
<property name="draw_value">False</property>
<property name="adjustment">adjustment1</property>
<property name="hexpand">True</property>
<property name="halign">fill</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">Marks</property>
<property name="xalign">0</property>
<property name="halign">fill</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkScale">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<property name="can_focus">True</property>
<property name="width-request">200</property>
<property name="draw_value">False</property>
<property name="adjustment">adjustment2</property>
<property name="hexpand">True</property>
<property name="halign">fill</property>
<marks>
<mark value="0" position="bottom"></mark>
<mark value="1" position="bottom"></mark>
<mark value="2" position="bottom"></mark>
<mark value="3" position="bottom"></mark>
<mark value="4" position="bottom"></mark>
</marks>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">Discrete</property>
<property name="xalign">0</property>
<property name="halign">fill</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkScale">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<property name="can_focus">True</property>
<property name="width-request">200</property>
<property name="round-digits">0</property>
<property name="draw_value">False</property>
<property name="adjustment">adjustment3</property>
<property name="hexpand">True</property>
<property name="halign">fill</property>
<marks>
<mark value="0" position="bottom"></mark>
<mark value="1" position="bottom"></mark>
<mark value="2" position="bottom"></mark>
<mark value="3" position="bottom"></mark>
<mark value="4" position="bottom"></mark>
</marks>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@@ -45,8 +45,7 @@ finish_search (GtkButton *button)
show_find_button ();
g_source_remove (search_progress_id);
search_progress_id = 0;
return FALSE;
return G_SOURCE_REMOVE;
}
static gboolean
@@ -55,7 +54,7 @@ start_search_feedback (gpointer data)
search_progress_id = g_timeout_add_full (G_PRIORITY_DEFAULT, 100,
(GSourceFunc)search_progress, data,
(GDestroyNotify)search_progress_done);
return FALSE;
return G_SOURCE_REMOVE;
}
static void
@@ -167,13 +166,19 @@ activate_cb (GtkEntry *entry,
}
static void
search_entry_destroyed (GtkWidget *widget)
search_entry_destroyed (GtkWidget *widget)
{
if (finish_search_id != 0)
g_source_remove (finish_search_id);
{
g_source_remove (finish_search_id);
finish_search_id = 0;
}
if (search_progress_id != 0)
g_source_remove (search_progress_id);
{
g_source_remove (search_progress_id);
search_progress_id = 0;
}
window = NULL;
}
@@ -210,34 +215,24 @@ entry_populate_popup (GtkEntry *entry,
GtkWidget *
do_search_entry (GtkWidget *do_widget)
{
GtkWidget *content_area;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *label;
GtkWidget *entry;
GtkWidget *button;
GtkWidget *find_button;
GtkWidget *cancel_button;
if (!window)
{
window = gtk_dialog_new_with_buttons ("Search Entry",
GTK_WINDOW (do_widget),
0,
_("_Close"),
GTK_RESPONSE_NONE,
NULL);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Search Entry");
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect (window, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (search_entry_destroyed), &window);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
label = gtk_label_new (NULL);
@@ -284,12 +279,9 @@ do_search_entry (GtkWidget *do_widget)
gtk_menu_attach_to_widget (GTK_MENU (menu), entry, NULL);
/* add accessible alternatives for icon functionality */
g_object_set (entry, "populate-all", TRUE, NULL);
g_signal_connect (entry, "populate-popup",
G_CALLBACK (entry_populate_popup), NULL);
/* Give the focus to the close button */
button = gtk_dialog_get_widget_for_response (GTK_DIALOG (window), GTK_RESPONSE_NONE);
gtk_widget_grab_focus (button);
}
if (!gtk_widget_get_visible (window))
@@ -298,7 +290,6 @@ do_search_entry (GtkWidget *do_widget)
{
gtk_widget_destroy (menu);
gtk_widget_destroy (window);
window = NULL;
}
return window;

View File

@@ -8,14 +8,6 @@
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static void
search_entry_destroyed (GtkWidget *widget)
{
window = NULL;
}
static void
search_changed_cb (GtkSearchEntry *entry,
GtkLabel *result_label)
@@ -73,6 +65,7 @@ stop_search (GtkSearchEntry *entry,
GtkWidget *
do_search_entry2 (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *label;
@@ -90,7 +83,7 @@ do_search_entry2 (GtkWidget *do_widget)
gtk_widget_set_size_request (window, 200, -1);
g_signal_connect (window, "destroy",
G_CALLBACK (search_entry_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
@@ -164,10 +157,7 @@ do_search_entry2 (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -9,11 +9,10 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
GtkWidget *
do_sidebar (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GtkWidget *sidebar;
GtkWidget *stack;
GtkWidget *box;

View File

@@ -16,8 +16,6 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
/* Convenience function to create a combo box holding a number of strings
*/
GtkWidget *
@@ -48,12 +46,14 @@ add_row (GtkGrid *table,
label = gtk_label_new_with_mnemonic (label_text);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_widget_set_valign (label, GTK_ALIGN_END);
gtk_widget_set_valign (label, GTK_ALIGN_BASELINE);
gtk_widget_set_hexpand (label, TRUE);
gtk_grid_attach (table, label, 0, row, 1, 1);
combo_box = create_combo_box (options);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo_box);
gtk_widget_set_halign (combo_box, GTK_ALIGN_END);
gtk_widget_set_valign (combo_box, GTK_ALIGN_BASELINE);
gtk_size_group_add_widget (size_group, combo_box);
gtk_grid_attach (table, combo_box, 1, row, 1, 1);
}
@@ -79,7 +79,7 @@ toggle_grouping (GtkToggleButton *check_button,
GtkWidget *
do_sizegroup (GtkWidget *do_widget)
{
GtkWidget *content_area;
static GtkWidget *window = NULL;
GtkWidget *table;
GtkWidget *frame;
GtkWidget *vbox;
@@ -95,28 +95,20 @@ do_sizegroup (GtkWidget *do_widget)
};
static const char *end_options[] = {
"Square", "Round", "Arrow", NULL
"Square", "Round", "Double Arrow", NULL
};
if (!window)
{
window = gtk_dialog_new_with_buttons ("Size Groups",
GTK_WINDOW (do_widget),
0,
_("_Close"),
GTK_RESPONSE_NONE,
NULL);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Size Groups");
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect (window, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
gtk_box_pack_start (GTK_BOX (content_area), vbox, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);

253
demos/gtk-demo/spinbutton.c Normal file
View File

@@ -0,0 +1,253 @@
/* Spin Button
*
* GtkSpinButton provides convenient ways to input data
* that can be seen as a value in a range. The examples
* here show that this does not necessarily mean numeric
* values, and it can include custom formatting.
*/
#include <glib/gi18n.h>
#include <gtk/gtk.h>
#include <math.h>
#include <stdlib.h>
static gint
hex_spin_input (GtkSpinButton *spin_button,
gdouble *new_val)
{
const gchar *buf;
gchar *err;
gdouble res;
buf = gtk_entry_get_text (GTK_ENTRY (spin_button));
res = strtol (buf, &err, 16);
*new_val = res;
if (*err)
return GTK_INPUT_ERROR;
else
return TRUE;
}
static gint
hex_spin_output (GtkSpinButton *spin_button)
{
GtkAdjustment *adjustment;
gchar *buf;
gint val;
adjustment = gtk_spin_button_get_adjustment (spin_button);
val = (gint) gtk_adjustment_get_value (adjustment);
if (fabs (val) < 1e-5)
buf = g_strdup ("0x00");
else
buf = g_strdup_printf ("0x%.2X", val);
if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
g_free (buf);
return TRUE;
}
static gint
time_spin_input (GtkSpinButton *spin_button,
gdouble *new_val)
{
const gchar *text;
gchar **str;
gboolean found = FALSE;
gint hours;
gint minutes;
gchar *endh;
gchar *endm;
text = gtk_entry_get_text (GTK_ENTRY (spin_button));
str = g_strsplit (text, ":", 2);
if (g_strv_length (str) == 2)
{
hours = strtol (str[0], &endh, 10);
minutes = strtol (str[1], &endm, 10);
if (!*endh && !*endm &&
0 <= hours && hours < 24 &&
0 <= minutes && minutes < 60)
{
*new_val = hours * 60 + minutes;
found = TRUE;
}
}
g_strfreev (str);
if (!found)
{
*new_val = 0.0;
return GTK_INPUT_ERROR;
}
return TRUE;
}
static gint
time_spin_output (GtkSpinButton *spin_button)
{
GtkAdjustment *adjustment;
gchar *buf;
gdouble hours;
gdouble minutes;
adjustment = gtk_spin_button_get_adjustment (spin_button);
hours = gtk_adjustment_get_value (adjustment) / 60.0;
minutes = (hours - floor (hours)) * 60.0;
buf = g_strdup_printf ("%02.0f:%02.0f", floor (hours), floor (minutes + 0.5));
if (strcmp (buf, gtk_entry_get_text (GTK_ENTRY (spin_button))))
gtk_entry_set_text (GTK_ENTRY (spin_button), buf);
g_free (buf);
return TRUE;
}
static gchar *month[12] = {
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
};
static gint
month_spin_input (GtkSpinButton *spin_button,
gdouble *new_val)
{
gint i;
gchar *tmp1, *tmp2;
gboolean found = FALSE;
for (i = 1; i <= 12; i++)
{
tmp1 = g_ascii_strup (month[i - 1], -1);
tmp2 = g_ascii_strup (gtk_entry_get_text (GTK_ENTRY (spin_button)), -1);
if (strstr (tmp1, tmp2) == tmp1)
found = TRUE;
g_free (tmp1);
g_free (tmp2);
if (found)
break;
}
if (!found)
{
*new_val = 0.0;
return GTK_INPUT_ERROR;
}
*new_val = (gdouble) i;
return TRUE;
}
static gint
month_spin_output (GtkSpinButton *spin_button)
{
GtkAdjustment *adjustment;
gdouble value;
gint i;
adjustment = gtk_spin_button_get_adjustment (spin_button);
value = gtk_adjustment_get_value (adjustment);
for (i = 1; i <= 12; i++)
if (fabs (value - (double)i) < 1e-5)
{
if (strcmp (month[i-1], gtk_entry_get_text (GTK_ENTRY (spin_button))))
gtk_entry_set_text (GTK_ENTRY (spin_button), month[i-1]);
}
return TRUE;
}
static gboolean
value_to_label (GBinding *binding,
const GValue *from,
GValue *to,
gpointer user_data)
{
g_value_take_string (to, g_strdup_printf ("%g", g_value_get_double (from)));
return TRUE;
}
GtkWidget *
do_spinbutton (GtkWidget *do_widget)
{
static GtkWidget *window;
if (!window)
{
GtkBuilder *builder;
GtkAdjustment *adj;
GtkWidget *label;
builder = gtk_builder_new_from_resource ("/spinbutton/spinbutton.ui");
gtk_builder_add_callback_symbols (builder,
"hex_spin_input", G_CALLBACK (hex_spin_input),
"hex_spin_output", G_CALLBACK (hex_spin_output),
"time_spin_input", G_CALLBACK (time_spin_input),
"time_spin_output", G_CALLBACK (time_spin_output),
"month_spin_input", G_CALLBACK (month_spin_input),
"month_spin_output", G_CALLBACK (month_spin_output),
NULL);
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Spin Buttons");
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
adj = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "basic_adjustment"));
label = GTK_WIDGET (gtk_builder_get_object (builder, "basic_label"));
g_object_bind_property_full (adj, "value",
label, "label",
G_BINDING_SYNC_CREATE,
value_to_label,
NULL,
NULL, NULL);
adj = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "hex_adjustment"));
label = GTK_WIDGET (gtk_builder_get_object (builder, "hex_label"));
g_object_bind_property_full (adj, "value",
label, "label",
G_BINDING_SYNC_CREATE,
value_to_label,
NULL,
NULL, NULL);
adj = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "time_adjustment"));
label = GTK_WIDGET (gtk_builder_get_object (builder, "time_label"));
g_object_bind_property_full (adj, "value",
label, "label",
G_BINDING_SYNC_CREATE,
value_to_label,
NULL,
NULL, NULL);
adj = GTK_ADJUSTMENT (gtk_builder_get_object (builder, "month_adjustment"));
label = GTK_WIDGET (gtk_builder_get_object (builder, "month_label"));
g_object_bind_property_full (adj, "value",
label, "label",
G_BINDING_SYNC_CREATE,
value_to_label,
NULL,
NULL, NULL);
g_object_unref (builder);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
gtk_widget_destroy (window);
return window;
}

View File

@@ -0,0 +1,205 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<object class="GtkAdjustment" id="basic_adjustment">
<property name="lower">-10000</property>
<property name="upper">10000</property>
<property name="value">0</property>
<property name="step_increment">0.5</property>
<property name="page_increment">100</property>
<property name="page_size">0</property>
</object>
<object class="GtkAdjustment" id="hex_adjustment">
<property name="lower">0</property>
<property name="upper">255</property>
<property name="value">0</property>
<property name="step_increment">1</property>
<property name="page_increment">16</property>
<property name="page_size">0</property>
</object>
<object class="GtkAdjustment" id="time_adjustment">
<property name="lower">0</property>
<property name="upper">1410</property>
<property name="value">0</property>
<property name="step_increment">30</property>
<property name="page_increment">60</property>
<property name="page_size">0</property>
</object>
<object class="GtkAdjustment" id="month_adjustment">
<property name="lower">1</property>
<property name="upper">12</property>
<property name="value">1</property>
<property name="step_increment">1</property>
<property name="page_increment">5</property>
<property name="page_size">0</property>
</object>
<object class="GtkWindow" id="window">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Spin Button</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin">20</property>
<property name="row-spacing">10</property>
<property name="column-spacing">10</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">_Numeric</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">basic_spin</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="basic_spin">
<property name="visible">True</property>
<property name="halign">start</property>
<property name="width_chars">5</property>
<property name="adjustment">basic_adjustment</property>
<property name="climb_rate">1</property>
<property name="digits">2</property>
<property name="numeric">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="basic_label">
<property name="visible">True</property>
<property name="width_chars">10</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">_Hexadecimal</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">hex_spin</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="hex_spin">
<property name="visible">True</property>
<property name="halign">start</property>
<property name="width_chars">4</property>
<property name="adjustment">hex_adjustment</property>
<signal name="input" handler="hex_spin_input"/>
<signal name="output" handler="hex_spin_output"/>
<property name="wrap">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="hex_label">
<property name="visible">True</property>
<property name="width_chars">10</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">_Time</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">time_spin</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="time_spin">
<property name="visible">True</property>
<property name="halign">start</property>
<property name="width_chars">5</property>
<property name="adjustment">time_adjustment</property>
<signal name="input" handler="time_spin_input"/>
<signal name="output" handler="time_spin_output"/>
<property name="wrap">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="time_label">
<property name="visible">True</property>
<property name="width_chars">10</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="label">_Month</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">month_spin</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="month_spin">
<property name="visible">True</property>
<property name="halign">start</property>
<property name="width_chars">9</property>
<signal name="input" handler="month_spin_input"/>
<signal name="output" handler="month_spin_output"/>
<property name="adjustment">month_adjustment</property>
<property name="wrap">True</property>
<property name="update_policy">if-valid</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="month_label">
<property name="visible">True</property>
<property name="width_chars">10</property>
<property name="xalign">1</property>
</object>
<packing>
<property name="left_attach">2</property>
<property name="top_attach">3</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@@ -7,7 +7,6 @@
#include <glib/gi18n.h>
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
static GtkWidget *spinner_sensitive = NULL;
static GtkWidget *spinner_unsensitive = NULL;
@@ -28,6 +27,7 @@ on_stop_clicked (GtkButton *button, gpointer user_data)
GtkWidget *
do_spinner (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
GtkWidget *content_area;
GtkWidget *vbox;
GtkWidget *hbox;

View File

@@ -8,8 +8,6 @@
#include <gtk/gtk.h>
static GtkBuilder *builder;
GtkWidget *
do_stack (GtkWidget *do_widget)
{
@@ -17,6 +15,8 @@ do_stack (GtkWidget *do_widget)
if (!window)
{
GtkBuilder *builder;
builder = gtk_builder_new_from_resource ("/stack/stack.ui");
gtk_builder_connect_signals (builder, NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
@@ -24,17 +24,14 @@ do_stack (GtkWidget *do_widget)
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
g_object_unref (builder);
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show_all (window);
}
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;

View File

@@ -45,7 +45,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="xalign">0</property>
<property name="draw_indicator">True</property>
<property name="halign">center</property>
<property name="valign">center</property>

85
demos/gtk-demo/textmask.c Normal file
View File

@@ -0,0 +1,85 @@
/* Pango/Text Mask
*
* This demo shows how to use PangoCairo to draw text with more than
* just a single color.
*/
#include <glib/gi18n.h>
#include <gtk/gtk.h>
static gboolean
draw_text (GtkWidget *da,
cairo_t *cr,
gpointer data)
{
cairo_pattern_t *pattern;
PangoLayout *layout;
PangoFontDescription *desc;
cairo_save (cr);
layout = gtk_widget_create_pango_layout (da, "Pango power!\nPango power!\nPango power!");
desc = pango_font_description_from_string ("sans bold 34");
pango_layout_set_font_description (layout, desc);
pango_font_description_free (desc);
cairo_move_to (cr, 30, 20);
pango_cairo_layout_path (cr, layout);
g_object_unref (layout);
pattern = cairo_pattern_create_linear (0.0, 0.0,
gtk_widget_get_allocated_width (da),
gtk_widget_get_allocated_height (da));
cairo_pattern_add_color_stop_rgb (pattern, 0.0, 1.0, 0.0, 0.0);
cairo_pattern_add_color_stop_rgb (pattern, 0.2, 1.0, 0.0, 0.0);
cairo_pattern_add_color_stop_rgb (pattern, 0.3, 1.0, 1.0, 0.0);
cairo_pattern_add_color_stop_rgb (pattern, 0.4, 0.0, 1.0, 0.0);
cairo_pattern_add_color_stop_rgb (pattern, 0.6, 0.0, 1.0, 1.0);
cairo_pattern_add_color_stop_rgb (pattern, 0.7, 0.0, 0.0, 1.0);
cairo_pattern_add_color_stop_rgb (pattern, 0.8, 1.0, 0.0, 1.0);
cairo_pattern_add_color_stop_rgb (pattern, 1.0, 1.0, 0.0, 1.0);
cairo_set_source (cr, pattern);
cairo_fill_preserve (cr);
cairo_pattern_destroy (pattern);
cairo_set_source_rgb (cr, 0.0, 0.0, 0.0);
cairo_set_line_width (cr, 0.5);
cairo_stroke (cr);
cairo_restore (cr);
return TRUE;
}
GtkWidget *
do_textmask (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
static GtkWidget *da;
if (!window)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_resizable (GTK_WINDOW (window), TRUE);
gtk_widget_set_size_request (window, 400, 200);
gtk_window_set_title (GTK_WINDOW (window), "Text Mask");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
da = gtk_drawing_area_new ();
gtk_container_add (GTK_CONTAINER (window), da);
g_signal_connect (da, "draw",
G_CALLBACK (draw_text), NULL);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
gtk_widget_destroy (window);
return window;
}

View File

@@ -1,4 +1,4 @@
/* Text Widget/Automatic Scrolling
/* Text View/Automatic Scrolling
*
* This example demonstrates how to use the gravity of
* GtkTextMarks to keep a text view scrolled to the bottom

View File

@@ -1,4 +1,4 @@
/* Text Widget/Multiple Views
/* Text View/Multiple Views
*
* The GtkTextView widget displays a GtkTextBuffer. One GtkTextBuffer
* can be displayed by multiple GtkTextViews. This demo has two views

View File

@@ -17,7 +17,6 @@ do_theming_style_classes (GtkWidget *do_widget)
{
GtkWidget *grid;
GtkBuilder *builder;
GError *err = NULL;
if (!window)
{
@@ -29,13 +28,7 @@ do_theming_style_classes (GtkWidget *do_widget)
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
builder = gtk_builder_new ();
gtk_builder_add_from_resource (builder, "/theming_style_classes/theming.ui", NULL);
if (err)
{
g_error ("ERROR: %s\n", err->message);
return NULL;
}
builder = gtk_builder_new_from_resource ("/theming_style_classes/theming.ui");
grid = (GtkWidget *)gtk_builder_get_object (builder, "grid");
gtk_widget_show_all (grid);
@@ -44,14 +37,9 @@ do_theming_style_classes (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show (window);
}
gtk_widget_show (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -1,4 +1,4 @@
/* Transparency
/* Overlay/Transparency
*
* Use transparent background on GdkWindows to create a shadow effect on a GtkOverlay widget.
*/
@@ -196,8 +196,7 @@ do_transparent (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_default_size (GTK_WINDOW (window),
450, 450);
gtk_window_set_default_size (GTK_WINDOW (window), 450, 450);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
@@ -235,14 +234,9 @@ do_transparent (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
{
gtk_widget_show (window);
}
gtk_widget_show (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -10,8 +10,6 @@
#include <gtk/gtk.h>
static GtkWidget *window = NULL;
/* TreeItem structure */
typedef struct _TreeItem TreeItem;
struct _TreeItem
@@ -387,6 +385,8 @@ add_columns (GtkTreeView *treeview)
GtkWidget *
do_tree_store (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *vbox;
@@ -440,10 +440,7 @@ do_tree_store (GtkWidget *do_widget)
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
else
{
gtk_widget_destroy (window);
window = NULL;
}
gtk_widget_destroy (window);
return window;
}

View File

@@ -41,6 +41,37 @@ change_theme_state (GSimpleAction *action,
g_simple_action_set_state (action, state);
}
static gboolean
get_idle (gpointer data)
{
GtkWidget *window = data;
GtkApplication *app = gtk_window_get_application (GTK_WINDOW (window));
gtk_widget_set_sensitive (window, TRUE);
gdk_window_set_cursor (gtk_widget_get_window (window), NULL);
g_application_unmark_busy (G_APPLICATION (app));
return G_SOURCE_REMOVE;
}
static void
get_busy (GSimpleAction *action,
GVariant *parameter,
gpointer user_data)
{
GtkWidget *window = user_data;
GdkCursor *cursor;
GtkApplication *app = gtk_window_get_application (GTK_WINDOW (window));
g_application_mark_busy (G_APPLICATION (app));
cursor = gdk_cursor_new_from_name (gtk_widget_get_display (window), "wait");
gdk_window_set_cursor (gtk_widget_get_window (window), cursor);
g_object_unref (cursor);
g_timeout_add (5000, get_idle, window);
gtk_widget_set_sensitive (window, FALSE);
}
static void
activate_search (GSimpleAction *action,
GVariant *parameter,
@@ -1226,6 +1257,122 @@ open_popover_text_changed (GtkEntry *entry, GParamSpec *pspec, GtkWidget *button
gtk_widget_set_sensitive (button, strlen (text) > 0);
}
static gboolean
show_page_again (gpointer data)
{
gtk_widget_show (GTK_WIDGET (data));
return G_SOURCE_REMOVE;
}
static void
tab_close_cb (GtkWidget *page)
{
gtk_widget_hide (page);
g_timeout_add (2500, show_page_again, page);
}
typedef struct _GTestPermission GTestPermission;
typedef struct _GTestPermissionClass GTestPermissionClass;
struct _GTestPermission
{
GPermission parent;
};
struct _GTestPermissionClass
{
GPermissionClass parent_class;
};
G_DEFINE_TYPE (GTestPermission, g_test_permission, G_TYPE_PERMISSION)
static void
g_test_permission_init (GTestPermission *test)
{
g_permission_impl_update (G_PERMISSION (test), TRUE, TRUE, TRUE);
}
static gboolean
update_allowed (GPermission *permission,
gboolean allowed)
{
g_permission_impl_update (permission, allowed, TRUE, TRUE);
return TRUE;
}
static gboolean
acquire (GPermission *permission,
GCancellable *cancellable,
GError **error)
{
return update_allowed (permission, TRUE);
}
static void
acquire_async (GPermission *permission,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
GTask *task;
task = g_task_new ((GObject*)permission, NULL, callback, user_data);
g_task_return_boolean (task, update_allowed (permission, TRUE));
g_object_unref (task);
}
gboolean
acquire_finish (GPermission *permission,
GAsyncResult *res,
GError **error)
{
return g_task_propagate_boolean (G_TASK (res), error);
}
static gboolean
release (GPermission *permission,
GCancellable *cancellable,
GError **error)
{
return update_allowed (permission, FALSE);
}
static void
release_async (GPermission *permission,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
GTask *task;
task = g_task_new ((GObject*)permission, NULL, callback, user_data);
g_task_return_boolean (task, update_allowed (permission, FALSE));
g_object_unref (task);
}
gboolean
release_finish (GPermission *permission,
GAsyncResult *result,
GError **error)
{
return g_task_propagate_boolean (G_TASK (result), error);
}
static void
g_test_permission_class_init (GTestPermissionClass *class)
{
GPermissionClass *permission_class = G_PERMISSION_CLASS (class);
permission_class->acquire = acquire;
permission_class->acquire_async = acquire_async;
permission_class->acquire_finish = acquire_finish;
permission_class->release = release;
permission_class->release_async = release_async;
permission_class->release_finish = release_finish;
}
static void
activate (GApplication *app)
{
@@ -1242,7 +1389,8 @@ activate (GApplication *app)
static GActionEntry win_entries[] = {
{ "dark", NULL, NULL, "false", change_theme_state },
{ "search", activate_search, NULL, NULL, NULL },
{ "delete", activate_delete, NULL, NULL, NULL }
{ "delete", activate_delete, NULL, NULL, NULL },
{ "busy", get_busy, NULL, NULL, NULL }
};
struct {
const gchar *action_and_target;
@@ -1255,6 +1403,7 @@ activate (GApplication *app)
{ "win.delete", { "Delete", NULL } }
};
gint i;
GPermission *permission;
g_type_ensure (my_text_view_get_type ());
@@ -1274,6 +1423,7 @@ activate (GApplication *app)
gtk_builder_add_callback_symbol (builder, "on_range_from_changed", (GCallback)on_range_from_changed);
gtk_builder_add_callback_symbol (builder, "on_range_to_changed", (GCallback)on_range_to_changed);
gtk_builder_add_callback_symbol (builder, "osd_frame_button_press", (GCallback)osd_frame_button_press);
gtk_builder_add_callback_symbol (builder, "tab_close_cb", (GCallback)tab_close_cb);
gtk_builder_connect_signals (builder, NULL);
@@ -1442,6 +1592,15 @@ activate (GApplication *app)
g_signal_connect (widget2, "notify::text", G_CALLBACK (open_popover_text_changed), widget3);
g_signal_connect_swapped (widget3, "clicked", G_CALLBACK (gtk_widget_hide), widget);
widget = (GtkWidget *)gtk_builder_get_object (builder, "lockbox");
widget2 = (GtkWidget *)gtk_builder_get_object (builder, "lockbutton");
permission = g_object_new (g_test_permission_get_type (), NULL);
g_object_bind_property (permission, "allowed",
widget, "sensitive",
G_BINDING_SYNC_CREATE);
gtk_lock_button_set_permission (GTK_LOCK_BUTTON (widget2), permission);
g_object_unref (permission);
gtk_widget_show_all (GTK_WIDGET (window));
g_object_unref (builder);

View File

@@ -3,6 +3,10 @@
<!-- interface-requires gtk+ 3.0 -->
<menu id="gear_menu">
<section>
<item>
<attribute name="label" translatable="yes">Get Busy</attribute>
<attribute name="action">win.busy</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Dark Theme</attribute>
<attribute name="action">win.dark</attribute>
@@ -2893,105 +2897,128 @@ microphone-sensitivity-medium-symbolic</property>
<property name="halign">start</property>
<property name="spacing">6</property>
<child>
<object class="GtkMenuButton">
<object class="GtkBox" id="lockbox">
<property name="visible">True</property>
<property name="halign">center</property>
<property name="popover">open_popover</property>
<style>
<class name="text-button"/>
<class name="image-button"/>
</style>
<property name="halign">start</property>
<property name="spacing">6</property>
<child>
<object class="GtkBox">
<object class="GtkMenuButton">
<property name="visible">True</property>
<property name="spacing">6</property>
<property name="halign">center</property>
<property name="popover">open_popover</property>
<style>
<class name="text-button"/>
<class name="image-button"/>
</style>
<child>
<object class="GtkLabel">
<object class="GtkBox">
<property name="visible">True</property>
<property name="valign">baseline</property>
<property name="label">Open</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="valign">baseline</property>
<property name="icon_name">pan-down-symbolic</property>
<property name="spacing">6</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="valign">baseline</property>
<property name="label">Open</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="valign">baseline</property>
<property name="icon_name">pan-down-symbolic</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkToggleButton" id="record_button">
<property name="visible">True</property>
<property name="halign">center</property>
<signal name="toggled" handler="on_record_button_toggled"/>
<style>
<class name="text-button"/>
<class name="image-button"/>
<class name="destructive-action"/>
</style>
<child>
<object class="GtkBox">
<object class="GtkToggleButton" id="record_button">
<property name="visible">True</property>
<property name="spacing">6</property>
<property name="halign">center</property>
<signal name="toggled" handler="on_record_button_toggled"/>
<style>
<class name="text-button"/>
<class name="image-button"/>
<class name="destructive-action"/>
</style>
<child>
<object class="GtkImage">
<object class="GtkBox">
<property name="visible">True</property>
<property name="valign">baseline</property>
<property name="icon_name">media-record-symbolic</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="valign">baseline</property>
<property name="label">Record</property>
<property name="spacing">6</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="valign">baseline</property>
<property name="icon_name">media-record-symbolic</property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="valign">baseline</property>
<property name="label">Record</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<style>
<class name="linked"/>
</style>
<child>
<object class="GtkRadioButton" id="grid_button">
<object class="GtkBox">
<property name="visible">True</property>
<style>
<class name="linked"/>
</style>
<child>
<object class="GtkRadioButton" id="grid_button">
<property name="visible">True</property>
<property name="draw-indicator">False</property>
<property name="active">True</property>
<style>
<class name="image-button"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-size">1</property>
<property name="icon-name">view-grid-symbolic</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkRadioButton" id="list_button">
<property name="active">True</property>
<property name="visible">True</property>
<property name="draw-indicator">False</property>
<property name="group">grid_button</property>
<style>
<class name="image-button"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-size">1</property>
<property name="icon-name">view-list-symbolic</property>
</object>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkButton" id="circular_button">
<property name="visible">True</property>
<property name="draw-indicator">False</property>
<property name="active">True</property>
<style>
<class name="image-button"/>
<class name="circular-button"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-size">1</property>
<property name="icon-name">view-grid-symbolic</property>
</object>
</child>
</object>
</child>
<child>
<object class="GtkRadioButton" id="list_button">
<property name="active">True</property>
<property name="visible">True</property>
<property name="draw-indicator">False</property>
<property name="group">grid_button</property>
<style>
<class name="image-button"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-size">1</property>
<property name="icon-name">view-list-symbolic</property>
<property name="icon-name">emblem-system-symbolic</property>
</object>
</child>
</object>
@@ -2999,19 +3026,8 @@ microphone-sensitivity-medium-symbolic</property>
</object>
</child>
<child>
<object class="GtkButton" id="circular_button">
<object class="GtkLockButton" id="lockbutton">
<property name="visible">True</property>
<style>
<class name="image-button"/>
<class name="circular-button"/>
</style>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-size">1</property>
<property name="icon-name">emblem-system-symbolic</property>
</object>
</child>
</object>
</child>
</object>
@@ -3476,7 +3492,7 @@ microphone-sensitivity-medium-symbolic</property>
<property name="visible">True</property>
<property name="show-border">False</property>
<child>
<object class="GtkBox">
<object class="GtkBox" id="closable_page_1">
<property name="visible">True</property>
<property name="height-request">120</property>
</object>
@@ -3498,6 +3514,7 @@ microphone-sensitivity-medium-symbolic</property>
<property name="visible">True</property>
<property name="relief">none</property>
<property name="focus-on-click">False</property>
<signal name="clicked" handler="tab_close_cb" object="closable_page_1"/>
<style>
<class name="small-button"/>
</style>
@@ -3516,7 +3533,7 @@ microphone-sensitivity-medium-symbolic</property>
</object>
</child>
<child>
<object class="GtkBox">
<object class="GtkBox" id="closable_page_2">
<property name="visible">True</property>
<property name="vexpand">True</property>
</object>
@@ -3538,6 +3555,7 @@ microphone-sensitivity-medium-symbolic</property>
<property name="visible">True</property>
<property name="relief">none</property>
<property name="focus-on-click">False</property>
<signal name="clicked" handler="tab_close_cb" object="closable_page_2"/>
<style>
<class name="small-button"/>
</style>
@@ -3596,7 +3614,6 @@ microphone-sensitivity-medium-symbolic</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<property name="halign">center</property>
<child>
<object class="GtkEntry">
@@ -3604,11 +3621,6 @@ microphone-sensitivity-medium-symbolic</property>
<property name="can_focus">True</property>
<property name="placeholder_text" translatable="yes">Name…</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry">
@@ -3617,8 +3629,6 @@ microphone-sensitivity-medium-symbolic</property>
<property name="placeholder_text" translatable="yes">Age…</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
@@ -3922,7 +3932,6 @@ bad things might happen.</property>
<property name="visible">True</property>
<property name="shadow-type">in</property>
<property name="hscrollbar-policy">never</property>
<property name="vscrollbar-policy">automatic</property>
<property name="min-content-height">70</property>
<child>
<object class="GtkTextView" id="open_popover_textview">

View File

@@ -883,6 +883,8 @@ GdkEventWindowState
GdkEventSetting
GdkEventOwnerChange
GdkEventGrabBroken
GdkEventTouchpadSwipe
GdkEventTouchpadPinch
<SUBSECTION>
GdkScrollDirection

View File

@@ -102,6 +102,7 @@ IGNORE_HFILES = \
gtkentryprivate.h \
gtkeventcontrollerprivate.h \
gtkfilechooserprivate.h \
gtkfilechooserwidgetprivate.h \
gtkfontchooserprivate.h \
gtkgesturedragprivate.h \
gtkgesturelongpressprivate.h \
@@ -130,6 +131,8 @@ IGNORE_HFILES = \
gtkorientableprivate.h \
gtkpixelcacheprivate.h \
gtkplacessidebarprivate.h \
gtkplacesviewprivate.h \
gtkplacesviewrowprivate.h \
gtkpopoverprivate.h \
gtkprinter-private.h \
gtkprintoperation-private.h \
@@ -142,6 +145,11 @@ IGNORE_HFILES = \
gtkrenderprivate.h \
gtkroundedboxprivate.h \
gtkscaleprivate.h \
gtksearchengine.h \
gtksearchenginemodel.h \
gtksearchenginequartz.h \
gtksearchenginesimple.h \
gtksearchenginetracker.h \
gtksearchentryprivate.h \
gtkselectionprivate.h \
gtksettingsprivate.h \

View File

@@ -2654,6 +2654,10 @@ gtk_places_sidebar_get_local_only
gtk_places_sidebar_set_local_only
gtk_places_sidebar_get_show_enter_location
gtk_places_sidebar_set_show_enter_location
gtk_places_sidebar_get_show_trash
gtk_places_sidebar_set_show_trash
gtk_places_sidebar_get_show_other_locations
gtk_places_sidebar_set_show_other_locations
gtk_places_sidebar_set_drop_targets_visible
<SUBSECTION Standard>
GTK_PLACES_SIDEBAR
@@ -3913,6 +3917,10 @@ gtk_text_view_set_left_margin
gtk_text_view_get_left_margin
gtk_text_view_set_right_margin
gtk_text_view_get_right_margin
gtk_text_view_set_top_margin
gtk_text_view_get_top_margin
gtk_text_view_set_bottom_margin
gtk_text_view_get_bottom_margin
gtk_text_view_set_indent
gtk_text_view_get_indent
gtk_text_view_set_tabs
@@ -5470,6 +5478,10 @@ gtk_widget_modify_font
gtk_widget_modify_cursor
gtk_widget_create_pango_context
gtk_widget_get_pango_context
gtk_widget_set_font_options
gtk_widget_get_font_options
gtk_widget_set_font_map
gtk_widget_get_font_map
gtk_widget_create_pango_layout
gtk_widget_render_icon
gtk_widget_render_icon_pixbuf
@@ -5718,6 +5730,7 @@ gtk_window_unstick
gtk_window_maximize
gtk_window_unmaximize
gtk_window_fullscreen
gtk_window_fullscreen_on_monitor
gtk_window_unfullscreen
gtk_window_set_keep_above
gtk_window_set_keep_below
@@ -7930,6 +7943,8 @@ GtkStackTransitionType
gtk_stack_set_transition_type
gtk_stack_get_transition_type
gtk_stack_get_transition_running
gtk_stack_get_interpolate_size
gtk_stack_set_interpolate_size
<SUBSECTION Standard>
GTK_TYPE_STACK
GTK_IS_STACK
@@ -8029,6 +8044,9 @@ GtkFlowBoxSortFunc
gtk_flow_box_set_sort_func
gtk_flow_box_invalidate_sort
GtkFlowBoxCreateWidgetFunc
gtk_flow_box_bind_model
<SUBSECTION GtkFlowBoxChild>
GtkFlowBoxChild
gtk_flow_box_child_new

View File

@@ -661,7 +661,7 @@ queue_process_input_at_idle (BroadwayServer *server)
g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc)process_input_idle_cb, server, NULL);
}
static void
static gboolean
broadway_server_read_all_input_nonblocking (BroadwayInput *input)
{
GInputStream *in;
@@ -670,7 +670,7 @@ broadway_server_read_all_input_nonblocking (BroadwayInput *input)
GError *error = NULL;
if (input == NULL)
return;
return FALSE;
in = g_io_stream_get_input_stream (input->connection);
@@ -683,7 +683,7 @@ broadway_server_read_all_input_nonblocking (BroadwayInput *input)
g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK))
{
g_error_free (error);
return;
return TRUE;
}
if (input->server->input == input)
@@ -694,12 +694,13 @@ broadway_server_read_all_input_nonblocking (BroadwayInput *input)
g_printerr ("input error %s\n", error->message);
g_error_free (error);
}
return;
return FALSE;
}
g_byte_array_append (input->buffer, buffer, res);
parse_input (input);
return TRUE;
}
static void
@@ -720,7 +721,8 @@ input_data_cb (GObject *stream,
{
BroadwayServer *server = input->server;
broadway_server_read_all_input_nonblocking (input);
if (!broadway_server_read_all_input_nonblocking (input))
return FALSE;
if (input->active)
process_input_messages (server);
@@ -827,7 +829,7 @@ map_named_shm (char *name, gsize size)
void *ptr;
char *filename = NULL;
fd = shm_open(name, O_RDONLY, 0600);
fd = shm_open (name, O_RDONLY, 0600);
if (fd == -1)
{
filename = g_build_filename (g_get_tmp_dir (), name, NULL);
@@ -835,13 +837,15 @@ map_named_shm (char *name, gsize size)
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);
if (filename)
{

View File

@@ -92,6 +92,7 @@ _gdk_broadway_screen_size_changed (GdkScreen *screen,
{
GdkBroadwayScreen *broadway_screen = GDK_BROADWAY_SCREEN (screen);
gint width, height;
GList *toplevels, *l;
width = gdk_screen_get_width (screen);
height = gdk_screen_get_height (screen);
@@ -99,9 +100,22 @@ _gdk_broadway_screen_size_changed (GdkScreen *screen,
broadway_screen->width = msg->width;
broadway_screen->height = msg->height;
if (width != gdk_screen_get_width (screen) ||
height != gdk_screen_get_height (screen))
g_signal_emit_by_name (screen, "size-changed");
if (width == gdk_screen_get_width (screen) &&
height == gdk_screen_get_height (screen))
return;
g_signal_emit_by_name (screen, "size-changed");
toplevels = gdk_screen_get_toplevel_windows (screen);
for (l = toplevels; l != NULL; l = l->next)
{
GdkWindow *toplevel = l->data;
GdkWindowImplBroadway *toplevel_impl = GDK_WINDOW_IMPL_BROADWAY (toplevel->impl);
if (toplevel_impl->maximized)
gdk_window_move_resize (toplevel, 0, 0,
gdk_screen_get_width (screen),
gdk_screen_get_height (screen));
}
}
static void

View File

@@ -886,19 +886,57 @@ gdk_broadway_window_unstick (GdkWindow *window)
static void
gdk_broadway_window_maximize (GdkWindow *window)
{
GdkWindowImplBroadway *impl;
GdkScreen *screen;
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
return;
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
if (impl->maximized)
return;
impl->maximized = TRUE;
gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_MAXIMIZED);
impl->pre_maximize_x = window->x;
impl->pre_maximize_y = window->y;
impl->pre_maximize_width = window->width;
impl->pre_maximize_height = window->height;
screen = gdk_window_get_screen (window);
gdk_window_move_resize (window, 0, 0,
gdk_screen_get_width (screen),
gdk_screen_get_height (screen));
}
static void
gdk_broadway_window_unmaximize (GdkWindow *window)
{
GdkWindowImplBroadway *impl;
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
return;
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
if (!impl->maximized)
return;
impl->maximized = FALSE;
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_MAXIMIZED, 0);
gdk_window_move_resize (window,
impl->pre_maximize_x,
impl->pre_maximize_y,
impl->pre_maximize_width,
impl->pre_maximize_height);
}
static void
@@ -1397,6 +1435,9 @@ gdk_broadway_window_begin_resize_drag (GdkWindow *window,
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
return;
if (impl->maximized)
return;
mv_resize = get_move_resize_data (gdk_window_get_display (window), TRUE);
mv_resize->is_resize = TRUE;
@@ -1434,6 +1475,9 @@ gdk_broadway_window_begin_move_drag (GdkWindow *window,
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
return;
if (impl->maximized)
return;
mv_resize = get_move_resize_data (gdk_window_get_display (window), TRUE);
mv_resize->is_resize = FALSE;

View File

@@ -59,8 +59,14 @@ struct _GdkWindowImplBroadway
int id;
gboolean visible;
gboolean maximized;
int transient_for;
int pre_maximize_x;
int pre_maximize_y;
int pre_maximize_width;
int pre_maximize_height;
gint8 toplevel_window_type;
gboolean dirty;
gboolean last_synced;

View File

@@ -2192,9 +2192,7 @@ gdk_error_trap_push (void)
g_slist_foreach (trap->displays, (GFunc) g_object_ref, NULL);
for (l = trap->displays; l != NULL; l = l->next)
{
class->push_error_trap (l->data);
}
class->push_error_trap (l->data);
g_queue_push_head (&gdk_error_traps, trap);
}

View File

@@ -570,6 +570,24 @@ gdk_event_new (GdkEventType type)
new_event->crossing.x_root = 0.;
new_event->crossing.y_root = 0.;
break;
case GDK_TOUCHPAD_SWIPE:
new_event->touchpad_swipe.x = 0;
new_event->touchpad_swipe.y = 0;
new_event->touchpad_swipe.dx = 0;
new_event->touchpad_swipe.dy = 0;
new_event->touchpad_swipe.x_root = 0;
new_event->touchpad_swipe.y_root = 0;
break;
case GDK_TOUCHPAD_PINCH:
new_event->touchpad_pinch.x = 0;
new_event->touchpad_pinch.y = 0;
new_event->touchpad_pinch.dx = 0;
new_event->touchpad_pinch.dy = 0;
new_event->touchpad_pinch.angle_delta = 0;
new_event->touchpad_pinch.scale = 0;
new_event->touchpad_pinch.x_root = 0;
new_event->touchpad_pinch.y_root = 0;
break;
default:
break;
}
@@ -640,8 +658,8 @@ gdk_event_copy (const GdkEvent *event)
GdkEventPrivate *private = (GdkEventPrivate *)event;
new_private->screen = private->screen;
new_private->device = private->device;
new_private->source_device = private->source_device;
new_private->device = private->device ? g_object_ref (private->device) : NULL;
new_private->source_device = private->source_device ? g_object_ref (private->source_device) : NULL;
}
switch (event->any.type)
@@ -736,10 +754,18 @@ gdk_event_copy (const GdkEvent *event)
void
gdk_event_free (GdkEvent *event)
{
GdkEventPrivate *private;
GdkDisplay *display;
g_return_if_fail (event != NULL);
if (gdk_event_is_allocated (event))
{
private = (GdkEventPrivate *) event;
g_clear_object (&private->device);
g_clear_object (&private->source_device);
}
switch (event->any.type)
{
case GDK_KEY_PRESS:
@@ -863,6 +889,10 @@ gdk_event_get_time (const GdkEvent *event)
case GDK_TOUCH_END:
case GDK_TOUCH_CANCEL:
return event->touch.time;
case GDK_TOUCHPAD_SWIPE:
return event->touchpad_swipe.time;
case GDK_TOUCHPAD_PINCH:
return event->touchpad_pinch.time;
case GDK_SCROLL:
return event->scroll.time;
case GDK_KEY_PRESS:
@@ -946,6 +976,12 @@ gdk_event_get_state (const GdkEvent *event,
case GDK_TOUCH_CANCEL:
*state = event->touch.state;
return TRUE;
case GDK_TOUCHPAD_SWIPE:
*state = event->touchpad_swipe.state;
return TRUE;
case GDK_TOUCHPAD_PINCH:
*state = event->touchpad_pinch.state;
return TRUE;
case GDK_SCROLL:
*state = event->scroll.state;
return TRUE;
@@ -996,8 +1032,8 @@ gdk_event_get_state (const GdkEvent *event,
/**
* gdk_event_get_coords:
* @event: a #GdkEvent
* @x_win: (out): location to put event window x coordinate
* @y_win: (out): location to put event window y coordinate
* @x_win: (out) (optional): location to put event window x coordinate
* @y_win: (out) (optional): location to put event window y coordinate
*
* Extract the event window relative x/y coordinates from an event.
*
@@ -1046,6 +1082,14 @@ gdk_event_get_coords (const GdkEvent *event,
x = event->motion.x;
y = event->motion.y;
break;
case GDK_TOUCHPAD_SWIPE:
x = event->touchpad_swipe.x;
y = event->touchpad_swipe.y;
break;
case GDK_TOUCHPAD_PINCH:
x = event->touchpad_pinch.x;
y = event->touchpad_pinch.y;
break;
default:
fetched = FALSE;
break;
@@ -1062,8 +1106,8 @@ gdk_event_get_coords (const GdkEvent *event,
/**
* gdk_event_get_root_coords:
* @event: a #GdkEvent
* @x_root: (out): location to put root window x coordinate
* @y_root: (out): location to put root window y coordinate
* @x_root: (out) (optional): location to put root window x coordinate
* @y_root: (out) (optional): location to put root window y coordinate
*
* Extract the root window relative x/y coordinates from an event.
*
@@ -1117,6 +1161,14 @@ gdk_event_get_root_coords (const GdkEvent *event,
x = event->dnd.x_root;
y = event->dnd.y_root;
break;
case GDK_TOUCHPAD_SWIPE:
x = event->touchpad_swipe.x_root;
y = event->touchpad_swipe.y_root;
break;
case GDK_TOUCHPAD_PINCH:
x = event->touchpad_pinch.x_root;
y = event->touchpad_pinch.y_root;
break;
default:
fetched = FALSE;
break;
@@ -1475,7 +1527,7 @@ gdk_event_set_device (GdkEvent *event,
private = (GdkEventPrivate *) event;
private->device = device;
g_set_object (&private->device, device);
switch (event->type)
{
@@ -1628,7 +1680,7 @@ gdk_event_set_source_device (GdkEvent *event,
private = (GdkEventPrivate *) event;
private->source_device = device;
g_set_object (&private->source_device, device);
}
/**

View File

@@ -139,6 +139,8 @@ typedef struct _GdkEventDND GdkEventDND;
typedef struct _GdkEventWindowState GdkEventWindowState;
typedef struct _GdkEventSetting GdkEventSetting;
typedef struct _GdkEventGrabBroken GdkEventGrabBroken;
typedef struct _GdkEventTouchpadSwipe GdkEventTouchpadSwipe;
typedef struct _GdkEventTouchpadPinch GdkEventTouchpadPinch;
typedef struct _GdkEventSequence GdkEventSequence;
@@ -271,6 +273,10 @@ typedef GdkFilterReturn (*GdkFilterFunc) (GdkXEvent *xevent,
* was added in 3.4.
* @GDK_TOUCH_CANCEL: A touch event sequence has been canceled. This event type
* was added in 3.4.
* @GDK_TOUCHPAD_SWIPE: A touchpad swipe gesture event, the current state
* is determined by its phase field. This event type was added in 3.18.
* @GDK_TOUCHPAD_PINCH: A touchpad pinch gesture event, the current state
* is determined by its phase field. This event type was added in 3.18.
* @GDK_EVENT_LAST: marks the end of the GdkEventType enumeration. Added in 2.18
*
* Specifies the type of the event.
@@ -331,6 +337,8 @@ typedef enum
GDK_TOUCH_UPDATE = 38,
GDK_TOUCH_END = 39,
GDK_TOUCH_CANCEL = 40,
GDK_TOUCHPAD_SWIPE = 41,
GDK_TOUCHPAD_PINCH = 42,
GDK_EVENT_LAST /* helper variable for decls */
} GdkEventType;
@@ -349,6 +357,43 @@ typedef enum
GDK_VISIBILITY_FULLY_OBSCURED
} GdkVisibilityState;
/**
* GdkTouchpadGesturePhase:
* @GDK_TOUCHPAD_GESTURE_PHASE_BEGIN: The gesture has begun.
* @GDK_TOUCHPAD_GESTURE_PHASE_UPDATE: The gesture has been updated.
* @GDK_TOUCHPAD_GESTURE_PHASE_END: The gesture was finished, changes
* should be permanently applied.
* @GDK_TOUCHPAD_GESTURE_PHASE_CANCEL: The gesture was cancelled, all
* changes should be undone.
*
* Specifies the current state of a touchpad gesture. All gestures are
* guaranteed to begin with an event with phase %GDK_TOUCHPAD_GESTURE_PHASE_BEGIN,
* followed by 0 or several events with phase %GDK_TOUCHPAD_GESTURE_PHASE_UPDATE.
*
* A finished gesture may have 2 possible outcomes, an event with phase
* %GDK_TOUCHPAD_GESTURE_PHASE_END will be emitted when the gesture is
* considered successful, this should be used as the hint to perform any
* permanent changes.
* Cancelled gestures may be so for a variety of reasons, due to hardware
* or the compositor, or due to the gesture recognition layers hinting the
* gesture did not finish resolutely (eg. a 3rd finger being added during
* a pinch gesture). In these cases, the last event will report the phase
* %GDK_TOUCHPAD_GESTURE_PHASE_CANCEL, this should be used as a hint
* to undo any visible/permanent changes that were done throughout the
* progress of the gesture.
*
* See also #GdkEventTouchpadSwipe and #GdkEventTouchpadPinch.
*
*/
typedef enum
{
GDK_TOUCHPAD_GESTURE_PHASE_BEGIN,
GDK_TOUCHPAD_GESTURE_PHASE_UPDATE,
GDK_TOUCHPAD_GESTURE_PHASE_END,
GDK_TOUCHPAD_GESTURE_PHASE_CANCEL
} GdkTouchpadGesturePhase;
/**
* GdkScrollDirection:
* @GDK_SCROLL_UP: the window is scrolled up.
@@ -1113,6 +1158,86 @@ struct _GdkEventDND {
gshort x_root, y_root;
};
/**
* GdkEventTouchpadSwipe:
* @type: the type of the event (%GDK_TOUCHPAD_SWIPE)
* @window: the window which received the event
* @send_event: %TRUE if the event was sent explicitly
* @phase: (type GdkTouchpadGesturePhase): the current phase of the gesture
* @n_fingers: The number of fingers triggering the swipe
* @time: the time of the event in milliseconds
* @x: The X coordinate of the pointer
* @y: The Y coordinate of the pointer
* @dx: Movement delta in the X axis of the swipe focal point
* @dy: Movement delta in the Y axis of the swipe focal point
* @x_root: The X coordinate of the pointer, relative to the
* root of the screen.
* @y_root: The Y coordinate of the pointer, relative to the
* root of the screen.
* @state: (type GdkModifierType): a bit-mask representing the state of
* the modifier keys (e.g. Control, Shift and Alt) and the pointer
* buttons. See #GdkModifierType.
*
* Generated during touchpad swipe gestures.
*/
struct _GdkEventTouchpadSwipe {
GdkEventType type;
GdkWindow *window;
gint8 send_event;
gint8 phase;
gint8 n_fingers;
guint32 time;
gdouble x;
gdouble y;
gdouble dx;
gdouble dy;
gdouble x_root, y_root;
guint state;
};
/**
* GdkEventTouchpadPinch:
* @type: the type of the event (%GDK_TOUCHPAD_PINCH)
* @window: the window which received the event
* @send_event: %TRUE if the event was sent explicitly
* @phase: (type GdkTouchpadGesturePhase): the current phase of the gesture
* @n_fingers: The number of fingers triggering the pinch
* @time: the time of the event in milliseconds
* @x: The X coordinate of the pointer
* @y: The Y coordinate of the pointer
* @dx: Movement delta in the X axis of the swipe focal point
* @dy: Movement delta in the Y axis of the swipe focal point
* @angle_delta: The angle change in radians, negative angles
* denote counter-clockwise movements
* @scale: The current scale, relative to that at the time of
* the corresponding %GDK_TOUCHPAD_GESTURE_PHASE_BEGIN event
* @x_root: The X coordinate of the pointer, relative to the
* root of the screen.
* @y_root: The Y coordinate of the pointer, relative to the
* root of the screen.
* @state: (type GdkModifierType): a bit-mask representing the state of
* the modifier keys (e.g. Control, Shift and Alt) and the pointer
* buttons. See #GdkModifierType.
*
* Generated during touchpad swipe gestures.
*/
struct _GdkEventTouchpadPinch {
GdkEventType type;
GdkWindow *window;
gint8 send_event;
gint8 phase;
gint8 n_fingers;
guint32 time;
gdouble x;
gdouble y;
gdouble dx;
gdouble dy;
gdouble angle_delta;
gdouble scale;
gdouble x_root, y_root;
guint state;
};
/**
* GdkEvent:
* @type: the #GdkEventType
@@ -1189,6 +1314,8 @@ union _GdkEvent
GdkEventWindowState window_state;
GdkEventSetting setting;
GdkEventGrabBroken grab_broken;
GdkEventTouchpadSwipe touchpad_swipe;
GdkEventTouchpadPinch touchpad_pinch;
};
GDK_AVAILABLE_IN_ALL

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 |

View File

@@ -653,6 +653,10 @@ gdk_keymap_real_get_modifier_mask (GdkKeymap *keymap,
case GDK_MODIFIER_INTENT_SHIFT_GROUP:
return 0;
case GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK:
return (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK |
GDK_SUPER_MASK | GDK_HYPER_MASK | GDK_META_MASK);
default:
g_return_val_if_reached (0);
}

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.
*

View File

@@ -291,6 +291,11 @@ typedef enum
* input methods, and for use cases like typeahead search.
* @GDK_MODIFIER_INTENT_SHIFT_GROUP: the modifier that switches between keyboard
* groups (AltGr on X11/Windows and Option/Alt on OS X).
* @GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK: The set of modifier masks accepted
* as modifiers in accelerators. Needed because Command is mapped to MOD2 on
* OSX, which is widely used, but on X11 MOD2 is NumLock and using that for a
* mod key is problematic at best.
* Ref: https://bugzilla.gnome.org/show_bug.cgi?id=736125.
*
* This enum is used with gdk_keymap_get_modifier_mask()
* in order to determine what modifiers the
@@ -309,7 +314,8 @@ typedef enum
GDK_MODIFIER_INTENT_EXTEND_SELECTION,
GDK_MODIFIER_INTENT_MODIFY_SELECTION,
GDK_MODIFIER_INTENT_NO_TEXT_INPUT,
GDK_MODIFIER_INTENT_SHIFT_GROUP
GDK_MODIFIER_INTENT_SHIFT_GROUP,
GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK,
} GdkModifierIntent;
typedef enum
@@ -440,6 +446,7 @@ typedef enum
GDK_SCROLL_MASK = 1 << 21,
GDK_TOUCH_MASK = 1 << 22,
GDK_SMOOTH_SCROLL_MASK = 1 << 23,
GDK_TOUCHPAD_GESTURE_MASK = 1 << 24,
GDK_ALL_EVENTS_MASK = 0xFFFFFE
} GdkEventMask;

View File

@@ -2042,8 +2042,7 @@ _gdk_window_destroy_hierarchy (GdkWindow *window,
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
if (gdk_window_has_impl (window))
impl_class->destroy (window, recursing_native,
foreign_destroy);
impl_class->destroy (window, recursing_native, foreign_destroy);
else
{
/* hide to make sure we repaint and break grabs */
@@ -7565,7 +7564,9 @@ static const guint type_masks[] = {
GDK_TOUCH_MASK, /* GDK_TOUCH_BEGIN = 37 */
GDK_TOUCH_MASK, /* GDK_TOUCH_UPDATE = 38 */
GDK_TOUCH_MASK, /* GDK_TOUCH_END = 39 */
GDK_TOUCH_MASK /* GDK_TOUCH_CANCEL = 40 */
GDK_TOUCH_MASK, /* GDK_TOUCH_CANCEL = 40 */
GDK_TOUCHPAD_GESTURE_MASK, /* GDK_TOUCHPAD_SWIPE = 41 */
GDK_TOUCHPAD_GESTURE_MASK, /* GDK_TOUCHPAD_PINCH = 42 */
};
G_STATIC_ASSERT (G_N_ELEMENTS (type_masks) == GDK_EVENT_LAST);
@@ -7602,6 +7603,13 @@ is_button_type (GdkEventType type)
type == GDK_SCROLL;
}
static gboolean
is_gesture_type (GdkEventType type)
{
return (type == GDK_TOUCHPAD_SWIPE ||
type == GDK_TOUCHPAD_PINCH);
}
static gboolean
is_motion_type (GdkEventType type)
{
@@ -7743,6 +7751,16 @@ _gdk_make_event (GdkWindow *window,
event->dnd.time = the_time;
break;
case GDK_TOUCHPAD_SWIPE:
event->touchpad_swipe.time = the_time;
event->touchpad_swipe.state = the_state;
break;
case GDK_TOUCHPAD_PINCH:
event->touchpad_pinch.time = the_time;
event->touchpad_pinch.state = the_state;
break;
case GDK_FOCUS_CHANGE:
case GDK_CONFIGURE:
case GDK_MAP:
@@ -9269,6 +9287,85 @@ proxy_button_event (GdkEvent *source_event,
return TRUE; /* Always unlink original, we want to obey the emulated event mask */
}
static gboolean
proxy_gesture_event (GdkEvent *source_event,
gulong serial)
{
GdkWindow *toplevel_window, *pointer_window, *event_win;
GdkDevice *device, *source_device;
gdouble toplevel_x, toplevel_y;
GdkDisplay *display;
GdkEventMask evmask;
GdkEventType evtype;
GdkEvent *event;
guint state;
evtype = source_event->any.type;
gdk_event_get_coords (source_event, &toplevel_x, &toplevel_y);
gdk_event_get_state (source_event, &state);
device = gdk_event_get_device (source_event);
source_device = gdk_event_get_source_device (source_event);
display = gdk_window_get_display (source_event->any.window);
toplevel_window = convert_native_coords_to_toplevel (source_event->any.window,
toplevel_x, toplevel_y,
&toplevel_x, &toplevel_y);
pointer_window = get_pointer_window (display, toplevel_window, device,
toplevel_x, toplevel_y,
serial);
event_win = get_event_window (display, device, NULL,
pointer_window, evtype, state,
&evmask, FALSE, serial);
if (!event_win)
return TRUE;
if ((evmask & GDK_TOUCHPAD_GESTURE_MASK) == 0)
return TRUE;
event = _gdk_make_event (event_win, evtype, source_event, FALSE);
gdk_event_set_device (event, device);
gdk_event_set_source_device (event, source_device);
switch (evtype)
{
case GDK_TOUCHPAD_SWIPE:
convert_toplevel_coords_to_window (event_win,
toplevel_x, toplevel_y,
&event->touchpad_swipe.x,
&event->touchpad_swipe.y);
gdk_event_get_root_coords (source_event,
&event->touchpad_swipe.x_root,
&event->touchpad_swipe.y_root);
event->touchpad_swipe.dx = source_event->touchpad_swipe.dx;
event->touchpad_swipe.dy = source_event->touchpad_swipe.dy;
event->touchpad_swipe.n_fingers = source_event->touchpad_swipe.n_fingers;
event->touchpad_swipe.phase = source_event->touchpad_swipe.phase;
break;
case GDK_TOUCHPAD_PINCH:
convert_toplevel_coords_to_window (event_win,
toplevel_x, toplevel_y,
&event->touchpad_pinch.x,
&event->touchpad_pinch.y);
gdk_event_get_root_coords (source_event,
&event->touchpad_pinch.x_root,
&event->touchpad_pinch.y_root);
event->touchpad_pinch.dx = source_event->touchpad_pinch.dx;
event->touchpad_pinch.dy = source_event->touchpad_pinch.dy;
event->touchpad_pinch.scale = source_event->touchpad_pinch.scale;
event->touchpad_pinch.angle_delta = source_event->touchpad_pinch.angle_delta;
event->touchpad_pinch.n_fingers = source_event->touchpad_pinch.n_fingers;
event->touchpad_pinch.phase = source_event->touchpad_pinch.phase;
break;
default:
break;
}
return TRUE;
}
#ifdef DEBUG_WINDOW_PRINTING
#ifdef GDK_WINDOWING_X11
@@ -9417,7 +9514,8 @@ _gdk_windowing_got_event (GdkDisplay *display,
}
if (!(is_button_type (event->type) ||
is_motion_type (event->type)) ||
is_motion_type (event->type) ||
is_gesture_type (event->type)) ||
event_window->window_type == GDK_WINDOW_ROOT)
goto out;
@@ -9516,6 +9614,8 @@ _gdk_windowing_got_event (GdkDisplay *display,
unlink_event = proxy_pointer_event (display, event, serial);
else if (is_button_type (event->type))
unlink_event = proxy_button_event (event, serial);
else if (is_gesture_type (event->type))
unlink_event = proxy_gesture_event (event, serial);
if ((event->type == GDK_BUTTON_RELEASE ||
event->type == GDK_TOUCH_END) &&
@@ -9872,6 +9972,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);
}
@@ -10295,6 +10397,32 @@ gdk_window_fullscreen (GdkWindow *window)
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->fullscreen (window);
}
/**
* gdk_window_fullscreen_on_monitor:
* @window: a toplevel #GdkWindow
* @monitor: Which monitor to display fullscreen on.
*
* Moves the window into fullscreen mode on the given monitor. This means
* the window covers the entire screen and is above any panels or task bars.
*
* If the window was already fullscreen, then this function does nothing.
* Since: UNRELEASED
**/
void
gdk_window_fullscreen_on_monitor (GdkWindow *window,
gint monitor)
{
GdkScreen *screen = gdk_window_get_screen (window);
g_return_if_fail (monitor >= 0);
g_return_if_fail (monitor < gdk_screen_get_n_monitors (screen));
if (GDK_WINDOW_IMPL_GET_CLASS (window->impl)->fullscreen_on_monitor != NULL)
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->fullscreen_on_monitor (window, monitor);
else
GDK_WINDOW_IMPL_GET_CLASS (window->impl)->fullscreen (window);
}
/**
* gdk_window_set_fullscreen_mode:
* @window: a toplevel #GdkWindow

View File

@@ -952,6 +952,9 @@ GDK_AVAILABLE_IN_ALL
void gdk_window_unmaximize (GdkWindow *window);
GDK_AVAILABLE_IN_ALL
void gdk_window_fullscreen (GdkWindow *window);
GDK_AVAILABLE_IN_3_18
void gdk_window_fullscreen_on_monitor (GdkWindow *window,
gint monitor);
GDK_AVAILABLE_IN_3_8
void gdk_window_set_fullscreen_mode (GdkWindow *window,
GdkFullscreenMode mode);

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