Compare commits

...

809 Commits

Author SHA1 Message Date
Matthias Clasen
a53cfaaf7b Make the pickers test work
Use the unix volume monitor, since gvfs is injecting all my extra
partitions into the dump of the file chooser.
2011-12-19 10:10:34 -05:00
Matthias Clasen
db6282d20f Updates 2011-12-19 09:15:17 -05:00
Carlos Garnacho
c6cc1a848f gdk,xi2: Make more resilient about not yet known devices
Dealing with disabled devices may turn into hierarchy/device
changed events on device IDs with no backing GdkDevice yet,
so protect against that. The device attachment will be handled
correctly when the device is enabled later.
2011-12-19 09:01:10 -05:00
Pavol Šimo
98c44a0ea8 Updated Slovak translation 2011-12-14 14:23:25 +01:00
Jan Rękorajski
5c8d9de2fc print dialog: Fix authentication logic
Reset state of CUPS requests correctly during authentization and
check CUPS requests for errors.
Don't initialize variables holding password and username with empty
string (#664640).
2011-12-14 14:11:55 +01:00
Federico Mena Quintero
2e931bd1fe bgo#662814 - Don't print a g_warning() when GtkRecentManager can't find a file
Also, *do* add the file to the recently-used list, even if the file does not
exist yet.  This is used from the Save dialog, so even shitty apps which don't
add the file to GtkRecentManager, will get the file added from the Save dialog.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-12-13 11:05:54 -06:00
Matthias Clasen
e3005ea454 Fix move-resize emulation with XI2
https://bugzilla.gnome.org/show_bug.cgi?id=650943
2011-12-12 09:33:25 -05:00
Matthias Clasen
0847389581 Revert 3fd7dbc940
Calling gdk_keymap_add_virtual_modifiers causes _all_ virtual
modifiers to be added, which causes problem when they are co-located
on the same real modifier (as Super and Hyper often are). Effectively,
this made it impossible to enter key combinations involving Super,
since they all turn into Super+Hyper.
2011-12-12 09:33:09 -05:00
Matthias Clasen
efe53e5afc Test some virtual modifiers
This adds some accelerators involving Super and Hyper to testmerge.
This helps in testing our accel matching for those.
2011-12-12 09:32:53 -05:00
Stef Walter
b38f5ffa52 GtkCssProvider: don't segfault when CSS file is not found
* Fix null dereference in gtk_css_provider_take_error()
 * And another in gtk_css_provider_emit_error()

https://bugzilla.gnome.org/show_bug.cgi?id=664537
2011-12-12 09:29:46 -05:00
Matthias Clasen
6c988c2850 XI2: Push error traps around XIQueryDevice calls
This may help against the crashes at resume time that some
people have been hitting when input devices mysteriously
disappear.
2011-12-12 09:29:37 -05:00
Paolo Borelli
18a366a206 Avoid shadowing a variable
Move bg_color variable to an inner scope.
2011-12-12 09:29:11 -05:00
Christian Persch
901449adf7 prop-editor: Implement property editing for GdkRGBA properties
Bug #664467.
2011-12-12 09:28:14 -05:00
Christian Persch
47a321f5f2 color-button: Notify "color" and "alpha" properties when changing the rgba
Bug #664469.
2011-12-12 09:27:28 -05:00
Matthias Clasen
cf028a1f7b GtkIconView: Fix a segfault
Keynav on an empty iconview was causing segfaults. This
was reported in https://bugzilla.gnome.org/show_bug.cgi?id=664456
2011-12-12 09:27:09 -05:00
Federico Mena Quintero
bdd163d4ea [GtkFileChooserDefault] Don't destroy and re-create the filename entry
This is a leftover from the big rework to remove the expanded/collapsed mode
in Save mode.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-11-29 15:08:25 -06:00
Federico Mena Quintero
67437c8d6c [GtkPathBar] Remove unused error argument
It used to be that _gtk_path_bar_set_file() would return an error if
it wasn't able to switch to the specified file, but that hasn't been
the case for a long while now, since the file chooser became async.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-11-29 15:07:01 -06:00
Federico Mena Quintero
f5a6279471 [path-bar] Add some comments to explain the async recursion on an I/O callback
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-11-29 14:16:29 -06:00
Federico Mena Quintero
0fb5e6fff3 [path-bar] Only reset the children's styles if the children actually changed
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-11-29 14:16:24 -06:00
Federico Mena Quintero
674404f171 Remove unused argument
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-11-29 14:16:19 -06:00
Benjamin Otte
aca43f43be filechooserdefault: Don't unref value twice
Double unref was introduced in eb02dacb37

https://bugzilla.gnome.org/show_bug.cgi?id=646461
https://bugzilla.gnome.org/show_bug.cgi?id=664137
2011-11-29 20:52:07 +01:00
Benjamin Otte
512ac214c6 a11y: Fix crash in treeview
This is a band-aid fix. The master branch has a complete rework of the
treeview a11y code. Let's hope this will cause most crashes to magically
disappear. This code has been indexing by random memory on the stack for
a long while and things didn't crash, so let's hope for the best.

https://bugzilla.gnome.org/show_bug.cgi?id=663322
https://bugzilla.gnome.org/show_bug.cgi?id=664137
2011-11-26 20:46:26 +01:00
Rui Matos
32c08de08c Bug 653676 - Expand/Collapse doesn't respond after one click
Ignore leave-notify-event when mode is GDK_CROSSING_GTK_[UN]GRAB.
Just [un]grabbing shouldn't cause us to [un]prelight the current arrow
and node.
2011-11-20 21:04:29 +01:00
Kristian Rietveld
d2d45b652f Don't call scroll to cell if the tree view is empty
Account for the case when gtk_drag_finish() didn't actually add a row
(can happen when dragging from an empty tree view to itself ...).
2011-11-20 20:07:38 +01:00
Kristian Rietveld
895eb18412 Bug 660554 - gtk_tree_view_drag_begin: assertion `path != NULL' failed
Turned assertion into silent return.

This assertion is only hit when dragging from an empty tree view.  In
this case, gtk_tree_view_begin_drag() is triggered from gtkdnd.c and not
from gtk_tree_view_maybe_begin_dragging_row().  We actually want to
cancel the drag at this point, but that is not possible with the GTK+
API as far as I can see.

The alternative is to not allowing the drag to start.  This could be
done by simply unsetting the tree view as drag source when it is empty
and setting it as drag source again when rows are added.  I didn't
choose to go with this for now, since this will likely break third party
code.
2011-11-20 20:07:38 +01:00
Kristian Rietveld
39f0287c58 quartz: fix coding style in quartz-version of gtk_drag_begin_internal 2011-11-20 20:07:38 +01:00
Kristian Rietveld
0e941cca92 quartz: do not call gdk_drag_begin() twice
This makes drag and drop work again on Quartz.
2011-11-20 20:07:38 +01:00
John Ralls
22db419f52 [Bug 664238] GTK apps crash when dragging something
Corrects a bad condition in a test in 9d900681
2011-11-20 10:40:08 -08:00
Jorge González
e82aed1e95 Updated Spanish translation 2011-11-20 10:40:55 +01:00
Michel Dänzer
b448ae7963 Fix gdk_cairo_region_create_from_surface on big endian
gdk_cairo_region_create_from_surface doesn't work correctly on PPC.
This is most prominently seen with the GTK window resize grip, the
shape of which is mirrored every eight pixels horizontally.

At the same time, use an A1 surface for the resize grip shape to
eliminates an A8->A1 surface conversion.
2011-11-19 12:25:39 -05:00
Michael Natterer
182cf3daa6 Bug 663856 - Make option-foo accelerators use the right symbol
If the keyboard group shifting modifier is *also* a normal
accelerator modifier, we need to special case it when calling
gdk_keymap_translate_keyboard_state(), so we get the right
key symbol for accelerators (for example we want Option-O,
not Option-Ø displayed in menu items). This patch should only
affect quartz where the Alt key both shifts the group and can
be used as accel modifier, and not X11 or Win32 where AltGr
is not used for accelerators.

- fix quartz' gdk_keymap_translate_keyboard_state() to return
  the right consumed_modifiers
- add _gtk_translate_keyboard_accel_state() which does the
  special casing
- use it everywhere instead of gdk_keymap_translate_keyboard_state()
2011-11-18 12:47:14 +01:00
Michael Natterer
87ebfb19fd notebook: don't leak the action widgets
The notebook owns them, so it must destroy them in destroy().
(cherry picked from commit 4c35d987df)
2011-11-17 01:03:53 +01:00
Xan Lopez
1842b87465 treeview: fix the build 2011-11-16 19:02:35 -05:00
Cosimo Cecchi
722517dacb treeview: use gtk_tree_view_ensure_background() consistently
In gtk_tree_view_state_flags_changed() we were setting the background on
the bin_window without the necessary "view" style class, making the
treeview render with the wrong color in some circumstances (such as when
adding an empty treeview in a window, as spotted by Brian Smith).
2011-11-16 16:11:23 -05:00
Cosimo Cecchi
aac0806ca6 treeview: factor out gtk_tree_view_ensure_background()
We'll use it shortly.
2011-11-16 16:11:21 -05:00
Cosimo Cecchi
1f23b40b3d toolbutton: don't force the icon widget to be a GtkMisc
There's really no reason the icon widget must be a GtkMisc. You might
want to use e.g. a GtkSpinner.
2011-11-16 10:05:10 -05:00
Martin Pitt
cba492ae24 Fix gtk_tree_view_get_tooltip_context() transfer annotation
The default (out) transfer mode is "full", but the passed "model" pointer gets
set to gtk_tree_view_get_model() which is "transfer none". This caused Python
programs to free the model after calling this, causing crashes.
2011-11-14 14:35:14 +01:00
Matthias Clasen
c8f483c228 Bump version 2011-11-11 23:55:05 -05:00
Matthias Clasen
cfbbb5d076 Updates 2011-11-11 23:18:14 -05:00
Matthias Clasen
6f3cdac015 Update iconview test results
The 'showing' state of items is now correct, due to the
'layout not in idle' change in GtkIconView.
2011-11-11 23:08:19 -05:00
Matthias Clasen
b763e2cdaa GtkProgressbar: respect the range of 'fraction'
The setter should not set the property to values outside the allowed
range.

https://bugzilla.gnome.org/show_bug.cgi?id=663825
2011-11-11 23:08:19 -05:00
Benjamin Otte
456b19a35a a11y: Fix gcc warning 2011-11-11 23:08:19 -05:00
Benjamin Otte
6ad897819c a11y: It's not a bug if there's no row at some point
In that case, there's just nothing there.
2011-11-11 23:08:19 -05:00
Guillaume Desmottes
b256211737 gtktreeviewaccessible: use a value_destroy_func with the cell_info_by_index hash
This ensures that we don't leak any GtkTreeViewAccessibleCellInfo when
re-inserting a new one with the same key.

https://bugzilla.gnome.org/show_bug.cgi?id=663694
2011-11-11 23:08:19 -05:00
Guillaume Desmottes
4651571ec3 gtktreeviewaccessible: factor out cell_info_free()
https://bugzilla.gnome.org/show_bug.cgi?id=663694
2011-11-11 23:08:19 -05:00
Morten Welinder
a6179ec639 Print preview: make cancel work
This makes cancels of a print preview work in the same way it
works for non-previews, i.e., the operation stops at the next
page boundary.

https://bugzilla.gnome.org/show_bug.cgi?id=662160
2011-11-11 23:08:18 -05:00
Torsten Schönfeld
b4565e127a gtk: add annotations for some GtkRadio* constructors
Since constructors like gtk_radio_button_new_from_widget take an
instance of their type as the first argument, the gi scanner interprets
them as methods.

https://bugzilla.gnome.org/show_bug.cgi?id=661858
2011-11-11 23:08:18 -05:00
Florian Müllner
31df36cbfe menuitem: Always treat submenus as popup
Submenus are not actually attached to a menubar, but styling them
as if they were imposes some problems (at least with Adwaita).
Just using GDK_WINDOW_TYPE_HINT_POPUP_MENU for submenus instead
fixes the issue.

https://bugzilla.gnome.org/show_bug.cgi?id=662691
2011-11-11 23:08:18 -05:00
Torsten Schönfeld
cd0a5fef30 gtk: add annotations for some GtkSymbolicColor constructors
https://bugzilla.gnome.org/show_bug.cgi?id=661859
2011-11-11 23:08:18 -05:00
Rui Matos
6a5e53a34a x11: Fix window manager change detection
Since the wmspec_check_window doesn't have a corresponding GdkWindow we can't
rely on the get_event_window() return value to get the XID from. Just use the
XID from the XEvent directly.

https://bugzilla.gnome.org/show_bug.cgi?id=662953
2011-11-11 23:08:18 -05:00
Benjamin Moody
0dde424db3 Mark gtk_dialog_new_with_buttons as NULL-terminated
https://bugzilla.gnome.org/show_bug.cgi?id=663073
2011-11-11 23:08:18 -05:00
Matthias Clasen
fcd5e44e15 Pop up context menus at the right device
When multiple pointers are in play, we need to be careful
not to loose track of the device between receiving a button
press and popping up a menu.

https://bugzilla.gnome.org/show_bug.cgi?id=663396
2011-11-11 23:08:18 -05:00
Matthias Clasen
73b34cbe18 Don't use deprecated Pango api 2011-11-11 23:08:18 -05:00
Matthias Clasen
b463530a72 Don't use deprecated Pango api 2011-11-11 23:08:18 -05:00
Cosimo Cecchi
a53a30c7f8 iconview: layout items immediately when setting a GtkTreeModel
As the draw handler expects the items to be laid out already, we cannot
queue a layout here to avoid a race condition with the resize that is
queued immediately after, which in turn would lead to a segfault later
in the paint_item() implementation.

https://bugzilla.gnome.org/show_bug.cgi?id=663138
2011-11-11 23:08:18 -05:00
Emmanuele Bassi
988f374151 radiotoolbutton: Fix the introspection annotations
Everything that deals with a group has to be fixed.

Plus, we have NULL checks without allowing NULL arguments; since NULL
arguments are perfectly fine, we can relax the argument checks.

https://bugzilla.gnome.org/show_bug.cgi?id=662870
2011-11-11 23:08:18 -05:00
Emmanuele Bassi
96e95d0a9f radiotoolbutton: Fix the annotation for get_group()
Use the same annotation used by gtk_radio_button_get_group().

https://bugzilla.gnome.org/show_bug.cgi?id=662870
2011-11-11 23:08:18 -05:00
Matthias Clasen
b4b8a969f4 Print dialog: small keynav improvement
Mark the page range entry and the copies spin button as
activates-default.

https://bugzilla.gnome.org/show_bug.cgi?id=662670
2011-11-11 23:08:18 -05:00
Matthias Clasen
b4120d6f25 Update grid tests to match
The previous fix changed some test results here.
2011-11-11 23:08:18 -05:00
Matthias Clasen
9a16a83c95 Fix gtk_grid_attach_next_to
The function did not behave as intended when @sibling is NULL.
Also add an example to the docs to clarify the intended behaviour.
2011-11-11 23:08:18 -05:00
Michael Natterer
e9dfc997a0 quartz: fix a race condition when waking up the CGRunLoop
Wake up the run loop unconditionally (don't check if it is waiting) because
it might go into waiting state right after we checked for it. Fixes GIMP
startup (which has a lot of GIOChannel I/O but zero NSEvents) from several
minutes to a few seconds.
(cherry picked from commit 0729cdc9a1)
2011-11-11 23:56:10 +01:00
Kristian Rietveld
0f6ec6e76d Bug 661997 - Gtk crashes when changing the TreeView model while ...
Simply stopping rubber banding in gtk_tree_view_set_model() eliminates
the crash.  Reported by Thomas Perl.
(cherry picked from commit 91ae19768e)
2011-11-09 08:47:18 +01:00
Michael Natterer
5deb446b50 quartz: include all buttons' state in GdkEventMotion.state
(cherry picked from commit 3b5c5710da)
2011-11-09 00:36:55 +01:00
Michael Natterer
e0d2525a52 quartz: include all buttons' states in GdkEventButton.state
(cherry picked from commit a381e8ea62)
2011-11-09 00:27:18 +01:00
Michael Natterer
73d9ee0e62 Bug 663605 - Fix event->state of many event types on quartz
Don't try to remember the current keyboard modifier and mouse button
states from the last event, because that isn't always right, and don't
set event.state = 0 for generated events. Instead, add private functions
to get the current states, and implement them with API that retrieves
these states independently from an event.
(cherry picked from commit 264241eb11)
2011-11-08 21:55:10 +01:00
John Ralls
9d900681d7 [Quartz Bug 663182] NSImage throws an exception from _gtk_quartz_create_image_from_pixbuf()"
If a zero-sized NSImage calls lockfocus it throws an exception. Make sure that the image isn't zero-sized before calling lockfocus, and log a warning and return NULL if it is zero-sized.

Have the quartz version of gtk_drag_begin_idle return FALSE if the returned image is NULL.
2011-11-07 14:27:09 -08:00
Stef Walter
9d2963f469 gtk: GtkToolbar returns invalid paths when adding tool items
* Calculate siblings_path on demand, so that it's always correct
   and doesn't get out of sync with the toolbar state.

https://bugzilla.gnome.org/show_bug.cgi?id=662177
2011-11-07 17:16:50 -05:00
Benjamin Otte
a8b315f41f toolbar: Fix widget path creation code
- Ensure arrow button is always included
- Invalidate list when direction changes
2011-11-07 17:16:27 -05:00
Michael Natterer
273283db92 gdk: exclude MOD1 from the virtual modifier mapping
which effectively nails down the MOD1 == ALT assumption that is valid
in all other parts of GTK+. After the modifier abstraction fixes for
OSX, the virtual mapping is now (correctly) used in more places, and
caused problems with the common default PC keyboard layout on X11 that
colocates ALT and META on the same key.
(cherry picked from commit ac943bf69a)
2011-11-07 20:14:33 +01:00
Michael Natterer
ef9a92d225 quartz: handle recursive CFRunLoops
Fixes e.g. crashs when dropping from finder.

Turn the "getting_events" boolean into a counter to handle poll_func()
being called recursively, and track the loop depth correctly by
changing its counter before bailing out in run_loop_observer_callback().
This way we reallocate our autorelease pool at the right time, and
don't kill memory that is still in use by outer run loops.

Also drain, not release the pool, just for some defensive forward
compatibility.
2011-11-06 23:30:28 +01:00
Alexander Larsson
7b06b81306 Make sure we only show icons in the file selector bookmarks toolbar
This looked really bad in non-gnome settings where default is to
show text too.
(cherry picked from commit c002c83ec5)
2011-11-02 14:49:14 +01:00
Michael Natterer
1481aac73f gtkrc.key.mac: add Command-cursor text navigation
and some emacs-ish Control bindings that work in native widgets.
Patch from Michael Hutchinson.
(cherry picked from commit ccf12f7b40)
2011-10-25 22:25:37 +02:00
Michael Natterer
b246dc21c6 gtkrc.key.mac: remove half the file, it was an accidential double paste
(cherry picked from commit 79a92f99a9)
2011-10-25 17:03:37 +02:00
Michael Natterer
0fd83a217b quartz: don't return FALSE from GdkDevice::query_state()
Not finding a child window to return is not a failure.
(cherry picked from commit 077b366879)
2011-10-22 23:27:03 +02:00
Michael Natterer
b292ecef1f gtkquartz: don't free the string returned by get_bundle_path()
It's statically allocated.
(cherry picked from commit c040b03c2e)
2011-10-22 23:10:38 +02:00
André Gondim
f4dfcefbd5 Fixed some strings in Brazilian Portuguese translation 2011-10-17 10:06:27 -02:00
Jiro Matsuzawa
194303fc8f Updated Japanese translation 2011-10-17 01:25:41 +09:00
Bruce Cowan
e5b30eecaf Updated British English translation 2011-10-16 14:45:05 +01:00
John Ralls
f5cc6dbdfa Bug 658772: Directory paths for resource directories are hard coded.
Corrected formatting to match coding standards; introduced local statics
to prevent leaking returned strings.
2011-10-15 12:45:37 -07:00
Matthias Clasen
b433772b03 bump version 2011-10-14 16:36:01 -04:00
Matthias Clasen
4e99d8d090 Fix more test breakage 2011-10-14 15:52:24 -04:00
Matthias Clasen
0594d4e349 Updates 2011-10-14 12:37:48 -04:00
Matthias Clasen
756c3a09af Fix make check
Somebody committed a behaviour change that broke his own
tests...tsk, tsk.
2011-10-14 11:43:40 -04:00
Matthias Clasen
1d3fc6c0c0 Add a css parser test for transparent 2011-10-14 11:37:02 -04:00
Chun-wei Fan
a3344ef699 Bug 660730: Win32: Only use _fstat32 if available
_fstat32 is only introduced with msvcrt80.dll (i.e. Visual C++ 2005),
in which using this function will break compilation with MinGW,
which links against msvcrt.dll.  The msvcrt.lib in the Windows DDK
which links to a later incarnation of the msvcrt.dll in later Windows
systems may have this symbol defined, but that needs to be checked
upon to be sure.

Thanks to Dieter Verfaillie for pointing out this problem.
2011-10-12 11:42:43 +08:00
John Ralls
68135b53fc Bug 658767 - Drag and Drop NSEvent capture is racy
Create a synthetic NSMouseLeftDown to store in the GtkQuartzDragSourceInfo
rather than relying on the NSWindow's latest event being the right one (or the
right kind).
2011-10-09 11:28:13 -07:00
Kristian Rietveld
436547a80e Bug 657770 - Write to released memory in gtkdnd-quartz.c
Clear the Drag paste board just before the info->context is released.
This way the GtkDragSourceOwner is released just before the drag context
is and thus can pasteboard:provideDataForType: not accidentally access
an already released drag context
2011-10-09 11:28:13 -07:00
Alex Corrado
9aa26f0d64 Quartz, Bug 655057: Eliminate Compiler Warning
When compiled with older SDKs, the original change for this bug caused a
compiler warning about NSWindow not being able to handle a setStyleMask
message. This tricks the compiler into thinking that it can.
2011-10-09 10:06:54 -07:00
John Ralls
48791fd514 Bug 658772: Directory paths for resource directories are hard coded.
Provide dynamic path discovery functions as are provided for win32.
2011-10-08 15:05:41 -07:00
Rudolfs Mazurs
32ec6ad073 Updated Latvian translation. 2011-10-09 00:09:03 +03:00
Kristian Rietveld
296c534663 quartz: also update window position on windowDidResize
When a window goes fullscreen, the resize also changes its size.
(cherry picked from commit d172f1ce22)
2011-10-08 11:48:48 +02:00
Wouter Bolsterlee
cb35b3166e Updated Dutch translation by Wouter Bolsterlee 2011-10-08 00:42:19 +02:00
Rachid
7276fbc1d1 Updated Dutch translation by Rachid 2011-10-08 00:42:15 +02:00
Michael Natterer
31863fc1b4 gtk: also define the default *virtual* accel mod mask
and use it in stock items and GtkAccelGroup. Change the non-virtual
one to MOD2 on OSX, so hardcoded accelerators in the IM context and
the treeview work.
(cherry picked from commit 21e971b3cb)
2011-10-07 20:29:54 +02:00
Michael Natterer
f46c1b76d8 gdk: fix gdk_keyval_to_lower/upper() for Quartz, Win32 and Broadway
In 2.x, the !HAVE_XCONVERTCASE fallback of keyval_convert_case() was
implicitly used as implementation for all !X11 backends.

In 3.x, when this function was virtualized in GdkDisplayManager,
this fallback was moved to the X11 backend and the other backends
"equipped" with /* FIXME implement */ implementations of
keyval_convert_case() which don't convert anything.

Move the fallback code back to gdk/ as default implementation
of GdkDisplayManager::keyval_convert_case() and remove its
implementations is all backends but X11. Also remove the
implementation is Wayland which was a plain copy of what
is now the default implementation.
2011-10-07 16:10:19 +02:00
Fran Dieguez
eaecf396bf Updated Galician translations 2011-10-07 01:30:08 +02:00
John Ralls
a628761838 Bug 628936: Minimal change to pass introspection.
gobject_introspection's G-ir-scanner doesn't like the -xobjective-c
option needed to compile ObjectiveC features in quartz implementations
of certain gtk functions. This rearranges the compiler flag environment
variables in Makefile so that G-ir-scanner doesn't see them.
2011-10-04 17:17:30 -07:00
Tristan Van Berkom
126adb6ef3 Fixed gtk_cell_area_stop_editing() to properly notify when editing is not canceled
This fixes bug 653289, in gtk+-2 gtk_tree_view_stop_editing() was previously
responsible for notifying with gtk_cell_editable_editing_done(), this detail
was missed when porting the cell renderer management to GtkCellArea.
2011-10-04 14:16:00 -04:00
Nicolás Lichtmaier
932ad8ad29 Updated Spanish translation, fixes bug #659655 2011-10-03 23:22:51 +02:00
Kristian Rietveld
bcfb7a6cdd Bug 659022 - gtk_tree_model_filter_clear_cache_helper: assertion failed
This bug is resolved by fixing two things in
gtk_tree_model_filter_row_deleted():

  (1) It is possible for an elt to have elt->visible_siter == NULL, when
  it is deleted.  Only call g_sequence_remove() if this pointer is
  non-NULL.

  (2) For the case len (level->seq) > 1, free the elt->children level
  if non-NULL.  Failing to do this means the level will stick around.
  If this child level was not referenced, it will still have a zero
  ref count on its parent which cannot be removed!

For both bugs unit tests have been added in the preceding commit.
2011-10-03 23:02:54 +02:00
Kristian Rietveld
a9b9699bde Add two more unit tests for bug 659022
Both pointing out problems in gtk_tree_model_filter_row_deleted().
2011-10-03 23:02:50 +02:00
Kristian Rietveld
51b11b36a4 Fix first part of bug 659022
Push creation of path into if clause, the path cannot be created anyway
(and would be meaningless otherwise) if the parent is not visible.
2011-10-03 23:02:45 +02:00
Kristian Rietveld
59a015fb85 Add unit test for part 1 of bug 659022
This tests a case where gtk_tree_model_filter_row_changed() is run
for a node with visible_siter != NULL, however its parent has
visible_iter == NULL. For this case, no valid paths can be generated
as the node cannot be accessed (because the parent is invisible).
2011-10-03 23:02:39 +02:00
Kristian Rietveld
bba6657bb5 Fix commit 5e41964965
Where the commit suggested "somebody should review it [the test]",
it would have been useful to test this particular commit instead...
2011-10-03 23:02:25 +02:00
Benjamin Otte
5e41964965 tests: Fix a bunch of set-but-unused warnings in the filtermodel test
The whole test doesn't seem to unref any memoery, somebody should review
it.
2011-10-03 18:05:57 +02:00
Benjamin Otte
04c42b6e53 iconcache: Fix gcc warning 2011-10-03 18:03:57 +02:00
Benjamin Otte
e248c6812e a11y: Hack around infinite loops in parent setting
This is kind of a hack to get rid of infinite loops that occur when
child accessibles try to set their parent upon creation but the parent
accessible creates its children in the initialize vfunc. Because in that
case, the parent will not have an accessible set when the child tries to
access it, because it is still initializing itself. Which will cause a
new accessible to be created.

https://bugzilla.gnome.org/show_bug.cgi?id=660687
2011-10-03 17:29:12 +02:00
Chun-wei Fan
ff6983e400 Bug 660730: Use GStatBuf for portability
Thanks to Kean Johnston for pointing this out.

There are a few places in GTK that use "struct stat",
and then g_stat(), rather than using GStatBuf.This breaks things on
Windows. Since the size of struct stat can vary depending on other
flags specified, this has the potential to cause overwrites and is
trivial to fix.

Based on patch submitted by Kean Johnston
2011-10-03 23:27:48 +08:00
Adel Gadllah
1edd94a950 gdk: Plug leak in gdk_display_pointer_is_grabbed
gdk_x11_device_manager_core_list_devices returns a new allocated
list, which has to be freed.

valgrind output:

==18686== 160,176 (80,088 direct, 80,088 indirect) bytes in 3,337 blocks are definitely lost in loss record 25,347 of 25,378
==18686==    at 0x4C256DD: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==18686==    by 0x6CD7752: g_malloc (in /lib64/libglib-2.0.so.0.3000.0)
==18686==    by 0x6CEE2B6: g_slice_alloc (in /lib64/libglib-2.0.so.0.3000.0)
==18686==    by 0x6CCB37D: g_list_prepend (in /lib64/libglib-2.0.so.0.3000.0)
==18686==    by 0x654CADA: gdk_x11_device_manager_core_list_devices (gdkdevicemanager-core-x11.c:836)
==18686==    by 0x6531489: gdk_display_pointer_is_grabbed (gdkdisplay.c:1270)
==18686==    by 0x5162E1E: filter_func (ui.c:140)
==18686==    by 0x6558B50: gdk_event_apply_filters (gdkeventsource.c:83)
==18686==    by 0x6558CB3: _gdk_x11_display_queue_events (gdkeventsource.c:197)
==18686==    by 0x6530680: gdk_display_get_event (gdkdisplay.c:311)
==18686==    by 0x65589F1: gdk_event_source_dispatch (gdkeventsource.c:356)
==18686==    by 0x6CD0A0E: g_main_context_dispatch (in /lib64/libglib-2.0.so.0.3000.0)

https://bugzilla.gnome.org/show_bug.cgi?id=660676
2011-10-03 14:25:55 +02:00
Tiffany Antopolski
a93793dca3 Updated Esperanto translation 2011-10-03 13:38:06 +02:00
Nguyễn Thái Ngọc Duy
483d8f3446 Updated Vietnamese translation 2011-10-01 20:10:25 +10:00
Nguyễn Thái Ngọc Duy
58e1481d38 po/vi: import from Damned Lies 2011-10-01 20:10:23 +10:00
Michael Natterer
64a7fc279c quartz: don't filter away directly encoded 24-bit UCS characters
gdk_unicode_to_keyval(uc) returning (uc | 0x01000000) is not an
error return value but simply the way to encode 24-bit unicode
characters directly as keyvals.
(cherry picked from commit 0a13deae88)
2011-09-28 13:58:52 +02:00
YunQiang Su
e35e112ea9 update zh_CN translation 2011-09-28 01:34:08 +08:00
Piotr Drąg
4fa78201a1 Updated POTFILES.skip 2011-09-27 16:07:35 +02:00
Benjamin Otte
89d16a5123 reftests: Add a reftest checking background-color: transparent 2011-09-26 22:34:20 +02:00
Rodolfo Ribeiro Gomes
c7f2c88b18 Fixed some strings in Brazilian Portuguese translation 2011-09-26 15:46:00 -03:00
Michael Natterer
b663f3a00b Bug 659406 - Abstract what triggers a context menu
Add _gtk_button_event_triggers_context_menu() and use it instead
of checking for event->button == 3, so context menus are invoked
correctly on the Mac.
2011-09-26 16:01:50 +02:00
Michael Natterer
0955a59563 app: abstract which modifiers are used for extending and modifying selections
which are SHIFT and MOD2 on the Mac, and SHIFT and CONTROL otherwise.
Use the new define all over the place and rename variables and
members to not say "shift" or "control".
2011-09-26 16:01:50 +02:00
Michael Natterer
286fff4e5f gtk: use GTK_NO_TEXT_INPUT_MOD_MASK also in gtkfilechooserdefault.c
(cherry picked from commit b057a311e7)
2011-09-26 16:01:50 +02:00
Michael Natterer
24a42839ba gtk: allow to specify accelerators in a platform-independent way
Introduce <Primary> in accelerator strings, which resolves to
GDK_CONTROL_MASK on X11/Win23, and to GDK_META_MASK on quartz.
Also serialize CONTROL/META as <Primary> depending on the platform.
2011-09-26 16:01:50 +02:00
Michael Natterer
2a8be23d17 gtk: fix entering of Option-foo symbols on the Mac
define GTK_NO_TEXT_INPUT_MOD_MASK in gtkprivate.h
and use it in the IM contexts, so Option-foo is no longer
filtered away.
2011-09-26 16:01:50 +02:00
Michael Natterer
d3df4678ca gtk: use GTK_DEFAULT_ACCEL_MOD_MASK instead of GDK_CONTROL_MASK in gtkstock.c 2011-09-26 16:01:50 +02:00
Michael Natterer
a99d14f61c quartz: resolve the modifier confusion on the Mac
- map Alt/Option to MOD1
- map Command to MOD2
- map MOD2 to the virtual Meta
- improve/fix (?) group handling in gdkkeys-quartz.c
2011-09-26 16:01:50 +02:00
Michael Natterer
c50063397f gtk: disable mnemonics in gtkrc.key.mac, they don't exist on the Mac
(cherry picked from commit d83c86d42e)
2011-09-26 16:01:50 +02:00
Michael Natterer
3fd7dbc940 gtk: enable setting virtual modifiers in GtkCellRendererAccel
Call gdk_keymap_add_virtual_modifiers() on event->state,
so virtual modifiers get added at all.
(cherry picked from commit be1eea612c)
2011-09-26 16:01:50 +02:00
Benjamin Otte
b01e20f1d1 cssprovider: Remove unused enums 2011-09-26 16:00:26 +02:00
Benjamin Otte
1e36e40e29 styleproperty: Allow 'transparent' keyword for background-color 2011-09-26 16:00:26 +02:00
Benjamin Otte
205d0eb4da styleproperty: Default to transparent background-color 2011-09-26 16:00:26 +02:00
Benjamin Otte
61525f0662 styleproperty: Use the long form to register background-color
We want to set a default value.
2011-09-26 16:00:25 +02:00
Carles Ferrando
6476f6a265 [l10n]Updated Catalan (Valencian) translation 2011-09-26 14:22:19 +02:00
Carles Ferrando
d026fd4a04 [l10n]Updated Catalan (Valencian) translation 2011-09-26 14:22:01 +02:00
Petr Kovar
33c43c9264 Update Czech translation 2011-09-26 12:20:49 +02:00
Matthias Clasen
70b13d734d Bump version 2011-09-25 22:01:13 -04:00
Matthias Clasen
c9beb22f7b 3.2.0 2011-09-25 22:00:20 -04:00
Matthias Clasen
420a09363c Updates 2011-09-25 21:13:33 -04:00
Matthias Clasen
5ff8fe6971 Documentation fixes
Mostly making sure that return values and varargs don't loose
their docs.
2011-09-25 21:04:49 -04:00
Michael Natterer
a6151ebb95 GtkBox: make get_path_for_child() work if there are internal children
Use foreach() instead of forall() to find the child's siblings
because internal children of subclasses have no sibling relation
to the box' children. Also deal with the subclass failing to
implement get_path_for_child(). This caused an infinite widget
path invalidation loop of sorts with GimpMessageBox, which is a
vertical box with a decorative icon to the left.
2011-09-26 00:52:28 +02:00
Petr Kovar
66becfdab1 Update Czech translation 2011-09-25 23:57:51 +02:00
Pau Iranzo
874b7207b0 [l10n]Updated Catalan translation 2011-09-25 23:39:17 +02:00
Gil Forcada
aa62d0f334 [l10n]Updated Catalan translation 2011-09-25 23:11:05 +02:00
OKANO Takayoshi
8b9601df17 Updated Japanese translation 2011-09-26 01:23:22 +09:00
Michael Natterer
c7cf1f531d GtkTreeViewColumn: fix x_offset returned by cell_get_position()
Fixes #640741 - gtk_tree_view_column_get_cell_position() seems to be broken

It is supposed to return the offset within the column, but returned
the offset within the tree, changed by allocation.x of the column's
button (which I don't really unserstand and was clearly not working).
2011-09-25 17:45:57 +02:00
Michael Natterer
33f7754a71 GtkTreeViewColumn: fix return value of gtk_tree_view_column_cell_get_position()
Return FALSE again if the passed in cell is not part of the column.
It was always returning TRUE since GtkCellArea was introduced.
2011-09-25 14:55:23 +02:00
Alexander Shopov
1c993d52b8 Updated Bulgarian translation 2011-09-25 14:53:52 +03:00
ipraveen
8725dca380 Updated Telugu Translation 2011-09-25 14:07:55 +05:30
ipraveen
8c7dca8c79 Updated Telugu Translation 2011-09-25 12:29:17 +05:30
ipraveen
021c4d7e2e Updated Telugu Translation 2011-09-25 12:04:12 +05:30
Kenneth Nielsen
29fe165511 Updated Danish translation 2011-09-24 22:19:37 +02:00
Kenneth Nielsen
e19d620267 Updated Danish translation 2011-09-24 14:51:00 +02:00
Matthias Clasen
65ee452a99 Add some missing entries to the docs 2011-09-23 22:18:44 -04:00
Matthias Clasen
39acc6488a Updates 2011-09-23 21:06:23 -04:00
Aurimas Černius
c91be5893b Updated properties Lithuanian translation 2011-09-24 00:32:27 +03:00
Aurimas Černius
e994543ee7 Updated Lithuanian translation 2011-09-24 00:29:50 +03:00
Matthias Clasen
dd82b30433 Fix module blacklisting
The handling of the module lists is a bit confusing here. There is
a global list that is populated with initial modules from GTK_MODULES,
and then there is a second list that is suppposed to hold the modules
loaded from the gtk-modules xsetting, which we attach to the GtkSettings
object. The blacklisting caused us to put the wrong modules into the
second list, and mess up the module refcounts, eventually double-freeing
memory when the setting changes repeatedly.

https://bugzilla.gnome.org/show_bug.cgi?id=659966
2011-09-23 16:42:45 -04:00
Benjamin Otte
bd8e9085ab textview: Fix comparison being the wrong way
Keynav failed when the position did _not_ change.
2011-09-23 22:24:00 +02:00
Alban Crequy
6ab7b87a02 gtktreeviewaccessible: do not trigger an assertion
The following assertion was triggered in model_row_inserted() because
iterate_thru_children() modifies the parameter tree_model before passing it to
traverse_cells().

Gtk-CRITICAL **: gtk_tree_path_compare: assertion `b->depth > 0' failed

The stack with the bug was:

  #0  gtk_tree_path_compare at gtktreemodel.c
  #1  traverse_cells at gtktreeviewaccessible.c
  #2  model_row_inserted at gtktreeviewaccessible.c

This patch calls iterate_thru_children() with a copy of the path so that the
original is not modified.
2011-09-23 12:04:39 -04:00
Bastien Nocera
a0fc947f89 GtkAssistant: Fix problems with gtk_widget_show_all()
gtk_widget_show_all() would have shown every single item inside
the GtkAssistant sidebar, as well as all the navigation buttons.

https://bugzilla.gnome.org/show_bug.cgi?id=659826
2011-09-23 12:45:09 +01:00
Christian Persch
370f0d1d86 Disable font fallback in the fontchooser preview
The preview is should show the selected font, not whatever
font contains glyphs for the preview text.
2011-09-23 00:32:44 +02:00
Benjamin Otte
7c675b34c5 fontbutton: Properly display absolute sizes
Display them the same way as Pango does.
2011-09-22 21:44:06 +02:00
Benjamin Otte
d5bc1b66d2 fontbutton: Properly update label after property changes
Previously, the font wasn't properly updated after some changes.
2011-09-22 21:44:05 +02:00
Benjamin Otte
19623af04e fontbutton: Display the same text as elsewhere
In particular, display names of families that don't have an installed
font.
2011-09-22 21:44:05 +02:00
Benjamin Otte
18a6d9803e fontchooser: Use fixed height mode for the font face list
Now that we enforce same height anyway, this just further speeds things
up.
2011-09-22 21:44:05 +02:00
Benjamin Otte
1892c64acc fontchooser: Set a fixed size on the preview cell
This way, all rows have the same height. It has 3 advantages:
1) No actual computation is necessary to compute the size of the cell.
   This speeds up the list tremendously (filling out the list goes from
   25s to 3s).
2) Buggy fonts don't mess up the list anymore with their weird sizes.
   Instead, they are clipped / empty space is added.
3) Buggy fonts look more buggy. So their use is hopefully discouraged.
2011-09-22 21:44:05 +02:00
Benjamin Otte
59fbfd6205 fontchooser: Split out computing of the preview text attributes 2011-09-22 21:44:05 +02:00
Benjamin Otte
c1958ae9f2 fontchooser: Use absolute size for the preview text in the list
With absolute sizes, Pango is way better at getting the actual sizes of
the fonts to match up. It's a bit harder to compute a proper value for
this, whcih makes the code ugly, but as long as it works better...
2011-09-22 21:44:05 +02:00
Benjamin Otte
14154dac31 fontchooser: Set cell data as text + attributes instead of markup
This is quite a bit uglier, but allows more freedom.
2011-09-22 21:44:05 +02:00
Benjamin Otte
38af387ee3 fontchooser: Reselect font when it's unfiltered 2011-09-22 21:44:05 +02:00
Benjamin Otte
c9ef2d019e fontchooser: Only compare font descriptions when families match
This way, we can find fonts way quicker as we only need to create font
descriptions for fonts with matching families. Most importantly, we're
rather quick in the "the font doesn't exist" case.
2011-09-22 21:44:05 +02:00
Benjamin Otte
7d5d0a19e7 fontchooser: Only create font descriptions on demand
pango_font_describe() is expensive, so try not to use it.
2011-09-22 21:44:05 +02:00
Benjamin Otte
a40d0b44e1 fontchooser: Make all setters go through merge_font_desc()
Don't special case cursor_changed anymore.
2011-09-22 21:44:05 +02:00
Benjamin Otte
af8c3fe98e fontchooser: Update range marks properly
Range marks weren't updated previously when the font was set
programmatically. Also, setting the range marks could cause the font
size to change.
2011-09-22 21:44:05 +02:00
Benjamin Otte
59298d9e82 fontchooser: Reorganize code a bit
The main reason is so that we have a new function that we can use from
the cursor_changed_cb.
2011-09-22 21:44:05 +02:00
Benjamin Otte
132ccf021f fontchooser: Don't store the current face and family anymore
They can be queried on-demand from the font list.
2011-09-22 21:44:05 +02:00
Benjamin Otte
7cf53a9f60 fontchooser: Take font description from model
... instead of taking face and constructing it from there.
2011-09-22 21:44:05 +02:00
Benjamin Otte
2b83d03604 fontchooser: Sanitize variable declarations
- no empty lines between variables
- no unnecessary casts
- use glib-style casts
- no spaces
2011-09-22 21:44:05 +02:00
Benjamin Otte
5a5737e3b6 fontchooser: Fix leak
the path variable is set, not filled in.
2011-09-22 21:44:05 +02:00
Benjamin Otte
a124d17825 fontchooser: Store an iter to the current font
Note that we cannot use GtkTreeSelection for this, because when the font
list is filtered the current font may not be visible.
2011-09-22 21:44:05 +02:00
Morten Welinder
9d96830571 cssprovider: Remove outdated docs 2011-09-22 21:44:05 +02:00
Benjamin Otte
6499088f7f fontchooser: Store tree model member variables as GtkTreeModel
... and remove the now unnecessary treemodel casts everywhere.

Just code cleanup.
2011-09-22 21:44:05 +02:00
Benjamin Otte
3d87ee7716 fontchooser: Rename populate_list() function
Name it gtk_font_chooser_widget_load_fonts(). Also, don't take any
arguments, they were the same everywhere and they're member variables of
the font chooser anyway.
2011-09-22 21:44:04 +02:00
Benjamin Otte
6cbbc789d5 fontchooser: Make changing the preview text fast
Instead of reloading the font list, we now just queue a redraw. This
works, because the preview text is added using a cell data func instead
of a custom column.
2011-09-22 21:44:04 +02:00
Benjamin Otte
5834691e69 fontchooser: Use a cell_data_func for the font list
This way, we don't have to store the preview text in the list.
2011-09-22 21:44:04 +02:00
Benjamin Otte
3a77b7e005 fontchooser: Don't scroll in the populate_list() function 2011-09-22 21:44:04 +02:00
Benjamin Otte
ded10365a1 fontchooser: Remove needless scroll calls
Previous functions take care of scrolling already.
2011-09-22 21:44:04 +02:00
Benjamin Otte
3af04c1dce fontchooser: Introduce gtk_font_chooser_find_font()
... which looks up the font in the list of fonts. This then can be used
to select an actual font upon changes.

Also fixes cases where the get_family() and get_face() functions would
return outdated data when set_font() had been called.
2011-09-22 21:44:04 +02:00
Benjamin Otte
fe8ed0a3f6 fontchooser: Rewrite size changes
They now go through gtk_font_chooser_widget_take_font_desc(). The end
goal is to make all changes go through this function, so that all
updates that are happening are easy to track.

Another change is that the code now merges the font description instead
of just using the new one. This avoids weird situations when people set
the font "Bold" for example, which has neither a size nor a font family.
2011-09-22 21:44:04 +02:00
Benjamin Otte
af5f593b6d fontchooser: Fix size computation 2011-09-22 21:44:04 +02:00
Benjamin Otte
8f33324750 fontchooser: Fix gcc warnings 2011-09-22 21:44:04 +02:00
Changwoo Ryu
aeace5d005 Updated Korean translation 2011-09-23 03:01:11 +09:00
Daniel Nylander
a861fa0f92 Updated Swedish translation 2011-09-22 16:37:26 +02:00
Daniel Nylander
0c33f0e958 Updated Swedish translation 2011-09-22 16:37:16 +02:00
Daniel Nylander
e4bf7a2a3c Updated Swedish translation 2011-09-22 16:37:16 +02:00
Antonio Fernandes C. Neto
4403cf0567 Updated Brazilian Portuguese translation. 2011-09-22 10:30:55 -04:00
Manoj Kumar Giri
2ea4cef672 Updated Oriya Translation 2011-09-22 19:36:41 +05:30
Nilamdyuti Goswami
ee1bd4cc6d Update Assamese translation 2011-09-22 12:44:58 +02:00
Mario Blättermann
349e9cce9a [l10n] Updated German translation 2011-09-22 08:34:07 +02:00
Bruno Brouard
2c704dd1a1 Updated French translation 2011-09-21 20:14:03 +02:00
Inaki Larranaga Murgoitio
9dfb837019 Updated Basque language 2011-09-21 18:04:18 +02:00
Inaki Larranaga Murgoitio
013456187e Updated Basque language 2011-09-21 17:58:45 +02:00
Antoine Jacoutot
3d165c1a90 gtkmountoperation-x11: unbreak compilation on OpenBSD.
Add missing header to prevent undeclared definitions.
Bug #659565
2011-09-21 16:02:33 +02:00
Duarte Loreto
c64797fe26 Updated Portuguese translation 2011-09-21 00:59:41 +01:00
Gabor Kelemen
0682c4015f Updated Hungarian translation 2011-09-21 00:54:18 +02:00
Rudolfs Mazurs
2b02a4c342 Updated Latvian translation. 2011-09-20 22:30:01 +03:00
Mario Blättermann
4e4a362234 [l10n] Updated German translation 2011-09-20 20:47:32 +02:00
Gabor Kelemen
e26101adaa Updated Hungarian translation 2011-09-20 19:43:05 +02:00
Piotr Drąg
0f9f9ec788 Updated Polish translation 2011-09-20 17:32:11 +02:00
Piotr Drąg
8def2dc162 Updated Polish translation 2011-09-20 17:30:06 +02:00
Antonio Fernandes C. Neto
34490abc84 Updated Brazilian Portuguese translation 2011-09-20 12:04:44 -03:00
Matej Urbančič
8977275f28 Updated Slovenian translation 2011-09-20 13:23:30 +02:00
Daniel Mustieles
49c1580b70 Updated Spanish translation 2011-09-20 10:59:57 +02:00
Yuri Myasoedov
f43a8675b8 Updated Russian translation 2011-09-20 12:05:06 +04:00
Xavier Claessens
0561c7a68d GtkTreeModelFilter: Fix build warnings
https://bugzilla.gnome.org/show_bug.cgi?id=659441
2011-09-20 09:06:54 +02:00
Fran Dieguez
7bd7c02a11 Updated Galician translations 2011-09-20 01:27:13 +02:00
Matthias Clasen
d48542e1cd Bump version 2011-09-19 18:03:11 -04:00
Matthias Clasen
9bf03f57da 3.1.92 2011-09-19 17:39:00 -04:00
Matthias Clasen
aba75fdc95 Updates 2011-09-19 16:39:58 -04:00
Piotr Drąg
8537b1cefa Updated Polish translation 2011-09-19 22:21:53 +02:00
Benjamin Otte
34f9e6a0f3 fontchooser: Remove special case for a single signal handler 2011-09-19 22:11:06 +02:00
Benjamin Otte
a4c3271854 fontchooser: Remove useless code
gtk_adjustment_set_value() clamps itself, no need to do the clamping.

But I was impressed at the amount of comments.
2011-09-19 22:11:06 +02:00
Benjamin Otte
e465023051 fontchooser: Don't store the size separately
Instead, use the font description's size.
2011-09-19 22:11:06 +02:00
Benjamin Otte
6552a8245b fontchooser: Don't reload the fonts on style changes
It's not necessary, because nothing changes.
2011-09-19 22:11:06 +02:00
Benjamin Otte
64d3350264 fontchooser: Assume NULL screen means the default screen
... and update the font list only when the screen actually changes.
2011-09-19 22:11:06 +02:00
Benjamin Otte
ae5f82e455 fontchooser: Store the font description in the model
It's actually expensive to create (>5ms per font with >1000 fonts
installed), so better cache it.
2011-09-19 22:11:06 +02:00
Benjamin Otte
6d8010d3d4 fontchooser: Move the filter func to the visibility func
... instead of rereading all the fonts every time.

With this change, the liststore now contains every font face known to
GTK, so we can actually walk it for matching fonts.
2011-09-19 22:11:06 +02:00
Benjamin Otte
d88b7a6d6b fontchooser: Fix code to make it not look like GTK 0.9 2011-09-19 22:11:06 +02:00
Benjamin Otte
b95bbb5e39 fontchooser: List font description as font description
Otherwise there will be two properties listed as "Font" in property
selectors (in Glade or testfontchooser).
2011-09-19 22:11:05 +02:00
Benjamin Otte
a5f516c818 fontchooser: Family or face can never be NULL
... so there's no need to special-case those situations.
2011-09-19 22:11:05 +02:00
Benjamin Otte
fb2bc139bb fontchooser: Use gtk_list_store_insert_with_values()
... instead of append() + set_values()
2011-09-19 22:11:05 +02:00
Benjamin Otte
824aeb77c6 fontchooserwidget: Simplify function
- Don't do unnecessary casts
- Fix weird variable declaration indenting
- Fix loop indentation
- Use a for loop for iterating over a list, instead of a while loop
- Casefold font name only once, instead of every iteration
- Remove needless true_var = true_var && TRUE assignment
2011-09-19 22:11:05 +02:00
Bruce Cowan
7a34a5971e Updated British English translation 2011-09-19 13:11:23 +01:00
Chris Coulson
22cd009ef7 GtkPaned: Create the child window at the correct position
When there is only a single child, create its window at the correct position
https://bugzilla.gnome.org/show_bug.cgi?id=659241
2011-09-19 12:28:59 +01:00
Мирослав Николић
68e943506e Updated Serbian translation 2011-09-19 03:08:22 +02:00
Rudolfs Mazurs
e79647c45d Updated Latvian translation. 2011-09-18 20:55:24 +03:00
Daniel Nylander
b178259235 Updated Swedish translation 2011-09-18 19:35:34 +02:00
Wolfgang Stöggl
8f8b394c96 [l10n] Updated German translation 2011-09-18 17:37:42 +02:00
Wolfgang Stöggl
23db27831c [l10n] Updated German translation 2011-09-18 17:34:19 +02:00
Ihar Hrachyshka
a7b21b1644 Updated Belarusian translation (some fixes after manual testing). 2011-09-17 23:28:39 +03:00
Ihar Hrachyshka
a846518f81 Updated Belarusian translation (some fixes after manual testing). 2011-09-17 22:51:32 +03:00
Alexander Shopov
c0f9d302ec Updated Bulgarian translation 2011-09-17 22:14:15 +03:00
Xandru Armesto
cf210a87d7 Updated asturian translation 2011-09-17 19:03:55 +02:00
Djavan Fagundes
51da151a6f Fixed a string translated to Brazilian Portuguese 2011-09-17 12:04:13 -03:00
Matej Urbančič
d8702b395d Updated Slovenian translation 2011-09-17 11:01:15 +02:00
Matej Urbančič
5a59a1f542 Updated Slovenian translation 2011-09-17 10:55:24 +02:00
Martin Srebotnjak
a376dcc190 Updated Slovenian translation 2011-09-17 09:48:31 +02:00
Kristian Rietveld
e1ede022f8 treemodelfilter: add additional asserts to MODEL_FILTER_DEBUG mode 2011-09-17 06:09:35 +02:00
Kristian Rietveld
25a514da8a Remove left-over calls to dump function 2011-09-17 06:09:35 +02:00
Matthias Clasen
be58a6ce2c widget-factory: add more checks and radios
Add examples of check and radio menuitems, as well as inconsistent
checks and toggles.
2011-09-16 21:08:14 -04:00
Bastien Nocera
3c2eb053d6 link-button: Reset the mouse cursor when destroyed
If clicking on a link destroys the link button, and keeps the
same GdkWindow then the cursor stays as a hand in the rest of
the interface.

https://bugzilla.gnome.org/show_bug.cgi?id=659247
2011-09-16 15:06:28 +01:00
Javier Jardón
493d79886e gdk/gdkkeys.h: Remove api documentation as Its already in the .c file 2011-09-16 13:12:02 +02:00
Duarte Loreto
c2be5f3155 Updated Portuguese translation 2011-09-16 00:47:03 +01:00
Duarte Loreto
c254ebb56c Updated Portuguese translation 2011-09-16 00:45:41 +01:00
Martin Srebotnjak
4c06f52d77 Updated Slovenian translation 2011-09-15 22:37:48 +02:00
A S Alam
5f360423c5 Updated Punjabi Translation 2011-09-15 22:23:43 +05:30
Xandru Armesto
c3b074f6e2 Updated asturian translation 2011-09-15 18:37:23 +02:00
Cosimo Cecchi
e9de907f9e iconview: add support for prelight cells
Render GtkIconView cell items with the prelight state flag when they're
being mouse hovered.
This works basically in the same way it's done for GtkTreeView cells,
and e.g. GtkCellRendererPixbuf will need to have its follow-state
property to opt in to prelight rendering.

https://bugzilla.gnome.org/show_bug.cgi?id=615501
2011-09-15 09:34:04 -04:00
Fran Dieguez
393a1261b3 Updated Galician translations 2011-09-14 23:14:00 +02:00
Ihar Hrachyshka
e0ea002e0d Updated Belarusian translation. 2011-09-14 21:52:12 +03:00
Ryan Lortie
f86351c05f GtkApplication: chain up ::startup 2011-09-14 14:04:10 -04:00
Yuri Myasoedov
98b8f4a9fd Updated Russian translation 2011-09-14 21:52:57 +04:00
Alexandre Franke
a5f632d815 Update French translation 2011-09-14 18:25:36 +02:00
Benjamin Otte
9ddc11fbb5 iconview: Don't rturn TRUE from draw handler 2011-09-14 16:10:14 +02:00
Benjamin Otte
9e8b2f2521 treeview: Return FALSE from draw handler
... like every widget should.

https://bugzilla.gnome.org/show_bug.cgi?id=658981
2011-09-14 16:10:14 +02:00
Antonio Fernandes C. Neto
a172dff58b Updated Brazilian Portuguese translation. 2011-09-14 08:57:40 -04:00
Matthias Clasen
f1574cbe4d Post-release bump 2011-09-13 18:17:47 -04:00
Matthias Clasen
c37e425341 3.1.90 2011-09-13 17:40:52 -04:00
Matthias Clasen
07cecfc601 Fix a parameter name mismatch 2011-09-13 17:36:24 -04:00
Matthias Clasen
2f19600708 Updates 2011-09-13 17:36:15 -04:00
Luca Ferretti
26799f67a9 l10n: Updated Italian translation 2011-09-13 23:29:15 +02:00
Luca Ferretti
14147de0c2 l10n: Updated Italian translation 2011-09-13 23:26:00 +02:00
Luca Ferretti
f38901509e l10n: Updated Italian translation 2011-09-13 23:25:55 +02:00
Federico Mena Quintero
432b7ee2bc Merge branch 'bgo593793-filechooser-recent-folders-master' 2011-09-13 15:24:37 -05:00
Federico Mena Quintero
c132b6cfc7 bgo#658600 - Don't try to focus the location entry in Recent-files mode
We don't ever start up in Search mode, so we don't need an extra check for that mode, yet.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-09-13 15:24:29 -05:00
Kjartan Maraas
f191798faf Updated Norwegian bokmål translation 2011-09-13 18:47:54 +02:00
dmustieles
24981f75a0 Updated Spanish translation 2011-09-13 18:07:43 +02:00
Richard Hughes
14df59d47c Fix a segfault if the GAppInfo does not have an icon
This fixes the following backtrace:

 0  g_logv (log_domain=0x7ffff60461a4 "GLib-GObject", log_level=<optimized out>,
    format=0x7ffff599c322 "%s: assertion `%s' failed", args1=0x7fffffffc418) at gmessages.c:577
 1  0x00007ffff59312d2 in g_log (log_domain=<optimized out>, log_level=<optimized out>,
    format=<optimized out>) at gmessages.c:591
 2  0x00007ffff601c3c7 in g_object_ref (_object=0x0) at gobject.c:2648
 3  0x00007ffff7721e22 in gdk_x11_app_launch_context_get_startup_notify_id (context=<optimized out>,
    info=0x7fffe8004b40, files=<optimized out>) at gdkapplaunchcontext-x11.c:331
 4  0x00007ffff62e60d0 in _g_desktop_app_info_launch_uris_internal (appinfo=0x7fffe8004b40, uris=0x0,
    launch_context=0x7fffe401c800, spawn_flags=G_SPAWN_SEARCH_PATH, user_setup=0, user_setup_data=0x0,
    pid_callback=0, pid_callback_data=0x0, error=0x7fffffffc848) at gdesktopappinfo.c:1269
 5  0x00007ffff62e630a in g_desktop_app_info_launch_uris (appinfo=<optimized out>, uris=<optimized out>,
    launch_context=<optimized out>, error=<optimized out>) at gdesktopappinfo.c:1341
 6  0x00007ffff62e636b in g_desktop_app_info_launch (appinfo=0x7fffe8004b40, files=<optimized out>,
    launch_context=0x7fffe401c800, error=0x7fffffffc848) at gdesktopappinfo.c:1388
2011-09-13 16:41:38 +01:00
Piotr Drąg
415d916129 Updated Polish translation 2011-09-13 17:26:57 +02:00
Piotr Drąg
aaa2e0b1cd Updated POTFILES.in 2011-09-13 17:20:05 +02:00
Christian Persch
7ce29eecc1 prop-editor: Allow editing PANGO_TYPE_FONT_DESCRIPTION properties
...using a GtkFontButton.
2011-09-13 12:55:34 +02:00
Christian Persch
71c16bad33 Take font size also from the font description 2011-09-13 12:55:34 +02:00
Christian Persch
d82895127e Remove some unnecessary casts 2011-09-13 12:55:34 +02:00
Christian Persch
8219a413ff Clarify conditions when get_font_{family,face} return NULL 2011-09-13 12:55:34 +02:00
Christian Persch
b1ff243c57 Fix implementation of GtkFontButton:get_font_{family,face}
Returns a PangoFont{Family,Face} even when the font dialogue
has never been popped up.
2011-09-13 12:55:34 +02:00
Christian Persch
cc79b08441 Add filter test to testfontchooserdialog 2011-09-13 12:55:33 +02:00
Christian Persch
6902813a11 Rename gtk_font_chooser_get_{family,face,size}
... to gtk_font_chooser_get_font_{family,face,size}, in order to
avoid naming conflicts in bindings.
2011-09-13 12:55:33 +02:00
Christian Persch
abd9242f33 Add GtkFontChooser:font-desc property
Add a way to set/get the font as a PangoFontDescription.
2011-09-13 12:55:33 +02:00
Christian Persch
1b818f2e46 Remove GtkFontChooser:[sg]et_font
Now that the setter doesn't return a value anymore, we can just use
g_object_[sg]et instead of having these vfuncs.
2011-09-13 12:55:22 +02:00
Christian Persch
0b7db6888a Setters should not return a boolean
The setter for the "font" property returned a boolean that indicated
whether the given font has been found. Instead, fall back to the default
font name when the given font doesn't exist.
2011-09-13 12:55:22 +02:00
Matthias Clasen
cf14868619 Cosmetic doc fixes 2011-09-13 12:55:22 +02:00
Matthias Clasen
bdcb8558e3 Trivial: Fix up function name in the docs 2011-09-13 12:55:22 +02:00
Matthias Clasen
9e46e5789c Trivial: Add a few missing functions to the docs 2011-09-13 12:55:22 +02:00
Christian Persch
85e95a765d Mark string for translation 2011-09-13 12:55:22 +02:00
Christian Persch
ca4152995a GtkFontChooser implementation for GtkFontButton 2011-09-13 12:55:21 +02:00
Christian Persch
eb2a54decf Add prop editors to testfontchooser{,dialog} 2011-09-13 12:55:21 +02:00
Christian Persch
eb9efc9fd2 Rename GtkFontChooser:font-name to :font
GtkFontButton already has a property named "font-name" which may
conflict / be an ABI break when moving GtkFontButton to implement
GtkFontChooser. Also, this is more in line with how other parts in
gtk (e.g. GtkCellRendererText) call a font string property.
2011-09-13 12:55:21 +02:00
Christian Persch
5452525143 Make GtkFontChooser an interface
Make the GtkFontChooser API similar to the Gtk{File,Recent,App}Chooser
APIs by introducing GtkFontChooser as an interface, that has a default
implementation in GtkFontChooserWidget.

https://bugzilla.gnome.org/show_bug.cgi?id=657627
2011-09-13 12:55:21 +02:00
I Felix
291b044028 Updated Tamil Translations 2011-09-13 16:11:47 +05:30
I Felix
e4cc5c09a4 Updated Tamil Translations 2011-09-13 16:09:13 +05:30
I Felix
b21eb01cff Updated Tamil Translations 2011-09-13 16:08:29 +05:30
Murray Cumming
7eeebd4311 gtk_assistant_remove_page() docs: Fix typo. 2011-09-13 10:08:48 +02:00
YunQiang Su
609e40718d fix an issus 2011-09-13 13:20:19 +08:00
Yinghua Wang
d2d52567ad update Simplified Chinese (zh_CN) translation 2011-09-13 13:19:11 +08:00
Yinghua Wang
f6b264a34b update Simplified Chinese (zh_CN) translation 2011-09-13 11:54:56 +08:00
Matthias Clasen
7466f846b7 GtkSearchEngineTracker: port to tracker 0.12
We simply use the Tracker DBus api here, caching and direct
access that come with libtracker-sparql are probably not needed
here. Based on a patch by Martyn Russell.

https://bugzilla.gnome.org/show_bug.cgi?id=658272
2011-09-12 21:35:31 -04:00
Matthias Clasen
353c7c622e GtkFileChooserButton: Expand like other 'pickers'
Reported in bug 658774.
2011-09-12 21:33:11 -04:00
Fran Dieguez
2c49983041 Updated galician translations 2011-09-12 21:37:50 +02:00
Fran Dieguez
7fd19d7a36 Updated galician translations 2011-09-12 21:36:19 +02:00
Fran Dieguez
7c77278010 Updated galician translations for documentation 2011-09-12 21:31:54 +02:00
John Ralls
7550157d66 bgo#514843 - [filechooser] Deal with corrupted .gtk-bookmarks gracefully
We weren't checking for the lines in that file being valid UTF-8 strings.
2011-09-12 14:30:44 -05:00
Daniel Nylander
70d70a0607 Updated Swedish translation 2011-09-12 21:07:42 +02:00
Daniel Nylander
2c0a4ff143 Updated Swedish translation 2011-09-12 17:50:11 +02:00
Alexandre Franke
6573e24d59 Update French translation 2011-09-12 01:15:19 +02:00
Ihar Hrachyshka
e12140f8da Updated Belarusian translation. 2011-09-11 21:48:36 +03:00
Kristian Rietveld
3fc80381fd Add unit test for Bug 657353
This is to verify that Bug 657353 has been fixed.
2011-09-11 20:19:56 +02:00
Kristian Rietveld
7c0526e9b2 treemodelfilter: bring if-condition in sync
Bring the if-condition in sync with the other if-conditions in the
function where the "path" variable is used.
2011-09-11 20:19:56 +02:00
John Ralls
7cff8c4403 Quartz: gtk_drag_highlight_draw(): Set the GtkStyleContext to the widget.
Otherwise there's no actual context to save and restore.
2011-09-11 10:49:54 -07:00
Rudolfs Mazurs
442b3d265a Updated Latvian translation. 2011-09-11 20:28:23 +03:00
Kristian Rietveld
3db7344f33 treemodelfilter: correct forgotten unref of parent on level destroy
gtk_tree_model_filter_free_level() should always release ref on parent
unless the parent has been removed in the child model.  The unit tests
added in the previous commit test this.
2011-09-11 16:53:27 +02:00
Kristian Rietveld
9c85042de6 Increase code coverage of first reference transfer code paths 2011-09-11 16:51:23 +02:00
Sébastien Granjoux
35eb92138a treemodelfilter: bgo#658696- Crash when inserting new node 2011-09-11 12:13:54 +02:00
Kristian Rietveld
0ab9766253 Add unit test for bug 658696 2011-09-11 12:13:54 +02:00
Kristian Rietveld
a43f2ba010 gtktreemodelfilter: fix small bug in prune level
gtk_tree_model_filter_prune_level() should drop all internal reference
counts as well for nodes which are going to be removed from the
sequence.
2011-09-11 12:13:54 +02:00
Kristian Rietveld
9ed76387fa gtktreemodelfilter: fix corner case in rows-reordered handling
If the level to be reordered did not contain an elt with offset == 0
(for example if that node was hidden), the first reference was not
correctly transferred.

A unit test for this has been added in a previous commit.
2011-09-11 12:13:54 +02:00
Kristian Rietveld
449c4bc362 Unit test a corner case of gtk_tree_model_filter_rows_reordered() 2011-09-11 12:13:54 +02:00
Jorge González
94a9170808 Updated Spanish translation 2011-09-11 10:29:52 +02:00
Benjamin Otte
3d0a2d50f0 filechooser: Fix compile warning 2011-09-10 16:11:27 +02:00
Piotr Drąg
0ce142e58d Updated Polish translation 2011-09-10 11:56:07 +02:00
Daniel Mustieles
d09a12e0d6 Updated Spanish translation 2011-09-10 10:45:21 +02:00
Matthias Clasen
f9379adca2 GtkAppChooserButton: Add a way to include the default app
This is necessary to use an app chooser button for selecting
default apps in the control center. Also, beef up the docs
for this widget family.

https://bugzilla.gnome.org/show_bug.cgi?id=642706
2011-09-10 01:42:07 -04:00
Cosimo Cecchi
e97ed4374f combobox: implement get_path_for_child() for GtkComboBox
This way we can adjust borders and rounded corners from the theme when
displaying the widget children flipped for RTL locales.

https://bugzilla.gnome.org/show_bug.cgi?id=658507
2011-09-09 11:46:00 -04:00
Dan Winship
e028a5c090 gtkcssprovider: fix a crash in gtk_css_provider_parsing_error
"info" was being declared in two different scopes, and the one that
was freed wasn't the one that was set.
2011-09-09 09:37:44 -04:00
John Ralls
b71f28037f Bug 617583 - Dead accents keys don't work in GTK+ applications on OSX
Handle dead keys in special_ucs_table and have them converted by
UCKeyTranslate(), so all dead key combinations can be entered.
Later, this should be handled in the input method, just as it's
done for X11/Win32.
2011-09-09 10:56:49 +02:00
Dan Winship
228f30e055 gtkmodules: don't append NULL to module list for blacklisted module
fixes a crash when removing "gail" from gtksettings-specified modules
2011-09-08 16:52:00 -04:00
Rudolfs Mazurs
3a1b2871b8 Updated Latvian translation. 2011-09-08 16:30:07 -04:00
Bruno Brouard
e07d7f01a8 Updated French translation 2011-09-08 21:47:09 +02:00
Luca Ferretti
4e86b3f617 l10n: Updated Italian translation 2011-09-08 21:40:50 +02:00
Piotr Drąg
81c3558ea1 Updated Polish translation 2011-09-08 20:47:52 +02:00
A S Alam
8fd73a935d update PunjabiTranslation 2011-09-08 20:37:46 +05:30
Kristian Rietveld
b53a66b7e2 Add unit tests to check hierarchies of deleted nodes are unreffed properly 2011-09-07 22:25:29 +02:00
Kristian Rietveld
d116261e1f Update filter model ref count tests to reflect changes in rules 2011-09-07 22:25:29 +02:00
Kristian Rietveld
022327c408 gtktreemodelfilter: child levels of the root level must remain cached
This is due to the special handling for filter functions that depend
on child level state.  If the parent level of a level is the root level,
the level cannot be removed from the cache.  Any change in this level
can cause its parent in the root level to become visible again.
2011-09-07 22:25:29 +02:00
Kristian Rietveld
ae2b2e7cfc gtktreemodelfilter: rework gtk_tree_model_filter_remove_elt_from_level
The most important change is that the function now properly releases
any external ref count and propagates these changes to the child model.
If a node is removed due to a filtering action, we now properly release
all external reference counts for its hierarchy of child nodes.

Apart from that, the function has been restructured to remove code
duplication.

Finally, there is still some doubt whether there are more calls to
gtk_tree_model_filter_free_level() which need unref_external set to TRUE.
2011-09-07 22:25:29 +02:00
Kristian Rietveld
767b2e2604 gtktreemodelfilter: add a debug define and more assertions
Should be helpful when debugging this thing.  Perhaps this needs to
be properly integrated in G_DEBUG/GTK_DEBUG, but currently I do not see
the need to.
2011-09-07 22:25:29 +02:00
Kristian Rietveld
f317dd3831 gtktreemodelfilter: make rule used for level caching consistent
There was still a discrepancy between the comments and the code about when
exactly a level was to be removed.  The rule is now set on that for a level
to be removed its zero_ref_count as well as the zero_ref_count of its
parent has to be zero.
2011-09-07 22:25:29 +02:00
Kristian Rietveld
0bedb51b33 Add unit test for ref tranfer in rows-reordered with filtered rows 2011-09-07 22:25:29 +02:00
Behdad Esfahbod
057a50d58e Bug 658398 - Use of uninitialized variable reported by Valgrind
Fix it.
2011-09-07 16:19:44 -04:00
Bruce Cowan
f5aba05c93 Updated British English translation 2011-09-07 17:22:13 +01:00
Cosimo Cecchi
8b9f0402b0 iconview: fix a typo while removing the a11y adjustment weak ref
The code sets old_adj_ptr to the location containing the old weak ref,
but then wants to remove a weak ref from &view->old_hadj, causing warnings
when disposing the widget.
2011-09-06 19:09:19 -04:00
Ihar Hrachyshka
aeba575e1c Updated Belarusian translation. 2011-09-07 01:33:36 +03:00
Kjartan Maraas
e635f9d98e Added Norwegian bokmål translation 2011-09-06 21:51:52 +02:00
Matej Urbančič
2cc409cb65 Updated Slovenian translation 2011-09-06 21:49:11 +02:00
Cosimo Cecchi
39f0a60792 themingengine: remove unused variable 2011-09-06 15:01:09 -04:00
Carlos Garnacho
79ff1b669c x11: Don't create GdkDevices for disabled devices
Fixes bug #658379 - Disabled devices still added to list on startup,
spotted by Bastien Nocera. Do not create GdkDevices for disabled
devices on device manager construction, leading to a confusing initial
state.
2011-09-06 20:04:08 +02:00
Andika Triwidada
f714f01b45 Updated Indonesian translation of po-properties 2011-09-06 17:15:38 +07:00
Andika Triwidada
4fafdd98b3 Updated Indonesian translation 2011-09-06 17:10:51 +07:00
Bruno Brouard
0832bad2b6 Updated French translation 2011-09-06 10:57:40 +02:00
Arash Mousavi
bf4558b21f Updated Persian translation 2011-09-06 11:37:50 +04:30
Jorge González
299a97c8ce Updated Spanish translation 2011-09-06 06:07:31 +02:00
Duarte Loreto
684ffdd234 Updated Portuguese translation 2011-09-05 22:52:52 +01:00
Duarte Loreto
7624a08fef Updated Portuguese translation 2011-09-05 22:43:22 +01:00
Matthias Clasen
c1af0ceafc Post-release version bump 2011-09-05 17:07:35 -04:00
Matthias Clasen
6dd3432ecb 3.1.18 2011-09-05 16:43:06 -04:00
Matthias Clasen
c22feaab35 Some more colord configury cleanups
Don't error out when --enable-color=auto, but no colord is found.
Plus various cleanups to the output.
2011-09-05 16:42:59 -04:00
Matthias Clasen
8183d328e8 More NEWS 2011-09-05 16:38:08 -04:00
Matthias Clasen
bd92a61a5f Fix output of pickers.ui a11y test 2011-09-05 16:36:56 -04:00
Matthias Clasen
50c50448bf Updates 2011-09-05 16:36:55 -04:00
Fran Dieguez
27e2ae0388 Updated galician translations 2011-09-05 22:00:07 +02:00
Federico Mena Quintero
c6aca6bb60 Merge branch 'bgo593793-filechooser-recent-folders-master' 2011-09-05 14:36:23 -05:00
Jorge González
63013ee2aa Updated Spanish translation 2011-09-05 20:40:37 +02:00
Federico Mena Quintero
2476d35142 Menu item to visit the selected files in recent-files mode
This will take you to the file's folder and select the file in question.
The menu item is only available in Recently-used and Search modes, so that
you can go from files in them to the 'normal' browsing mode.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-09-05 13:31:57 -05:00
Federico Mena Quintero
668287b940 Factor out functions to create contextual menu items for the file list
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-09-05 13:22:01 -05:00
Benjamin Otte
c21b6f4705 reftests: Disable border-radius tests for shadow
We get rendering artifacts that make tests fail. Not good.
The code is only commented out so far, so it should be trivial to
reenable if someone wants to. (Or this commit could just be reverted.)
2011-09-05 18:56:23 +02:00
Benjamin Otte
d717a2dcfc grid: Swap wrong spacing properties
row-spacing behaved like column-spacing should have and vice versa.

Also update tests that erroneously checked this behavior.

Thanks to Joanmarie Diggs for finding this.
2011-09-05 18:56:23 +02:00
Benjamin Otte
b314f03bf4 radiobutton: Remove redundant call
The call is done by GtkButton already, no need to override it.
2011-09-05 18:56:23 +02:00
Benjamin Otte
7edf79de26 checkbutton: Remove redundant call
The call is done by GtkButton already, no need to override it.
2011-09-05 18:56:23 +02:00
Cosimo Cecchi
4ea01b2cf3 GtkPathBar: Implement get_path_for_child
This will allow nice theming of the path bar.

https://bugzilla.gnome.org/show_bug.cgi?id=658077
2011-09-05 12:14:09 -04:00
Matthias Clasen
f1476f31fe a11y: Fix up listener registration minimally
For god-knows-what reason, at-spi is trying various formats
of strings when registering listeners, triggering g_warnings()
from gailutil code. Stop doing that.

Also, don't leak temporary string arrays that are a side-effect
of passing parameters around as formatted strings.

https://bugzilla.gnome.org/show_bug.cgi?id=658168
2011-09-05 11:56:54 -04:00
Matthias Clasen
a51a31466d Make the gail blacklisting more quiet
Don't mention blacklisted modules at all if they are not found.
2011-09-05 11:44:47 -04:00
Matthias Clasen
1bede5c3fb GtkFontChooser: mark 'no matches' string for translation 2011-09-05 11:19:30 -04:00
Matthias Clasen
5445b3d7ec GtkToolbar: Move child removal to dispose
Doing it in finalize is too late and can cause various problems
in ::parent-set signal handlers.

https://bugzilla.gnome.org/show_bug.cgi?id=658200
2011-09-05 11:09:16 -04:00
Matthias Clasen
6faba61db1 Some GtkAboutDialog doc additions 2011-09-05 00:00:24 -04:00
Matthias Clasen
3a1ce87c7e Fix typos in gtk_tree_view_set_reorderable docs
As pointed out in bug 530253.
2011-09-04 23:52:36 -04:00
Matthias Clasen
2e39400e18 Clean up the docs of GTK_SELECTION_MULTIPLE
As requested in bug 566202.
2011-09-04 23:46:51 -04:00
Matthias Clasen
eaed6d1912 Improve gtk_tree_view_set_drag_dest_row docs
As requested in bug 581435.
2011-09-04 23:42:42 -04:00
Matthias Clasen
21275a1636 Correct the documentation of gtk_render_arrow() x,y arguments
As pointed out in bug 655631, these are the origin, not
the center of the area.
2011-09-04 23:09:57 -04:00
Matthias Clasen
f601994eff GtkFontChooser: escape markup where required
Since we use markup in the list, we need to escape the font name
and preview text pieces that we embed there.
2011-09-04 17:17:07 -04:00
Matthias Clasen
53edb2a4fb Test non-xml-clean preview text
This shows that we fail to escape markup somewhere.
2011-09-04 17:16:29 -04:00
Ihar Hrachyshka
8b3ff3919d Updated Belarusian translation. 2011-09-04 19:06:49 +03:00
Aurimas Černius
a8f62fe9af Updated Lithuanian translation 2011-09-04 18:41:49 +03:00
Aurimas Černius
ed3c5075dd Updated Lithuanian translation 2011-09-04 18:35:45 +03:00
Kristjan SCHMIDT
f2f781799a Updated Esperanto translation 2011-09-04 13:18:11 +02:00
Matthias Clasen
41dbd20d56 GtkAssistant: Fix label alignment
Make page titles left-aligned again. Changing from misc alignment
to GtkWidget::halign here was a mistake. We can't do that for labels
in a size group, as long as labels still pay attention to misc
alignment.

https://bugzilla.gnome.org/show_bug.cgi?id=658008
2011-09-04 00:42:31 -04:00
Matthias Clasen
dc898e3f84 GtkLabel: make patterns work a little better
When a pattern has been set, we must not throw away
the attributes that contain it.

https://bugzilla.gnome.org/show_bug.cgi?id=658111
2011-09-04 00:01:37 -04:00
Changwoo Ryu
80fbbc38e3 Update Korean translation 2011-09-03 21:58:35 +09:00
Matthias Clasen
be152f9b61 GtkPlug: preserve map/unmap invariants 2011-09-02 21:40:42 -04:00
Matthias Clasen
ef4690d511 GtkGrid: make attaching more flexible
Allow to attach children at either end of row/column 0.
Proposed by Alex Larsson.

https://bugzilla.gnome.org/show_bug.cgi?id=657793
2011-09-02 20:07:19 -04:00
Cosimo Cecchi
f5e758bd60 themingengine: remove xthickness FIXME from gtk_render_line() code
The gtk_render_line() code has a FIXME (coming from the 2.x migration I
suppose) about using xthickness, and it actually hardcodes two lines of
different color instead of drawing a single one.
Since we don't support xthickness anymore, make gtk_render_line() do
what it says, i.e. just draw an 1px line colored with the current
color.

https://bugzilla.gnome.org/show_bug.cgi?id=657963
2011-09-02 15:11:53 -04:00
Cosimo Cecchi
640f06928f treeview: add GTK_STYLE_CLASS_SEPARATOR for tree view separators
https://bugzilla.gnome.org/show_bug.cgi?id=657985
2011-09-02 15:11:15 -04:00
Eitan Isaacson
6eb777a8af Change gtk_css_provider_propagate_error's signature.
Update to new parsing-error signal.

https://bugzilla.gnome.org/show_bug.cgi?id=657882
2011-09-02 09:19:18 -07:00
Og B. Maciel
0ee9a4790a Updated Brazilian Portuguese translation. 2011-09-02 11:29:59 -04:00
Matthias Clasen
22d046d7fe Add a note about placeholder text use
Explain how this is really not such a great feature...
2011-09-02 00:35:38 -04:00
Matthias Clasen
1204a850f3 Formatting cleanups
While we normally try to avoid whitespace fixes, the gtk-demo
code is shown as exemplary, so it should be in good shape,
formatting-wise.
2011-09-01 23:56:58 -04:00
Matthias Clasen
c5cd4174c3 gtk-demo: Drop uses of GtkAlignment 2011-09-01 23:56:57 -04:00
Richard Hughes
ee6b79becf Fix the configure script to actually define HAVE_COLORD when colord is used 2011-09-01 15:34:57 +01:00
Matthias Clasen
a6899f2a9d gtk-demo: replace uses of GtkTable by GtkGrid 2011-08-31 13:31:34 -04:00
Matthias Clasen
ce58d8887f gtk-demo: trivial improvement
Set activates-default in the assistant demo where it makes sense.
2011-08-31 13:31:34 -04:00
Chun-wei Fan
8cd9e34ee3 Update README.win32 and Visual C++ Readme.txt's
-Tell people about the GNOME Live! page which gives a more detailed
 outline on building the GTK+ stack with Visual C++
-Update README.win32 as GAIL is now a standard part built into GTK+
 for its a11y functions, and GAIL-Util is now built with the project
 files too.
-Tell people about the VS2010 support that has been available for a
 while
2011-08-31 14:28:47 +08:00
Javier Jardón
43e241b235 gtk+.doap: Add gtk+ to "platform" category 2011-08-30 22:47:33 +01:00
Javier Jardón
69de896589 Add more compilation warnings 2011-08-30 22:47:33 +01:00
Javier Jardón
d780dde9e1 gtk/Makefile.am: Remove duplicate AM_CPPFLAGS 2011-08-30 22:47:33 +01:00
Matthias Clasen
553628efa1 post-release version bump 2011-08-30 11:48:50 -04:00
Matthias Clasen
b57180a684 3.1.16 2011-08-30 11:28:53 -04:00
Matthias Clasen
3ff5a82e46 Clean up stock-icons
We copy them all in srcdir != builddir builds, so just
nuke the entire directory in that case.
2011-08-30 11:28:53 -04:00
Matthias Clasen
a233022934 Disable underallocation warnings in non-debug builds
It doesn't look like we have much traction of actually fixing
these, and there is very real cost to not being able to distcheck.
2011-08-30 11:28:52 -04:00
Matthias Clasen
53602c400d Disable an incomplete test that does not work
Testing focus changes in this way has no chance of working
until we remove all the idle handlers from gail.
2011-08-30 11:28:52 -04:00
Murray Cumming
342c64c2f2 GtkToolShell: Move vfunc default results to default implementations.
Otherwise the default values are only used if no vfunc is set,
making that default unavailable to vfunc implementations as a fallback,
and unavailable to language bindings (such as gtkmm) that always
have a vfunc implementation, even if that often only tries to call
the base vfunc implemntation.

This was making gtkmm's ToolPalette's (and probably ToolBar's)
items look like buttons instead of being flat.

https://bugzilla.gnome.org/show_bug.cgi?id=656223
2011-08-30 15:28:06 +02:00
Matthias Clasen
9379a48e22 Add headers to treemodel test sources
...otherwise they don't make it into the release tarballs.

https://bugzilla.gnome.org/show_bug.cgi?id=657653
2011-08-29 20:34:46 -04:00
Matthias Clasen
8009a7f0b1 Add a 3.2 index to gdk docs 2011-08-29 13:16:14 -04:00
Matthias Clasen
e0ab377f9b Post-release version bump 2011-08-29 13:09:21 -04:00
Matthias Clasen
50101fba11 3.1.14 2011-08-29 13:08:47 -04:00
Matthias Clasen
925ed7c70f Don't unref floating menuitems
With recent fixes, GTK+ no longer sinks menu items automatically,
so we have to do it explicitly here.
2011-08-29 11:57:39 -04:00
Alejandro Piñeiro
4244349600 a11y: Don't manage window events as a exception
https://bugzilla.gnome.org/show_bug.cgi?id=657260
2011-08-29 10:57:21 -04:00
Alejandro Piñeiro
08bf2e0463 a11y: Use AtkWindow on GtkWindowAccessible
GtkWindowAccessible doesn't require to define window related
signals. They are included on AtkWindow
2011-08-29 10:57:14 -04:00
Matthias Clasen
1090eba9a8 a11y: don't return random numbers
Return 0 for the image size if we don't have a pixbuf to measure.
2011-08-29 10:50:01 -04:00
Matthias Clasen
006d46362c Adapt a11y dump output
Some of the recent changes need to be reflected in the a11y
dumps.
2011-08-29 10:36:44 -04:00
Matthias Clasen
84504014aa Fix exported symbols 2011-08-29 10:24:17 -04:00
Matthias Clasen
3fa5813ea3 testappchooser: handle 'no app selected' gracefully
The test was assuming that it always gets an app info back,
when in reality it might get NULL back.
2011-08-28 23:50:50 -04:00
Matthias Clasen
18dba17f0b GtkAppChooserDialog: handle sensitivity of 'Select' better
When the dialog comes up without a selected item, make 'Select'
insensitive. Also, don't allow to unselect an item without
selecting a different one.
2011-08-28 23:49:41 -04:00
Matthias Clasen
6d797d5356 GtkAppChooser: Deal with 'no app found' gracefully
Several functions inside GtkAppChooserDialog were not handling
the situation that app_info might be NULL after the user clicked
'Select'.

https://bugzilla.gnome.org/show_bug.cgi?id=651827
2011-08-28 22:46:46 -04:00
Matthias Clasen
676316bbd3 Avoid warnings when widgets are not created yet
This widget is created on-demand, so we can not unconditionally
set its sensitivity in some other place.
2011-08-28 22:30:24 -04:00
Matthias Clasen
f64647077f Add an accessor for grid children
This addresses concerns in bug 634136.
2011-08-28 21:20:53 -04:00
Matthias Clasen
b2188f5dc1 Trivial: include cleanups 2011-08-28 20:46:11 -04:00
Matthias Clasen
76c6f49805 Silence the build a bit more 2011-08-28 20:38:28 -04:00
Diego Celix
ca317c6798 tests-prop-editor:gtk_misc_set_alignment replacing
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
tests/prop-editor.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:34:35 -04:00
Diego Celix
173cc862a1 testgtk: gtk_misc_set_alignment replacing
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
tests/testgtk.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:17:04 -04:00
Diego Celix
fd1fabf5c3 testcalendar: gtk_misc_set_alignment replacing
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
tests/testcalendar.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:17:03 -04:00
Diego Celix
bd69e6a6cd demo-ui_manager: gtk_misc_set_alignment replacing
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
demos/gtk-demo/ui_manager.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:17:02 -04:00
Diego Celix
464fa4715f demo-sizegroup: gtk_misc_set_alignment replacing
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
demos/gtk-demo/sizegroup.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:17:00 -04:00
Diego Celix
9b31aff56c demo-pickers: gtk_misc_set_alignment replacing
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
demos/gtk-demo/pickers.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:16:59 -04:00
Diego Celix
a3719d3033 demo-changedisplay:gtk_misc_set_alignment replace
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
demos/gtk-demo/changedisplay.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:16:57 -04:00
Diego Celix
372a907e97 gtkappchooserdialog: gtk_misc_set_alignment
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
gtk/gtkappchooserdialog.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:16:56 -04:00
Diego Celix
9dfff27c42 gtkaboutdialog: gtk_misc_set_alignment replacing
Replacing the function gtk_misc_set_alignment () with
gtk_widget_set_halign () and gtk_widget_set_valign () in
gtk/gtkaboutdialog.c

https://bugzilla.gnome.org/show_bug.cgi?id=650762
2011-08-28 20:16:54 -04:00
Matthias Clasen
f060343a82 Explicitly link gdk and gtk against libm
We used to get an implicit -lm from gdk-pixbuf, but that has
recently been changed to not inject extraneous libraries into
link lines, so we have to do it ourselves now. This is more
correct, anyway.
2011-08-28 20:03:56 -04:00
Cosimo Cecchi
f7c188c019 API: add accessors for GdkEvent fields
Add accessors for the following fields: button, keyval, keycode, scroll
direction, click count.

https://bugzilla.gnome.org/show_bug.cgi?id=657384
2011-08-28 19:50:34 -04:00
Matthias Clasen
5cc1318279 GtkTrayIconX11: Some more refactoring
I like my refactoring better...
2011-08-28 14:54:14 -04:00
Benjamin Otte
dca3ea896e trayicon-x11: Refactor code a bit
Should make it more obvious what the code actually does.
2011-08-28 20:20:35 +02:00
Vincent Bernat
6754614ac1 trayicon-x11: Fix warnings when visual is not available.
This fixes a regression introduced in commit
b1a1685a33eca16979e63d79915395af0b36. gdk_visual_get_*_pixel_details()
should not be called with a NULL visual.

https://bugzilla.gnome.org/show_bug.cgi?id=649588
2011-08-28 20:20:35 +02:00
Mario Blättermann
64b85e7bd8 [l10n] Updated German translation 2011-08-28 13:40:28 +02:00
Matthias Clasen
6f39855c08 More include cleanups 2011-08-28 01:54:55 -04:00
Matthias Clasen
fd92e7150d More include cleanups 2011-08-28 01:42:10 -04:00
Matthias Clasen
383127cd0b Clean up unneeded includes 2011-08-28 01:40:10 -04:00
Matthias Clasen
227fafb93f GtkPrintUnixDialog: Replace GtkTable by GtkGrid 2011-08-28 01:34:17 -04:00
Matthias Clasen
5b97a58230 GtkFileChooserDefault: Replace GtkTable by GtkGrid 2011-08-28 00:47:24 -04:00
Matthias Clasen
b043a0a610 GtkMountOperation: Replace GtkTable by GtkGrid 2011-08-28 00:39:44 -04:00
Matthias Clasen
280f34ec61 GtkPageSetupUnixDialog: replace GtkTable by GtkGrid 2011-08-28 00:35:51 -04:00
Matthias Clasen
1ca773c2d7 GtkColorSel: replace GtkTable by GtkGrid 2011-08-28 00:20:21 -04:00
Matthias Clasen
4b394fc847 Fix the build 2011-08-27 17:22:37 -04:00
Matthias Clasen
0039418001 GtkToolbar: partial fix for toolbar editing
When using an editable toolbar in evince, we can end up
in gtk_toolbar_get_visible() position with item being the
highlight_tool_item, but not one of the regular children.
So, handle that.
2011-08-27 11:45:01 -04:00
Matthias Clasen
c8e8cdaaf4 Make gtk_status_icon_set_name() work reliably 2011-08-27 01:26:48 -04:00
Matthias Clasen
8f3e43326b Silence a compiler warning 2011-08-27 01:25:39 -04:00
Matthias Clasen
f7dbdba267 Revert "GtkColorButton: Don't forget to close a cairo context"
This reverts commit 144e4af8bc.
2011-08-27 01:01:21 -04:00
Chao-Hsiung Liao
2823c0f485 Updated Traditional Chinese translation(Hong Kong and Taiwan) 2011-08-27 10:35:54 +08:00
Piotr Drąg
b042cabc5e Updated POTFILES.skip 2011-08-27 04:21:11 +02:00
Benjamin Otte
651723b4d4 reftests: Add a test for the recent notebook fix 2011-08-27 02:47:52 +02:00
Benjamin Otte
e11e51c252 notebook: Fix child property setters causing underallocations
Don't randomly allocate around, queue resizes instead.
2011-08-27 02:47:51 +02:00
Federico Mena Quintero
52711beba5 Merge branch 'bgo593793-filechooser-recent-folders-master' 2011-08-26 12:44:40 -05:00
Federico Mena Quintero
a265fb763b bgo#657186 - Sort the recent-files list in newest-to-oldest order
Otherwise it's not very useful... :)

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-08-26 12:44:24 -05:00
Federico Mena Quintero
3bd037b7d9 Load and populate the recent-items in a single pass
There's no real asynchronicity going on, anyway, so let's do both within
a single iteration of the idle handler.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-08-26 12:44:22 -05:00
Federico Mena Quintero
e9c0faba42 Don't sort the recent-items by hand
The mtime from GtkRecentManager may not the same as the file's actual
mtime, so the final result could appear unsorted to the user.  Instead,
we will let the view do the sorting.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-08-26 12:44:21 -05:00
Tristan Van Berkom
d7696bd25f Avoid dereferencing NULL pointer in gtk_label_drag_data_get()
It's possible the GtkLabel receives drag'n'drop related signals
if it was setup to receive them by a container or other external
code, just avoid dereferencing priv->select_info in this case.
2011-08-26 19:02:36 +02:00
Michael Terry
431227e1af tests: Add test for non-nullterminated gtk_css_provider_load_data()
https://bugzilla.gnome.org/show_bug.cgi?id=657359
2011-08-26 16:26:28 +02:00
Benjamin Otte
71c3f7e93d styleproperty: Improve error message
We do dsupport that feature still and don't want to scare people into
thinking everything broke.
2011-08-26 16:26:28 +02:00
Benjamin Otte
26e9d07718 API: cssprovider: Change parsing-error signal
Instead of path, line and position, emit the section the error happened
in. This has a lot more information to consume.
2011-08-26 16:26:28 +02:00
Benjamin Otte
8d6b560ff3 cssparser: Fix cases where we could overrun the terminating 0 2011-08-26 16:26:28 +02:00
Benjamin Otte
62d231aeff cssparser: Make lines and positions 0-indexed 2011-08-26 16:26:28 +02:00
Benjamin Otte
0d1b73f857 cssprovider: Store sections with parsed values
Also create a separate section for values to associate the values with.
Finally, use this section information when delayed-parsing a widget
style property.
2011-08-26 16:26:27 +02:00
Benjamin Otte
ebf0b6ee4d cssprovider: Handle non-NULL-terminated data
Do a dumb copy if that happens.
2011-08-26 16:26:27 +02:00
Benjamin Otte
d985b95ef9 cssprovider: Keep only the curent section while parsing
We don't need a list of sections, the section can give us the parent
when we need it (d'oh).
2011-08-26 16:26:27 +02:00
Benjamin Otte
19c44967cb cssprovider: Remove dead code
The code isn't used anymore since the introduction of rulesets.
2011-08-26 16:26:27 +02:00
Benjamin Otte
00d14e3515 API: css: Add GtkCssSection
This struct keeps track of an area of text in a CSS file and uses it
when specifying information. Also, the cssprovider keeps track of
sections when parsing a file.
2011-08-26 16:26:27 +02:00
Colin Walters
c8fdd5e847 Squash two compilation warnings about possibly-uninitialzed 2011-08-25 14:47:21 -04:00
Yuri Myasoedov
97aec9ae8e Updated Russian translation 2011-08-25 22:05:07 +04:00
Ryan Lortie
05aeaeef9e Signalify (already existing) GtkMenuShell.insert()
gtk_menu_shell_insert() is a virtual function that was being directly
invoked from the class vtable.

Turn it into a proper signal and emit it in the usual way.

https://bugzilla.gnome.org/show_bug.cgi?id=656565
2011-08-25 09:48:12 -04:00
Javier Jardón
8dae05deaf gtk+.doap: Add some more info 2011-08-25 12:31:38 +01:00
Fran Dieguez
23f2aab4d6 Updated Galician translations 2011-08-24 21:03:09 +02:00
Daniel Mustieles
3415b6c553 Updated Spanish translation 2011-08-24 19:58:42 +02:00
Daniel Mustieles
83af296cb2 Updated Spanish translation 2011-08-24 19:58:14 +02:00
Kjartan Maraas
aa493ff8db Updated Norwegian bokmål translation 2011-08-24 18:54:00 +02:00
Chun-wei Fan
7cf479135d Update gtk/Makefile.am
Distribute fallback implementation source file for rint()/round()
2011-08-24 23:55:44 +08:00
Matthias Clasen
4a857ac023 Use a weak ref in GtkAccelLabel
GtkAccelLabel was holding a strong reference on its parent,
which could, depending on the circumstances, lead to leaks.

https://bugzilla.gnome.org/show_bug.cgi?id=344858
2011-08-24 08:16:03 -04:00
Matthias Clasen
32eb38073e Trivial: whitespace fixes 2011-08-24 07:58:21 -04:00
Matthias Clasen
c672066fbc Trivial: Silence a compiler warning 2011-08-24 07:56:13 -04:00
Matthias Clasen
f136ee9b57 Trivial: Silence a compiler warning 2011-08-24 07:54:58 -04:00
Matthias Clasen
144e4af8bc GtkColorButton: Don't forget to close a cairo context
Patch by Jerome Lambourg, bug 655392.
2011-08-24 07:46:35 -04:00
Daniel Nylander
311d782963 Updated Swedish translation 2011-08-24 09:22:23 +02:00
Matthias Clasen
5c09061e0f GtkFontChooserDialog: Select when a list item is activated
This is the expected behavior.
2011-08-24 00:49:59 -04:00
Matthias Clasen
f7bf35052e GtkFontChooser: Add a ::font-activated signal
This signal gets emitted when a font in the list is activated.
2011-08-24 00:49:16 -04:00
Matthias Clasen
ca0c7c1649 GtkAppChooserDialog: remove an unused variable 2011-08-24 00:32:20 -04:00
Matthias Clasen
80b94156ed GtkAppChooserDialog: Simplify the construction
We do the same in other places.
2011-08-24 00:11:32 -04:00
Matthias Clasen
14dc863da5 GtkAppChooserButton: Make activating rows work as expected
When a row is activated in the 'Other...' dialog, we have
to make sure the dialog goes away.
2011-08-24 00:10:34 -04:00
Matthias Clasen
c83db6cdf0 GtkSwitch: Return FALSE from the button press handler
This makes the behavior identical to other widgets which
handle button presses, and it avoids problems when placing
switches into a windows main toolbar.

https://bugzilla.gnome.org/show_bug.cgi?id=656986
2011-08-23 23:29:19 -04:00
Arx Cruz
c9023cadbf [filechooser] bgo#349502: Context menu option to copy selected files to the clipboard 2011-08-23 17:10:03 -05:00
Piotr Drąg
c4ad589fd5 Updated POTFILES.in 2011-08-23 22:28:43 +02:00
Gabor Kelemen
71be77c399 Add tests/*ui to POTFILES.skip 2011-08-23 22:18:37 +02:00
Gabor Kelemen
2807d69db3 There is no need for [type: ...] tags in POTFILES.skip 2011-08-23 22:16:09 +02:00
Daniel Mustieles
76beaf12ef Fixed POTFILES.in (error in D-L) 2011-08-23 22:04:04 +02:00
Daniel Mustieles
512ef3e2ba Fixed POTFILES.in (error in D-L) 2011-08-23 21:56:15 +02:00
Daniel Mustieles
b9b324077f Fixed POTFILES.in (error in D-L) 2011-08-23 21:55:04 +02:00
Daniel Mustieles
8a7d5ce5e1 Fixed bug #657146 2011-08-23 21:52:16 +02:00
Piotr Drąg
cfc765dc2a Updated POTFILES.in 2011-08-23 19:54:06 +02:00
Мирослав Николић
be512c9422 Updated Serbian translation 2011-08-23 19:15:48 +02:00
Matthias Clasen
3825a098c8 Change 'Ok' to 'Select' in the color chooser dialog
We have meaningful labels for the Ok buttons in all other choosers,
so just use the same string we use in the app chooser and the
font chooser.

Also move the mnemonic from s to a in 'Saturation', to avoid a
mnemonic conflict. String change !

https://bugzilla.gnome.org/show_bug.cgi?id=657006
2011-08-23 10:16:34 -04:00
Matthias Clasen
5c5cdf23a8 Add a mnemonic to the 'Select' button
This makes the string the same as in the app chooser dialog.
2011-08-23 10:08:33 -04:00
Sweta Kothari
ef159bc35c Updated Gujarati Translations 2011-08-23 14:46:57 +05:30
Andika Triwidada
9186f061a2 Updated Indonesian translation 2011-08-23 05:32:59 +07:00
Daniel Nicoara
99f489b5ef wayland: Acquire cairo device during operations that need the GL context 2011-08-22 16:32:06 -04:00
Kristian Høgsberg
005894eccb wayland: We need to require egl as well 2011-08-22 16:32:06 -04:00
Kristian Rietveld
a91868496a Fix typo in doc comment 2011-08-22 21:30:35 +02:00
Kristian Rietveld
b50375abf4 Add forgotten calls to signal_monitor_assert_is_empty() 2011-08-22 21:30:35 +02:00
Kristian Rietveld
d63015e627 Fix some memory leaks in treemodel unit tests 2011-08-22 21:30:35 +02:00
Kristian Rietveld
b31c3f1c1f treemodelsort: eliminate unread variable assigments
Courtesy of scan-build/clang.
2011-08-22 21:30:35 +02:00
Kristian Rietveld
584ff7c29a treemodelfilter: eliminate unread variable assigments
Courtesy of scan-build/clang.
2011-08-22 21:30:35 +02:00
Kristian Rietveld
36f712f272 Add some notes on how filter model testing can be made (even) more thorough 2011-08-22 21:30:34 +02:00
Kristian Rietveld
04885f1c29 Update filtermodel ref count unit tests to new cache depth 2011-08-22 21:30:34 +02:00
Kristian Rietveld
089edcf765 Fix bad typo in gtk_tree_model_filter_build_level() ... 2011-08-22 21:30:34 +02:00
Kristian Rietveld
6cd134d39e gtktreemodelfilter: only maintain cache at 1 level depth instead of 2 2011-08-22 21:30:34 +02:00
Kristian Rietveld
aa9151a6ee Extend public and internal documentation about GtkTreeModelFilter 2011-08-22 21:30:34 +02:00
Kristian Rietveld
52faf1f984 Extend documentation about GtkTreeModelSort internals 2011-08-22 21:30:34 +02:00
Kristian Rietveld
85d4a5abc7 GtkTreeModel: add more detailed documentation on reference counting 2011-08-22 21:30:34 +02:00
Kristian Rietveld
60d031e311 Replace GArray with GSequence in GtkTreeModelSort
This is done in the same way as GArray was replaced with GSequence in
GtkTreeModelFilter, in a patch done by Xavier Claessens.

All sorting code has been reworked to use the GSequence sorting
and insert sort functions, instead of doing a lot on our own.
2011-08-22 21:30:34 +02:00
Kristian Rietveld
ad0f54b87b Add more unit tests for GtkTreeModelSort
To test ref counting during rows-reordered and the new_order arrays supplied
with rows-reordered signals.
2011-08-22 21:30:34 +02:00
Kristian Rietveld
9ef07cb0f3 Move SignalMonitor to treemodel.[ch] so it can be used by other tests 2011-08-22 21:30:34 +02:00
Kristian Rietveld
97b1f34868 Revert usage of parent_elt_index back to parent_elt pointers
Based on earlier patch for GtkTreeModelFilter by Xavier Claessens.
2011-08-22 21:30:33 +02:00
Xavier Claessens
bee3d5f143 Replace GArray with GSequence in GtkTreeModelFilter
Significantly improves performance when e.g. removing (filtering) a lot
of rows from the filter model.  Fixes bug 616871.

This commit includes changes by Kristian Rietveld to make the patch apply
on top of the treemodel-fix branch and pass all newly written unit tests.
2011-08-22 21:30:33 +02:00
Xavier Claessens
eb594da2f2 Revert usage of parent_elt_index back to parent_elt pointers
This was introduced in commit a59c39f370.
The revert is part of bug 616871.  Adaption to recent GtkTreeModelFilter
changes by Kristian Rietveld.
2011-08-22 21:30:33 +02:00
Kristian Rietveld
510d84f682 Do not emit rows-reordered for levels with no visible rows 2011-08-22 21:30:33 +02:00
Kristian Rietveld
21d7eca12a Remove left-over dump call 2011-08-22 21:30:33 +02:00
Kristian Rietveld
3b7aed050d Correct ref transfer in GtkTreeModelFilter rows-reordered handling 2011-08-22 21:30:33 +02:00
Kristian Rietveld
30340e521e Test GtkTreeModelFilter's reference transfers 2011-08-22 21:30:33 +02:00
Kristian Rietveld
e321034074 Unit test GtkTreeModelFilter's rows-reordered emissions 2011-08-22 21:30:33 +02:00
Kristian Rietveld
bcc1fd7efd Unit test rows reordered ref count handling in GtkTreeView 2011-08-22 21:30:32 +02:00
Kristian Rietveld
0ee6141cf6 Should validate TreeModelRefCount before the sort and filter model 2011-08-22 21:30:32 +02:00
Kristian Rietveld
9e2fbca594 Add reference counting unit tests for GtkTreeModelFilter 2011-08-22 21:30:32 +02:00
Kristian Rietveld
f42de9e52a Add more "has child" unit tests
This allows for more thorough testing of "has child" filter functions.
We also test a has child filter function with a sort model as
child model, to verify that we receive enough signals to function
properly.
2011-08-22 21:30:32 +02:00
Kristian Rietveld
504d6715c1 Add cleaned up and easier version of unit test for bug 311955 2011-08-22 21:30:32 +02:00
Kristian Rietveld
35e09df282 Check level length in unit test for bug 311955 2011-08-22 21:30:32 +02:00
Kristian Rietveld
59efa6acdd Remove checks for superfluous signals which are not longer emitted 2011-08-22 21:30:32 +02:00
Kristian Rietveld
b161328682 Correct/expand base tests to check emitted signals
The filter model is now more strict about the signals which are emitted,
so the base tests have been expanded to test with both the root level
nodes collapsed and expanded.
2011-08-22 21:30:32 +02:00
Kristian Rietveld
1158ed5795 treemodelrefcount: check_iter(): check if iter is valid 2011-08-22 21:30:32 +02:00
Kristian Rietveld
07d99d26b2 treemodelrefcount: make it possible to assert within check functions 2011-08-22 21:30:32 +02:00
Kristian Rietveld
88dd6372b0 treemodelfilter: rework reference counting
- Before we kept a reference on all nodes in non-root levels.  This has
   been changed, now we keep a reference on the first node of each level.
   If, due to changes in the model, another node becomes the first node in
   the level, the reference is transferred to this new first node.
 - All non-root levels keep a reference on their parent.
 - By making use of the external ref count, the filter model now emits less
   unnecessary signals.
 - GtkTreeModelFilter does support filter functions which decide visibility
   of a given node based on the number of or visibility of children.
   To accomplish this, a child level of a node is cached when its
   parent has an external ref count > 0, because changes to the node might
   affect this parent.
 - An optimization for not building the root level in case the inserted
   node is not visible in gtk_tree_model_filter_row_inserted() has been
   removed.  In this case, we still need to build the root level and
   possibly a child level to monitor for signals which might make
   this row visible.
2011-08-22 21:30:32 +02:00
Kristian Rietveld
2984e22ef0 treemodelfilter: handle another case in check_ancestors
In gtk_tree_model_filter_check_ancestors(), also handle the case when
a node is already in the cache, but invisible, in the root level.
With the upcoming changes to GtkTreeModelFilter's ref counting this
case can occur.
2011-08-22 21:30:32 +02:00
Kristian Rietveld
52de413d43 treemodelfilter: guard for building already existing levels 2011-08-22 21:30:32 +02:00
Kristian Rietveld
dc15124c6f treemodelfilter: Introduce notion of external ref count
We need to distinguish between the ref count objects have on us versus
the ref count we have on our child model.  To keep track of the former,
we introduce the "external ref count" in this commit.  The zero_ref_count
needs to be determined from the external ref count, because objects that
have a ref count on us have say in which levels must be cached and which
can be released.

Before the caching in GtkTreeModelFilter was essentially broken and
levels were never released.  This was caused because the zero_ref_count
was connected to the ref count the filter model had on its child model.
Now that this depends on the external ref count, this is working fine and
as to be expected.
2011-08-22 21:30:32 +02:00
Kristian Rietveld
058a9090c2 treemodelfilter: Move more missions of row-deleted down
The row-deleted signal should be emitted after the internal data
structures have been updated.  In gtk_tree_model_filter_remove_elt_from_level
and gtk_tree_model_filter_virtual_root_deleted the signal was still being
emitted before the updates were carried out.
2011-08-22 21:30:32 +02:00
Kristian Rietveld
cac5d60633 Unit test reference counting in GtkTreeModelSort 2011-08-22 21:30:31 +02:00
Kristian Rietveld
dec7a34047 Avoid unreferencing deleted nodes
Now that we call unref_node in free_level, we have to take care that
free_level may only unref (parent) nodes when these still exist in the
child model.  After row-deleted has been received for a node, its
children may no longer unref this node.
2011-08-22 21:30:31 +02:00
Kristian Rietveld
7677e2d4e3 Bug 611922 - gtk_tree_model_sort_ref_node() is too slow
Referencing a parent node for each referenced node is overdone.  Instead,
we now reference the parent from build_level and unreference in free_level.
Each level keeps a single reference on its immediate parent.  This both
alleviates the performence problems and should perfectly serve the purpose.
2011-08-22 21:30:31 +02:00
Kristian Rietveld
d241323b08 Move asserts to gtktreemodelrefcount.h for other unit tests to use 2011-08-22 21:30:31 +02:00
Kristian Rietveld
bda09159c3 Add generic GtkTreeModel reference counting unit tests 2011-08-22 21:30:31 +02:00
Kristian Rietveld
1cb14a16b7 Add GtkTreeModelRefCount, only to be used in unit tests 2011-08-22 21:30:31 +02:00
Kristian Rietveld
b8752210ba treemodelsort: Remove unnecessary comment
(I am no longer 17 years old and have grown up by now).
2011-08-22 21:30:31 +02:00
Kristian Rietveld
a485334c37 Add some comments to gtk_tree_model_filter_remove_elt_from_level 2011-08-22 21:30:31 +02:00
Kristian Rietveld
e89782742d Fix a couple of memleaks in the filter model tests
(Not all of them yet, need to do the remainder on Linux since valgrind
on Mac OS X is a bit too noisy).
2011-08-22 21:30:31 +02:00
Kristian Rietveld
76cfd8bfac Bug 621076 - GtkTreeModelFilter does not emit all signals in some ...
The bulk of the fix is to walk the chain of ancestors, starting at the
root level, and check if the visibility of any of the ancestors has
changed.  If yes, the necessary signals are emitted so that this change
is propagated properly.  This walk is done after a node has been
inserted, changed or deleted, see function
gtk_tree_model_filter_check_ancestors().

Bug reported, and initial debugging and analysis, by Xavier Claessens.
2011-08-22 21:30:31 +02:00
Kristian Rietveld
c8783d3339 Decrease code duplication in _remove_elt_from_level take two 2011-08-22 21:30:31 +02:00
Kristian Rietveld
df754517dd Decrease amount of code duplication in _remove_elt_from_level 2011-08-22 21:30:31 +02:00
Kristian Rietveld
a9fd6b7f85 Rename gtk_tree_model_filter_remove_node for internal consistency 2011-08-22 21:30:31 +02:00
Kristian Rietveld
7a82045ca8 Change signature of gtk_tree_model_filter_remove_node 2011-08-22 21:30:31 +02:00
Xavier Claessens
22adfc67e5 Add thorough unit test for bug #621076
Minor edits and additions by Kristian Rietveld.
2011-08-22 21:30:30 +02:00
Kristian Rietveld
a172697d47 Corrections to has-child filter tests 2011-08-22 21:30:30 +02:00
Kristian Rietveld
74764f28bc Improve specific_has_child_filter() test to also verify signals 2011-08-22 21:30:30 +02:00
Kristian Rietveld
ebb12d5f06 Improve specific_root_has_child_filter test to also verify signals 2011-08-22 21:30:30 +02:00
Kristian Rietveld
5bd3c52c0f Have a separate category for tests of gtk_tree_model_filter_row_deleted 2011-08-22 21:30:30 +02:00
Kristian Rietveld
3452b0493d Add two unit tests for gtk_tree_model_filter_row_inserted 2011-08-22 21:30:30 +02:00
Kristian Rietveld
4f33f10511 Use g_assert_cmpint instead of g_assert in check_level_length() 2011-08-22 21:30:30 +02:00
Kristian Rietveld
7b3c2751ee Refactor emitting row-inserted for new nodes to a common code path
Suggested by Xavier Claessens / bug 621076.
2011-08-22 21:30:30 +02:00
Kristian Rietveld
bcb00d9a43 Fix comment 2011-08-22 21:30:30 +02:00
Kristian Rietveld
f064d07bda Factor out find_elt_with_offset
Suggested by Xavier Claessens / bug 621076.
2011-08-22 21:30:30 +02:00
Kristian Rietveld
60f3f92e95 Refactor to a common code path for inserts of nodes in levels
Suggested by Xavier Claessens / bug 621076.

(Additional obseration: this should speed up the filter model's
handling of row-inserted as a binary search is now used instead
of a linear scan).
2011-08-22 21:30:30 +02:00
Xavier Claessens
dc12c373dc Improve error messages of signal monitor 2011-08-22 21:30:30 +02:00
Kristian Rietveld
e0f12ce020 Factor out another part of gtk_tree_model_filter_row_deleted 2011-08-22 21:30:30 +02:00
Kristian Rietveld
1686e515d6 Three more TreeModelFilter remove ancestor tests 2011-08-22 21:30:30 +02:00
Kristian Rietveld
df0fcfb940 In sort model also emit row-deleted after updating the data structures 2011-08-22 21:30:30 +02:00
Kristian Rietveld
e9c960929b Correct GtkTreeModelFilter to never unref an already deleted child node 2011-08-22 21:30:30 +02:00
Kristian Rietveld
b27a6568b7 Improve filter model remove node unit tests 2011-08-22 21:30:29 +02:00
Kristian Rietveld
f0da89fa20 Print failed assertions for failed child iterator conversions 2011-08-22 21:30:29 +02:00
Kristian Rietveld
2f5fbcd10a Make _get_iter invalidate iterators when FALSE is returned 2011-08-22 21:30:29 +02:00
Kristian Rietveld
431987a2fa Add more unit tests for gtk_tree_model_filter_row_deleted() 2011-08-22 21:30:29 +02:00
Kristian Rietveld
56f83ad197 Further reduce variable shadowing by factoring code out into functions 2011-08-22 21:30:29 +02:00
Kristian Rietveld
cb8c608e49 Add unit test for bug 77977 for reference 2011-08-22 21:30:29 +02:00
Kristian Rietveld
ed603fa790 Add bug base and bug numbers to tree model unit tests 2011-08-22 21:30:29 +02:00
Kristian Rietveld
f1d791355a Move TreeModelSort specific tests to a new sortmodel.c file 2011-08-22 21:30:29 +02:00
Kristian Rietveld
b227aa06eb Make naming of tree model unit tests consistent
All test paths now start with the name of the class which is being
tested.
2011-08-22 21:30:29 +02:00
Kristian Rietveld
2cb9f03a66 Put all GtkTreeModel unit tests in a single binary
This to reduce linking time and have all tests in a single binary.
2011-08-22 21:30:29 +02:00
Cosimo Cecchi
a14cecb0ad widget-factory: add the primary-toolbar hint to the toolbar 2011-08-22 11:40:41 -04:00
Chun-wei Fan
0f458f1e35 Update config.h.win32.in
-Only define HAVE_STRINGS_H when MSVC is not used
-Define HVE_STDINT_H for Visual C++ 2010 and later, as Visual C++ 2010
 does ship with a "proper" stdint.h by default
-Add check macros HAVE_RINT and HAVE_ROUND--they are only defined when
 MSVC is not used
-Remove obsolete check macros
2011-08-20 11:18:23 +08:00
Chun-wei Fan
323d24db8c Update configure.ac to check for rint()/round()
Added check in configure.ac to check for the rint() and
round() functions as they are normally only available in C99
compilers.
2011-08-20 11:17:45 +08:00
Chun-wei Fan
ad73ed298d Include C89 fallback code
gtk/gtkborderimage.c, gtk/gtklabel.c and gtk/gtkstyleproperty.c call
round() and/or rint(), which was only available in C99 compilers.

This adds the inclusion of the fallback implementation (gtk/fallback-c89.c)
to define these functions if they are not initially made available by the
compiler.

Also remove the rint() implementation in gtk/gtklabel.c as it is now in
the fallback implmentation.
2011-08-20 11:17:44 +08:00
Chun-wei Fan
db3fecc5b9 Add fallback implemetation for rint()/round()
Add an implementation for rint() and round() for compilers that do not
define one or both of them.  Note that this file should be included
after config.h was included.
2011-08-20 11:17:43 +08:00
Arash Mousavi
054a625497 Updated Persian translation 2011-08-20 00:59:30 +04:30
David Zeuthen
c68eeaa966 Bug 656851 – Allow use of GVariant in GtkListStore
Signed-off-by: David Zeuthen <davidz@redhat.com>
2011-08-18 17:49:40 -04:00
Abduxukur Abdurixit
d539ebbf5b Added UG translation 2011-08-19 19:57:26 +02:00
Andika Triwidada
23ebefe8e7 Updated Indonesian translation 2011-08-18 16:29:40 +07:00
Daniel Mustieles
5580fe0e1e Updated Spanish translation 2011-08-17 01:39:00 +02:00
Matthias Clasen
e391bc442a Use GtkFontChooser in testtoplevelembed
This was pointed out in bug 656639.
2011-08-16 10:42:54 -04:00
Fran Dieguez
48d60bd771 Updated Galician translations 2011-08-16 13:31:28 +02:00
Chun-wei Fan
e2397bf0da Update VS property sheets
Copy the Win32-specific GDK backend headers during the "install" stage
as well, as they were missed in the install, causing trouble when
building other projects like WebKitGTK+.

Thanks to greg.hellings for pointing this out in Bug 653964.
2011-08-16 14:38:03 +08:00
Matthias Clasen
1bca4f3eb5 Post-release bump 2011-08-15 22:01:55 -04:00
Matthias Clasen
22a2867d79 3.1.12 2011-08-15 21:58:05 -04:00
A S Alam
ade913a60e update translation for Punjabi 2011-08-16 06:59:47 +05:30
Matthias Clasen
915d32f59c Fix up symbol lists for recent api additions 2011-08-15 21:25:58 -04:00
Matthias Clasen
8e324b38a6 Update NEWS for 3.1.12 2011-08-15 20:49:53 -04:00
Matthias Clasen
2462019449 testgtk: remove dead code 2011-08-15 19:40:24 -04:00
Matthias Clasen
8cf52c8e6c Fix a typo 2011-08-15 19:24:59 -04:00
Matthias Clasen
6877893ed5 Make setting fontname work, independent of a screen 2011-08-15 18:57:58 -04:00
Matthias Clasen
1207757924 Keep the currently selected font over theme changes
When repopulating the list of fonts, don't loose the current
selection, unless the font is no longer in the list.
2011-08-15 18:57:57 -04:00
Matthias Clasen
9c85d4f6df Deprecate GtkFontSelection and GtkFontSelectionDialog 2011-08-15 18:57:57 -04:00
Matthias Clasen
930715665e Trivial formatting fix 2011-08-15 18:57:57 -04:00
Matthias Clasen
d78acb55a0 Add docs 2011-08-15 18:57:57 -04:00
Matthias Clasen
0ee89f1360 Add new symbols 2011-08-15 18:57:57 -04:00
Matthias Clasen
a09ee203ec Add filtering to the font chooser 2011-08-15 18:57:57 -04:00
Matthias Clasen
ba564088c3 Add 'no matches' functionality
Initial cut at showing a 'no matches' message if the font list
is empty.
2011-08-15 18:57:57 -04:00
Matthias Clasen
6fb69845b0 Make the fontchooser dialog come up in a reasonable size
This is not a perfect solution; we really just want to set
a nice default size, but GTK+ does not make that easy.
2011-08-15 18:57:57 -04:00
Matthias Clasen
7c4ad1f400 Just use a single grid
The subgrid didn't really add anything.
2011-08-15 18:57:57 -04:00
Matthias Clasen
43d62c08e3 Clean up error handling 2011-08-15 18:57:57 -04:00
Matthias Clasen
5b9857d9b9 Rename some statics
gtk_font_chooser_ref_{family,face} -> gtk_font_chooser_set_{family,face}
2011-08-15 18:57:57 -04:00
Matthias Clasen
8dbdfa7e73 Avoid extraneous signals at destroy time
We need to disconnect the cursor-changed handler before the
treeview gets destroyed, to avoid unwanted emissions.
2011-08-15 18:57:57 -04:00
Matthias Clasen
96f9b67b51 Fix minor issues in the tests 2011-08-15 18:57:57 -04:00
Matthias Clasen
97d26ac9c0 Simplify a few things
Adwaita seems to misrender focus on entries with margins, so
use spacing instead. Also, don't use entry buffer unnecessarily.
2011-08-15 18:57:57 -04:00
Matthias Clasen
a18fab88a1 Trivial formatting fixes
Just committing these is easier than writing them up.
2011-08-15 18:57:57 -04:00
Alberto Ruiz
a58a2dc0d3 GtkFontChooserDialog: GtkFontButton now uses GtkFontChooserDialog instead of GtkFontSelectionDialog 2011-08-15 18:57:57 -04:00
Alberto Ruiz
e79842ce94 GtkFontChooser: get_font_name did not return the font size 2011-08-15 18:57:56 -04:00
Alberto Ruiz
d33088a805 GtkFontChooser: Stub code to handle empty list by search. 2011-08-15 18:57:56 -04:00
Alberto Ruiz
66a7add23f GtkFontChooser: font-name property notification wasn't properly propagated during size change from the spinbutton 2011-08-15 18:57:56 -04:00
Alberto Ruiz
52177f5e0d GtkFontChooser: Missing G_END_DECLS in fontchooser header 2011-08-15 18:57:56 -04:00
Alberto Ruiz
5795d3d616 GtkFontChooser: Using G_N_ELEMENTS instead of a define 2011-08-15 18:57:56 -04:00
Alberto Ruiz
9245a66e6f GtkFontChooser: Using the widget instead of the private struct as signal data in all conects 2011-08-15 18:57:56 -04:00
Alberto Ruiz
bf8ad994d4 GtkFontChooser: Fixed coding style wrt spacing around operators 2011-08-15 18:57:56 -04:00
Alberto Ruiz
26fb5c90b1 GtkFontChooser: Using explicit comparisons for g_strcmp0 2011-08-15 18:57:56 -04:00
Alberto Ruiz
ab1ebb072e GtkFontChooser: Added missing breaks in switch statements 2011-08-15 18:57:56 -04:00
Alberto Ruiz
c36d291acc GtkFontChooser: Setting all ought to be static functions as static 2011-08-15 18:57:56 -04:00
Alberto Ruiz
bf457d129e GtkFontChooserDialog: Add parent window as a parameter in the constructor 2011-08-15 18:57:56 -04:00
Alberto Ruiz
523190f69a GtkFontChooserDialog: Fix get_font_chooser public function name 2011-08-15 18:57:56 -04:00
Alberto Ruiz
23b15254bb GtkFontChooser: Set correct margin values between UI elements 2011-08-15 18:57:56 -04:00
Alberto Ruiz
a55d2f67b0 GtkFontChooserDialog: Use g_object_new to set initial values in the dialog constructor 2011-08-15 18:57:56 -04:00
Alberto Ruiz
01f279338f GtkFontChooser: Remove outdated Copyright information 2011-08-15 18:57:56 -04:00
Alberto Ruiz
1dda502bcb GtkFontChooser: Fix size synchronization between slider and spin button 2011-08-15 18:57:56 -04:00
Alberto Ruiz
cabfcbd18d GtkFontChooser: Cleanup comments and fix indentation alignments 2011-08-15 18:57:56 -04:00
Alberto Ruiz
e3f70857af GtkFontChooser: Remove default geometry defines 2011-08-15 18:57:55 -04:00
Alberto Ruiz
55d50b3cca GtkFontChooser: Fix scroll callback connected to treeview instead of preview 2011-08-15 18:57:55 -04:00
Alberto Ruiz
9dee34ad27 GtkFontChooser: Remove the themed color for the font title 2011-08-15 18:57:55 -04:00
Alberto Ruiz
f5a00f0c77 GtkFontChooser: Use a nested grid to achieve the right layout in the size controls 2011-08-15 18:57:55 -04:00
Alberto Ruiz
1075b7ac38 GtkFontChooser: Fix expand and fill properties for the grid layout 2011-08-15 18:57:55 -04:00
Alberto Ruiz
d9187472f5 GtkFontChooser: Use GtkBox instead of GtkVBox as base class. 2011-08-15 18:57:55 -04:00
Alberto Ruiz
b37863a5ba GtkFontChooser: Use const instead of G_CONST_RETURN 2011-08-15 18:57:55 -04:00
Alberto Ruiz
03ab18fa7a GtkFontChooser: Add preview entry to the grid 2011-08-15 18:57:55 -04:00
Alberto Ruiz
f60d0dc35a GtkFontChooser: Initial work to use GtkGrid 2011-08-15 18:57:55 -04:00
Alberto Ruiz
4163fa5d29 GtkFontChooser: GtkFontChooserDialog: Update documenation to reflect Since: 3.2 2011-08-15 18:57:55 -04:00
Alberto Ruiz
4add47946b GtkFontChooserDialog: Split the dialog out of gtkfontchooser.[ch] to gtkfontchooserdialog.[ch] 2011-08-15 18:57:55 -04:00
Alberto Ruiz
8e621f593e GtkFontChooser: Use symbolic icons in the filter entry 2011-08-15 18:57:55 -04:00
Alberto Ruiz
5ccc66d855 GtkFontChooser: Now shearch filters each individual term rather than the whole string at once 2011-08-15 18:57:55 -04:00
Alberto Ruiz
db2ef8ce51 GtkFontChooser: Restore automatic alignment on scroll to selection 2011-08-15 18:57:55 -04:00
Alberto Ruiz
7067d36adb GtkFontChooser: Removed support for deprecated functionality from GtkFontSelector 2011-08-15 18:57:55 -04:00
Alberto Ruiz
4bf22639d1 GtkFontChooser: Expose the new widget in gtk.h and add test cases 2011-08-15 18:57:55 -04:00
Alberto Ruiz
334ee81901 GtkFontChooser: Renaming the class names and fixing the tests 2011-08-15 18:57:55 -04:00
Alberto Ruiz
f2376ad401 GtkFontChooser: Remove wrong usage of GTK_DISABLE_DEPRECATED 2011-08-15 18:57:55 -04:00
Alberto Ruiz
bbe8d13c6e GtkFontChooser: Check if the deprecated widgets are present before updating the size list 2011-08-15 18:57:54 -04:00
Alberto Ruiz
1b00a3eb76 GtkFontChooser: Update fontlist on style change 2011-08-15 18:57:54 -04:00
Alberto Ruiz
6dec212d1d GtkFontChooser: Add a property to control whether the preview entry is shown or not 2011-08-15 18:57:54 -04:00
Alberto Ruiz
731120e26e GtkFontChooser: Better test preview text 2011-08-15 18:57:54 -04:00
Alberto Ruiz
c34a2d65d0 GtkFontChooser: Use GTK_DISABLE_DEPRECATED on the test code 2011-08-15 18:57:54 -04:00
Alberto Ruiz
5eb614a25b GtkFontChooser: Add gtk_font_selection_dialog_get_select_button and use GTK_DISABLE_DEPRECATED in gtkfontsel.h 2011-08-15 18:57:54 -04:00
Alberto Ruiz
1ce5a04406 GtkFontChooser: Changed dialog label from OK to Select, deprecated get_ok_button and internal apply button. 2011-08-15 18:57:54 -04:00
Alberto Ruiz
053d34dc47 GtkFontChooser: Added test for GtkFontSelectionDialog 2011-08-15 18:57:54 -04:00
Alberto Ruiz
31776e2a25 GtkFontChooser: implement gtk_font_selection_set/get_preview_text 2011-08-15 18:57:54 -04:00
Alberto Ruiz
14fbbf1420 GtkFontChooser: check if font name is NULL in gtk_font_selection_set_font_name 2011-08-15 18:57:54 -04:00
Alberto Ruiz
ea4603e5d1 GtkFontChooser: gtk_font_selection_set_font_name implementation 2011-08-15 18:57:54 -04:00
Alberto Ruiz
3f2b09422d GtkFontChooser: Setting the font-name property. Test updates. Remove warnings. 2011-08-15 18:57:54 -04:00
Alberto Ruiz
0aae453d77 GtkFontChooser: Improve bootstrapping of the deprecated lists 2011-08-15 18:57:54 -04:00
Alberto Ruiz
2ef00d23e3 GtkFontChooser: Update selection on deprecated size list selection 2011-08-15 18:57:54 -04:00
Alberto Ruiz
dc1a47ad70 GtkFontChooser: Update selection on deprecated face or font list selection 2011-08-15 18:57:54 -04:00
Alberto Ruiz
0ef0359566 GtkFontChooser: Update size when selecting an item of the deprecated size list 2011-08-15 18:57:54 -04:00
Alberto Ruiz
72a971b0e0 GtkFontChooser: Blocking the cursor change callbacks from happening on the deprecated widgets when selecting the font from the fontselector 2011-08-15 18:57:53 -04:00
Alberto Ruiz
c28b1e32e3 GtkFontChooser: Update deprecated font list on slection 2011-08-15 18:57:53 -04:00
Alberto Ruiz
1821eac1c1 GtkFontChooser: Refactoring the default font size, face and family assignment for clarity 2011-08-15 18:57:53 -04:00
Alberto Ruiz
aa10abacbc GtkFontChooser: Use the theme font as the default font 2011-08-15 18:57:53 -04:00
Alberto Ruiz
4b92872a97 GtkFontChooser: Add callbacks and improve test to take deprecated widgets into account 2011-08-15 18:57:53 -04:00
Alberto Ruiz
e80053c659 GtkFontChooser: Use GTK_DISABLE_DEPRECATED to encapsulate the deprecated functionality 2011-08-15 18:57:53 -04:00
Alberto Ruiz
3c0b6914e0 GtkFontChooser: Unref deprecated widgets on finalize 2011-08-15 18:57:53 -04:00
Alberto Ruiz
bb008411e0 GtkFontChooser: Use scrolled windows for the deprecated widgets 2011-08-15 18:57:53 -04:00
Alberto Ruiz
706167bbbd GtkFontChooser: Populate face names in the deprecated face list 2011-08-15 18:57:53 -04:00
Alberto Ruiz
0d112810f9 GtkFontChooser: Populate font family names in the deprecated family list 2011-08-15 18:57:53 -04:00
Alberto Ruiz
8826a10bc8 GtkFontChooser: Add tree view columns for the deprecated widgets 2011-08-15 18:57:53 -04:00
Alberto Ruiz
915b442dc1 GtkFontChooser: Fix segmentation fault in deprecated size list population 2011-08-15 18:57:53 -04:00
Alberto Ruiz
29a0685ee8 GtkFontChooser: Add deprecated calls to the test 2011-08-15 18:57:53 -04:00
Alberto Ruiz
1a2ef4db60 GtkFontChooser: update the size model for the deprecated size list 2011-08-15 18:57:53 -04:00
Alberto Ruiz
e08006f691 GtkFontChooser: initialization and destruction of deprecated widgets and data models 2011-08-15 18:57:53 -04:00
Alberto Ruiz
abc92d5030 GtkFontChooser: Initial support for deprecated functions 2011-08-15 18:57:53 -04:00
Alberto Ruiz
c96698e95f GtkFontChooser: Filter also by font face 2011-08-15 18:57:53 -04:00
Alberto Ruiz
58b2204651 GtkFontChooser: Layout improvements, spacing between elements and default widget size. 2011-08-15 18:57:53 -04:00
Alberto Ruiz
36156a6c49 GtkFontChooser: Layout improvements. Adding shadow to scrolled windows. Font+Face text is now bold. 2011-08-15 18:57:52 -04:00
Alberto Ruiz
f75e4d314a GtkFontChooser: Improvements on the size setting signals between the preview, scale and spinbutton. Adding more string fields to the model to allow for backwards compatibility. 2011-08-15 18:57:52 -04:00
Alberto Ruiz
1688512252 GtkFontChooser: Fixing mouse scroll zooming behaviour for the preview and the size controls 2011-08-15 18:57:52 -04:00
Alberto Ruiz
858e13cad6 GtkFontChooser: Setting a minimum width andfix the markup for the rows 2011-08-15 18:57:52 -04:00
Alberto Ruiz
af14106a63 GtkFontChooser: Ellipsize cell renderer and set a better size list 2011-08-15 18:57:52 -04:00
Alberto Ruiz
0db1b63b1f GtkFontChooser: Keep reference to the face and the family objects 2011-08-15 18:57:52 -04:00
Alberto Ruiz
88ab6f14d3 GtkFontChooser: Better cursor selection and model leak fixes 2011-08-15 18:57:52 -04:00
Alberto Ruiz
077d897fa4 GtkFontChooser: Added a test program 2011-08-15 18:57:52 -04:00
Alberto Ruiz
f3e9bb312e GtkFontChooser: Enable font selection 2011-08-15 18:57:52 -04:00
Alberto Ruiz
c9150374d9 GtkFontChooser: Setting a default vertical size 2011-08-15 18:57:52 -04:00
Alberto Ruiz
7f125d95e8 GtkFontChooser: Layout enhancements, using a scrolled window for the preview entry. 2011-08-15 18:57:52 -04:00
Alberto Ruiz
cbaca3e4bf GtkFontChooser: Fixed size updating in the preview 2011-08-15 18:57:52 -04:00
Alberto Ruiz
272f11069f GtkFontChooser: Improvements on the spin/slider interaction 2011-08-15 18:57:52 -04:00
Alberto Ruiz
c303d0b18c GtkFontChooser: The spinner now updates the slider size if it is within the range 2011-08-15 18:57:52 -04:00
Alberto Ruiz
1fa2c503a7 GtkFontChooser: Getting the refiltering right for the clear icon. Filter function speedups. 2011-08-15 18:57:52 -04:00
Alberto Ruiz
94ee606f62 GtkFontChooser: Search entry icon is now dynamic depending on the content 2011-08-15 18:57:52 -04:00
Alberto Ruiz
4db5ea20e8 GtkFontChooser: Set the initial size to the slider, initial callbacks for size change 2011-08-15 18:57:52 -04:00
Alberto Ruiz
fb19245493 GtkFontChooser: Live search implemented 2011-08-15 18:57:51 -04:00
Alberto Ruiz
693617700b GtkFontChooser: Inserted and deleted text callbacks 2011-08-15 18:57:51 -04:00
Alberto Ruiz
76809e128a GtkFontChooser: Adding a tree model filter for the search functionality 2011-08-15 18:57:51 -04:00
Alberto Ruiz
ce10919978 GtkFontChooser: Setting the default preview text and the default font size 2011-08-15 18:57:51 -04:00
Alberto Ruiz
9af88217d1 GtkFontChooser: Compilation warning cleanups 2011-08-15 18:57:51 -04:00
Alberto Ruiz
b79802789d GtkFontChooser: Iterate over faces as well as families to list them 2011-08-15 18:57:51 -04:00
Alberto Ruiz
f854a46890 GtkFontChooser: Improvements in the font face listing 2011-08-15 18:57:51 -04:00
Alberto Ruiz
8655384f51 GtkFontChooser: Set rules hint to TRUE in the main tree view 2011-08-15 18:57:51 -04:00
Alberto Ruiz
7611fe60f8 GtkFontChooser: Populated font list model 2011-08-15 18:57:51 -04:00
Alberto Ruiz
e570a91abb GtkFontChooser: Add column and cell renderer 2011-08-15 18:57:51 -04:00
Alberto Ruiz
6439fb4263 GtkFontChooser: Create functions to bootstrap the treeview column and settings and update the font list 2011-08-15 18:57:51 -04:00
Alberto Ruiz
48473b48e6 GtkFontChooser: Set vbox to no homogeneus 2011-08-15 18:57:51 -04:00
Alberto Ruiz
8a4cda71af GtkFontChooser: Setting the height of the preview and have a define for the top padding 2011-08-15 18:57:51 -04:00
Alberto Ruiz
6c44e85852 GtkFontChooser: Added slider and spin button 2011-08-15 18:57:51 -04:00
Alberto Ruiz
f0eef60123 GtkFontChooser: Adding the preview 2011-08-15 18:57:51 -04:00
Alberto Ruiz
f59b74622d GtkFontChooser: Adding the alignment to the selection 2011-08-15 18:57:51 -04:00
Alberto Ruiz
0c721d919c GtkFontChooser: Create alignment for the preview entry 2011-08-15 18:57:51 -04:00
Alberto Ruiz
1b302d3fad GtkFontChooser: Added main treeview 2011-08-15 18:57:51 -04:00
Alberto Ruiz
d46d1d7fcd GtkFontChooser: Avoid using show_all explicitely 2011-08-15 18:57:50 -04:00
Alberto Ruiz
810eda9cca GtkFontChooser: Create fundamental widgets for the new GtkFontSelection 2011-08-15 18:57:50 -04:00
Alberto Ruiz
9702e7c456 GtkFontChooser: Add private members to GtkFontSelectionPrivate 2011-08-15 18:57:50 -04:00
Alberto Ruiz
4f38ff9757 GtkFontChooser: Remove all cruft from the current GtkFontSelection implementation and start a new widget 2011-08-15 18:57:50 -04:00
Jesse van den Kieboom
99686a2fef Added gtk_text_iter_assign API
https://bugzilla.gnome.org/show_bug.cgi?id=645258
2011-08-15 15:29:23 +02:00
Paolo Borelli
508353fd15 Do not manually create empty label
gtk_notebook_update_labels will take care of creating it if needed.
2011-08-15 15:08:28 +02:00
Greg Hellings
bd26ce1db6 Install gdk/win32 headers
Added install commands for the gdk/win32 headers as referenced from
gdkwin32.h.

https://bugzilla.gnome.org/show_bug.cgi?id=653964
2011-08-15 13:00:14 +03:00
Kalev Lember
d86c1486ba gtk-demo: Fix the path to demo sources for the win32 build 2011-08-14 15:18:38 +03:00
John (J5) Palmieri
c3e0a0035e [gi] annotate gdk_container_set_user_data to take a GObject
* this allows bindings to correctly marshal the parameter
2011-08-14 08:07:10 -04:00
John Ralls
f84c787be4 Bug 655122: Lion Crashes during resize
Move resizing detection to a separate function and on 10.7 detect
resizes on all edges so that they don't result in grabs.
2011-08-13 15:30:59 -07:00
John Ralls
fc7dfd7246 Bug 655122: Detect OSX version for handling version-dependent special
cases (the one at hand is window resizing, which is handled differently
on OSX 10.7 from earlier versions).
2011-08-13 15:29:11 -07:00
Jorge González
7862187015 Updated Spanish translation 2011-08-13 17:37:02 +02:00
Laszlo Pandy
991b782b75 Fix incomplete &gt; entities in docs. 2011-08-13 15:22:44 +02:00
plesry
c4008dff3b Updated Traditional Chinese translation(Hong Kong and Taiwan) 2011-08-13 15:23:01 +08:00
Javier Jardón
8afe90224b configure.ac: Bump gdk-pixbuf required version
gdk-pixbuf 2.22.0 relies on G_CONST_RETURN which is deprecated by now.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=656421
2011-08-12 20:02:59 +01:00
Alexander Shopov
4cdc14d55f Updated Bulgarian translation 2011-08-11 22:11:28 +03:00
Cosimo Cecchi
9d269bd7f2 settings: use the right RC parser for the gtk-visible-focus setting
Without the parser the property the property won't be settable by themes
using settings.ini
2011-08-11 15:38:45 +02:00
Jürg Billeter
c7bcef426b widget: Add transfer annotation for gtk_widget_set_window
gtk_widget_set_window does not add any reference to the window and
unrealize will destroy it.
2011-08-11 12:35:46 +02:00
Javier Jardón
9e89bf34bf Remove local copy of introspection.m4
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=652991
2011-08-10 21:15:56 +01:00
Dan Winship
c4a5c99074 Fix cut-and-paste error in GtkEntryAccessible/GtkLabelAccessible
The y position of the character depends on the window's y coordinate,
not its x coordinate.
2011-08-10 15:19:56 -04:00
Matthias Clasen
2ba9c4b4a7 Make focus rectangles optional
This commit introduces a new setting, gtk-visible-focus, backed
by the Gtk/VisibleFocus X setting. Its three values control how
focus rectangles are displayed.

'always' is equivalent to the traditional GTK+ behaviour of always
rendering focus rectangles.

'never' does what it says, and is intended for keyboardless
situations, e.g. tablets.

'automatic' hides focus rectangles initially, until the user
interacts with the keyboard, at which point focus rectangles
become visible.

https://bugzilla.gnome.org/show_bug.cgi?id=649567
2011-08-10 16:34:20 +02:00
Daniel Mustieles
6596dbff31 Updated Spanish translation 2011-08-10 13:30:55 +02:00
Rachid BM
99080af3ee Language improvements
Changed rgba to uppercase (Only in UI strings)
Fixed the typo: tolevel -> toplevel
2011-08-10 12:15:32 +01:00
Cosimo Cecchi
7e22b46c1f combobox: add a "combobox-entry" style class for comboboxes with entries
This way themes can use GtkComboBox.combobox-entry to match that
specific case, and GtkComboBox.combobox-entry .button to match the
button/arrow side of the widget.
2011-08-09 16:08:00 +02:00
Matthias Clasen
d324a99454 Fix entry drawing in the presence of margins
Margins need to be taken into account when comparing requisitions
and allocations, which GtkEntry (and subclasses) do for some reason.
2011-08-09 15:12:21 +02:00
Matthias Clasen
17f99f663f GtkGrid: Add a way to insert rows or columns
This is useful functionality that makes it easier to insert
things in the middle of an already populated grid.

Bug 653817
2011-08-08 13:13:48 +02:00
Will Thompson
5bfef8c80a GtkAppChooser: improve grammar in short_description
https://bugzilla.gnome.org/show_bug.cgi?id=656098
2011-08-07 12:12:11 +02:00
Ignacio Casal Quinteiro
92e1d27475 Fix warning 2011-08-06 19:02:16 +02:00
Benjamin Berg
94782e914c Fix polling for new data in cups print backend (bug #599664) 2011-08-06 10:37:21 +02:00
Federico Mena Quintero
d4b992506a Merge branch 'bgo593793-filechooser-recent-folders-master' 2011-08-02 11:46:05 -05:00
Federico Mena Quintero
2485273247 bgo#655822 - Put back the expand-folders schema in gsettings
Apparently schemas are part of the ABI contract; running apps crash if a
schema disapppears and they happen to access it.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-08-02 11:45:47 -05:00
Daniel Nylander
6c64427273 Updated Swedish translation 2011-08-02 00:46:30 +02:00
Daniel Nylander
48d859b823 Updated Swedish translation 2011-08-02 00:44:17 +02:00
Pavel Holejsovsky
bb09982b66 Avoid introspection scanner warning on GtkPlug and GtkSocket
Make sure that sources with annotations are included into the list of
sources passed to introspection scanner.
2011-08-01 11:09:57 +02:00
Pavel Holejsovsky
21a5b038a7 Add annotations so that methods are properly paired to objects.
Add type annotations to 1st argument of gdk_x11_* functions so that they are
properly recognized as methods of GdkX11 objects.

https://bugzilla.gnome.org/show_bug.cgi?id=655496
2011-08-01 11:09:49 +02:00
Pavel Holejsovsky
0893a3fd39 Enable introspection of X11-specific functions and methods
Functions dealing with native Xlib types were (skip)ed because
gobject-introspection did not have correct Xlib types declarations.
They are corrected now, so these GdkX11 functions can be enabled back
again.

https://bugzilla.gnome.org/show_bug.cgi?id=655495
2011-08-01 11:09:39 +02:00
Kristian Rietveld
dca9db124b Bug 655545 - condition can never be true in gtk_tree_view_real_set_cursor
Spotted by Ben Pfaff.
2011-07-30 23:01:38 +02:00
Kristian Rietveld
58ba8a7c7f quartz: use already existing current_button_state variable 2011-07-30 23:01:38 +02:00
Kristian Rietveld
a979e414fb quartz: remove _gdk_quartz_events_get_current_event_mask 2011-07-30 23:01:38 +02:00
Kristian Rietveld
c9f6c7645c quartz: return modifiers instead of an event mask ... 2011-07-30 23:01:37 +02:00
Kristian Rietveld
ceca333309 quartz: Remove MAC_OS_X_VERSION_MIN_ALLOWED ifdef
I tried to suppress compiler warnings on pre-10.6 machines this way,
but it defeats its purpose when you compile for pre-10.6 machines on
a 10.6 machine.  For now, we have to live with the warnings when
compiling on/for pre-10.6 machines, there does not seem an easy and proper
way to suppress the warnings.
2011-07-28 17:44:02 +02:00
Sergio Cipolla
39a4017c33 Fixed a string in Brazilian Portuguese translation 2011-07-28 09:45:59 -03:00
Federico Mena Quintero
af00ca81e1 Merge branch 'bgo593793-filechooser-recent-folders-master' 2011-07-27 18:56:39 -05:00
Federico Mena Quintero
9112cb4dfa Set the location mode when changing the operation mode
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:56:27 -05:00
Federico Mena Quintero
80d0efd94a Switch to OPERATION_MODE_BROWSE when switching to volume or file shortcuts
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:56:22 -05:00
Federico Mena Quintero
ff95a79d98 Remove the unused, initial-text logic from the location entry
Years ago, when the location entry only appeared in a popup window, it used to appear
populated with the current folder's path.  We had some logic to do this, but since now
the location entry appears in the main dialog, we can do away with that old code.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:56:18 -05:00
Federico Mena Quintero
fa2e287687 Create the location_entry in a single function
We had duplicated code to create the entry in two cases, for Open and for Save modes.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:56:15 -05:00
Federico Mena Quintero
9ed65c5620 Only unset the entry's contents if the entry exists
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:56:11 -05:00
Federico Mena Quintero
6c31de64b3 Discard the search widgets in a separate function
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:56:06 -05:00
Federico Mena Quintero
3de864cfff Move the widgets above the hpaned to their own box
This way we can re-create the contents of that box easily without disrupting
the rest of the file chooser.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:56:02 -05:00
Federico Mena Quintero
c1fbdb4fd0 Make operation_mode_set() handle SEARCH and RECENT modes as well
Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:55:58 -05:00
Federico Mena Quintero
cccf35f862 Centralize changing the operation mode in operation_mode_set()
This will be the central function to switch operation modes:  stop searches or the recent-files
process; switch widgets, etc.

We factor out the common code from recent_switch_to_browse_mode() and search_switch_to_browse_mode(),
and remove those functions.  All the code that switched modes by hand now calls
the central operation_mode_set().

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:55:54 -05:00
Federico Mena Quintero
7726276fe9 Remove duplicated code from *_switch_to_browse_mode()
That code indeed lives in operation_mode_stop(), so use it instead of
having inlined duplicates.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:55:50 -05:00
Federico Mena Quintero
9e6e6575de Rename stop_operation() to operation_mode_stop()
We'll now prefix functions to change the impl->operation_mode with 'operation_mode',
for clarity.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:55:45 -05:00
Federico Mena Quintero
8962e0383f Save selection to recent-files in the asynchronous Save cases
Various paths in SAVE or CREATE_FOLDER return from ::should_respond() but
leave an asynchronous process running.  This process checks some things
in the user's selection, for example, 'does the file exist, and if so
do we need to bring up an overwrite-confirmation dialog?'.  When these
async processes complete *and* it is indeed time for the dialog to
be terminated (via the response-requested signal), we also need to
save the selection to the recently-used list - as ::should_respond() does
by itself in the cases when it can request a response immediately.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:54:52 -05:00
Federico Mena Quintero
7985ab786d Log to recent-files when confirming the file chooser
To make life easier for users, when apps don't properly update the recently-used list
after choosing a file, we now do that directly from the file chooser.

Signed-off-by: Federico Mena Quintero <federico@gnome.org>
2011-07-27 18:54:42 -05:00
Kristian Rietveld
8d69f3daf2 Bug 508601 - Copying from GTK+ applications causes crash
In GtkClipboardOwner pasteboard:provideDataForType do not call
_gtk_quartz_set_selection_data_for_pasteboard() is selection_data.length
is smaller than 0.  The function relies on having a positive length,
since it stores the length in a uint ...
2011-07-25 22:05:52 +02:00
Matthias Clasen
b0dd7e1cfd widget-factory: small tweaks
Use our canonical example url in the link button, use the placeholder-text
feature for the search entry, and add a runtime switch for the dark theme.
2011-07-25 10:20:56 -04:00
Michael Hutchinson
786521d5a8 Bug 655074 - Fix crash with undecorated windows on MacOS Lion 2011-07-25 12:33:26 +02:00
Matthias Clasen
093612a46c Use G_DEFINE_TYPE for GtkIconViewItemAccessible 2011-07-25 00:46:34 -04:00
Matthias Clasen
2c6c0fe329 Minor cleanups 2011-07-25 00:34:08 -04:00
Matthias Clasen
a4560cdfbb Rework AtkText implementation
Use a PangoLayout, instead of storing a text buffer per item.
And use gtkpango api instead of implementing it all ourselves.
2011-07-25 00:27:42 -04:00
Matthias Clasen
26a040e81b Drop some grandiosity from the AtkAction implementation
There is only one action here, no need to pretend otherwise.
2011-07-24 23:59:00 -04:00
Matthias Clasen
625947f9f2 Use G_DEFINE_TYPE for GtkIconViewAccessible 2011-07-24 23:48:41 -04:00
Matthias Clasen
fadd58a0fb Drop GtkIconViewAccessiblePrivate
Just put the members in GtkIconViewAccessible itself.
2011-07-24 23:28:57 -04:00
Matthias Clasen
8a544d54ea Move GtkBuildable implementation up before accessibility
Just code rearrangement, no other changes.
2011-07-24 23:04:02 -04:00
Matthias Clasen
b7abf0b3ce Mention the demise of gail in 3.2 release notes 2011-07-23 22:28:29 -04:00
Matthias Clasen
2983f3fc14 Update gtk_widget_get_accessible() docs
Don't mention GTK_MODULES for loading a11y implementations
anymore.
2011-07-23 21:28:29 -04:00
Felix Riemann
e8486fdf71 gtkstyleproperty: fix small memory leak
The released value is a string array and thus g_free is not sufficient.

https://bugzilla.gnome.org/show_bug.cgi?id=655173
2011-07-23 21:40:59 +02:00
Matthias Clasen
28cb6f4bb3 Fix up last commit 2011-07-23 13:52:29 -04:00
Matthias Clasen
2937a875a0 Ditch some long dead perl cruft 2011-07-23 13:44:45 -04:00
Yuri Kozlov
07f525368d Updated Russian translation 2011-07-23 21:26:47 +04:00
Matthias Clasen
3f07c44ea9 post-release bump 2011-07-23 10:24:25 -04:00
391 changed files with 113225 additions and 95453 deletions

356
NEWS
View File

@@ -1,3 +1,359 @@
Overview of Changes in GTK+ 3.2.3
=================================
* GtkNotebook is now properly destroying action widgets
* The XI2 code has been made more robust:
- Trap errors due to disappearing devices, which
can happen when resuming from suspend
- Prevent stuck grabs when using move-resize emulation
with XI2
- Avoid segfaults due to events on disabled devices
* Bugs fixed:
646461 Leak in gtkfilechooserbutton.c: model_free_row_data
650943 Clicking resize grip causes strange mouse grabbing...
653676 Expand/Collapse doesn't respond after one click
660554 gtk_tree_view_drag_begin: assertion `path != NULL' failed
662814 Request for way to tell gtk_recent_manager_add_item_query...
663322 a11y-related crash
663856 Make option-foo accelerators use the right symbol
664132 gdk_cairo_region_create_from_surface broken on PPC...
664137 Crash in Audacious audio player when browsing...
664238 GTK apps crashe when dragging something
664456 segfault on arrow keypress in empty GtkIconView
664467 prop-editor is broken for GdkColor properties
664469 color button doesn't notify "color" and "alpha"...
664537 GtkCssProvider: don't segfault when CSS file is not found
664640 CUPS authentication does not work
* Translation updates:
Slovak
Spanish
Overview of Changes in GTK+ 3.2.2
=================================
* Bugs fixed:
658772 Directory paths for resource directories are hard-coded
661858 Add annotations for some GtkRadio* constructors
661859 Add annotations for some GtkSymbolicColor constructors
661997 Gtk crashes when changing the TreeView model while rubber...
662160 gtk_print_operation_cancel fails
662177 Toolbar returns invalid paths for toolbar items
662670 Pressing "Enter" in print dialog box will not cause printing
662691 menuitem: Always treat submenus as popup
662870 Fix introspection annotations for GtkRadioToolButton
662953 x11: Fix window manager change detection
663073 gtk_dialog_new_with_buttons should be G_GNUC_NULL_TERMINATED
663138 iconview: layout items immediately when setting a GtkTreeModel
663396 With multiple master devices, right clicking may show popup...
663605 Fix event->state of many event types on quartz
663694 GtkTreeViewAccessibleCellInfo are leaked
663825 calling gtk_progress_bar_set_fraction with a fraction > 1.0...
* Translation updates:
Brazilian Portuguese
British English
Japanese
Overview of Changes in GTK+ 3.2.1
=================================
* GtkCellRendererAccel can show virtual modifiers
* CSS improvements:
- 'transparent' can be used a color
* OS X improvements:
- Disable mnemonics
- Make Option work as a modifier
- Cleanup of modifiers: Alt/Option is MOD1, Command is MOD2
- Fix keyval <> Unicode and lowercase/uppercase mapping
* Improvements of cross-platform key and button event handling:
- Support '<Primary>' in accelerator strings
- Use approprivate modifiers for extending and modifying
selections, depending on the platform
- Use the appropriate button for triggering context menus,
depending on the platform
* Bugs fixed:
628936 gtk build fails because of objective-c elements
653289 GtkCellRendererText "edited" signal not emitted...
655057 rendering issues with map plugin
657770 Write to released memory in gtkdnd-quartz.c
658767 Drag and Drop NSEvent capture is racy
658772 Directory paths for resource directories are hard-coded
659022 gtk_tree_model_filter_clear_cache_helper: assertion failed
659655 3 errors in Spanish translation of gtk+
660687 roxterm X crashes with accessibility enabled
660730 Use of "struct stat" breaks Windows
* Translation updates
Catalan (Valencian)
Czech
Dutch
Esperanto
Galician
Latvian
Spanish
Traditional Chinese
Vietnamese
Overview of Changes in GTK+ 3.2
===============================
* GtkFontChooser:
- More speed ups. The font chooser will now load
instanteously, even if you have thousands of fonts
* Bug fixes
659826 new broadband connection weirdness in assistant
659966 Fix module blacklisting
640741 Fix return value fo gtk_tree_view_column_cell_get_position
Assertion in the treeview accessible code
Fix erroneous beeping in textview keynav
* Translation updates
Assamese
Basque
Brazilian Portuguese
Bulgarian
Catalan
Czech
Danish
French
Galician
German
Hungarian
Japanese
Korean
Latvian
Lithuanian
Oriya
Polish
Portuguese
Russian
Slovenian
Spanish
Swedish
Telugu
Overview of Changes in GTK+ 3.1.92
==================================
* GtkIconView:
- Cells will now be prelighted, if you set the
GtkCellRendererPixbuf::follow-state property.
* GtkFontChooser:
- Speed up population of the font list somewhat.
More speedups are expected in 3.2
* Bugs fixed:
615501 GtkIconView does not support prelight cells
658981 Inability to effectively clear string indicator in stf imp...
659241 GtkPaned initially allocates space for separator, even if...
659247 link-button: Reset the mouse cursor when destroyed
* Translation updates:
Asturian
Belarussian
Brazilian Portuguese
British English
Bulgarian
French
Galician
German
Latvian
Portuguese
Punjabi
Russian
Serbian
Slovenian
Swedish
Overview of Changes in GTK+ 3.1.90
==================================
* GtkAppChooserButton: A new function has been added
that makes it possible to have the button select the
default app (as opposed to the most-recently-used app).
* A lot of feedback on the the tree model refactoring has
been incorporated via new test cases and bug fixes
* The filechooser search has been ported to tracker 0.12
and is using the tracker DBus API directly now.
* The new fontchooser API has been reworked a bit to make
it follow the same pattern we use else where. GtkFontChooser
is now an interface that is implemented by GtkFontChooserButton,
GtkFontChooserDialog and GtkFontChooserWidget (to which the
original GtkFontChooser has been renamed).
* Bugs fixed
514843 gtkfilechooser should be more robust to malformed URIs...
617583 Dead accents keys don't work in GTK+ applications on OSX
642706 No way to select the default entry
657353 GtkTreeModelFilter hangs when filtering
657627 new font chooser API inconsistent
658272 Port gtksearchenginetracker.c to tracker 0.11/0.12
658379 Disabled devices still added to list on startup
658398 Use of uninitialized variable reported by Valgrind
658507 better comboboxes for right to left languages
658600 Geany crashes when reopening file chooser dialog
658696 Crash when inserting a new node
658774 Regression: GtkFileChooserButtons do not expand
* Translation updates:
Belarusian
British English
French
Galician
Indonesian
Italian
Latvian
Norwegian bokmål
Persian
Polish
Portuguese
Punjabi
Simplified Chinese
Slovenian
Spanish
Swedish
Tamil
Overview of Changes in GTK+ 3.1.18
==================================
* GtkFileChooser:
- It is no possible to go to the containing folder of a
selected file in recent files or search results.
* Bugs fixed
530253 typo ifaces under gtk_tree_view_set_reorderable
566202 GTK_SELECTION_MULTIPLE description unclear
581435 gtk_tree_view_set_drag_dest_row() needs more documentation
655631 Description of x and y parameters in gtk_render_arrow is in...
657793 Support NULL sibling in gtk_grid_attach_next_to
657882 gtk_css_provider_propagate_error's signature not updated...
657963 themingengine: remove xthickness FIXME from gtk_render_line()
657985 reeview: add GTK_STYLE_CLASS_SEPARATOR for tree view separators
658008 Centered text alignment in GtkAssistant is wrong
658077 Add theming support to GtkPathBar
658111 gtk_label_set_pattern() is reset by a call to gtk_box_pack_...
658168 Gtk-Message: Failed to load module "gail"
658200 gtk_toolbar_finalize() does stuff it shouldn't
Fix colord support in the print dialog
* Translation updates
Belarusian
Brazilian Portuguese
Esperanto
Galician
Korean
Lithuanian
Overview of Changes in GTK+ 3.1.16
==================================
* Make distcheck work again, and fix errors that crept in by
lack of a working distcheck.
* Bugs fixed:
656223 GtkToolShell: Move vfunc default results to default impl...
Overview of Changes in GTK+ 3.1.14
==================================
* GtkTreeView:
- The GtkTreeModelFilter and GtkTreeModelSort implementations
have been improved and a comprehensive test suite has been added.
* GtkFileChooser:
- The selected file(s) can now be copied to the clipboard
* Bugs fixed:
656851 Allow use of GVariant in GtkListStore
344858 gtk_menu_item_new_with_label() created widget with refcount 2
349502 option to copy full path in "Save AS"/"Open file" dialogs
621076 GtkTreeModelFilter does not emit all signals in some situations
634136 GtkTable::children accessor
649588 crash when sending a notification: "Gdk-CRITICAL **: gdk_visual_...
650762 gtk_misc_set_alignment replacement with the new API functions
651827 Crash in check_application()
656986 GtkSwitch is unusable when added to primary toolbar.
657146 Missing files in POTFILEs.in
657260 Gtk should use AtkWindow and remove that hack on GailUtil
657359 Crash when specifying data length in gtk_css_provider_load_...
657384 missing accessors for GdkEvent structures
* Translation updates:
Galician
German
Gujarati
Indonesian
Norwegian bokmål
Persian
Russian
Serbian
Spanish
Swedish
Traditional Chinese
Uighur
Overview of Changes in GTK+ 3.1.12
==================================
* GtkFontChooserDialog: A newly designed font selection dialog
that is intended to replace GtkFontSelectionDialog
* Drawing of focus rectangles is now optional; it can be turned
off altogether, or until actual keyboard interaction happens,
with the gtk-visible-focus setting.
* OS X: Fixes for 10.7 (Lion)
* Bugs fixed:
407885 A new GtkFontSelectionDialog
508601 Copying from GTK+ applications causes crash
599664 The print dialog should not block while looking for an...
645258 Add gtk_text_iter_assign API
649567 hide focus rectangles when not keynavigating
652991 Remove local copy of introspection.m4
653817 Would like GtkGrid methods to insert rows/columns
653964 Installing MinGW32 build misses gdk/win32 headers
655074 Fix crash with undecorated windows on MacOS Lion
655122 Crash when resizing window on MacOS Lion
655173 small memory leak in GtkStyleProperty
655495 Make X11-specific functions introspectable
655496 X11-specific objects methods are introspected as static functions
655545 condition can never be true in gtk_tree_view_real_set_cursor
655822 Removal of GSettings key causes crash on upgrades
656098 Tweak GtkAppChooser's short description
656421 3.1.10: G_DISABLE_DEPRECATED detection breaks compilation
* Translation updates
Brazilian Portuguese
Bulgarian
Russian
Spanish
Swedish
Traditional Chinese
Overview of Changes in GTK+ 3.1.10
==================================

View File

@@ -27,6 +27,13 @@ Installation
See the file 'INSTALL'
Release notes for 3.2
=====================
* The accessible implementations for GTK+ widgets have been integrated
into libgtk itself, and the gail module does not exist anymore. This
change should not affect applications very much.
Release notes for 3.0
=====================

View File

@@ -156,11 +156,17 @@ Use the Microsoft compiler, cl and Make, nmake. Say nmake -f
makefile.msc in gdk and gtk. Be prepared to manually edit various
makefile.msc files, and the makefile snippets in build/win32.
There are also VS 2008 solution and project files to build GTK+, which
There are also VS 2008/2010 solution and project files to build GTK+, which
are maintained by Chun-wei Fan. They should build GTK+ out of the box,
provided that the afore-mentioned dependencies are installed. They will
build GDK with the Win32 backend, GTK+ itself and the gtk-demo program.
(The GAIL and GAIL-util sources are not built by this method yet)
build GDK with the Win32 backend, GTK+ itself (with GAIL/a11y built in),
the GAIL-Util library and the gtk-demo program.
Please refer to the following GNOME Live! page for a more detailed ouline
on the process of building the GTK+ stack and its dependencies with Visual
C++:
https://live.gnome.org/GTK%2B/Win32/MSVCCompilationOfGTKStack
Alternative 1 also generates Microsoft import libraries (.lib), if you
have lib.exe available. It might also work for cross-compilation from

View File

@@ -7,6 +7,8 @@ test -n "$srcdir" || srcdir=.
olddir=`pwd`
cd "$srcdir"
mkdir -p m4
GTKDOCIZE=`which gtkdocize`
if test -z $GTKDOCIZE; then
echo "*** No GTK-Doc found, please install it ***"

View File

@@ -1,4 +1,11 @@
Note that all this is rather experimental.
Please do not compile this package (GTK+) in paths that contain
spaces in them-as strange problems may occur during compilation or during
the use of the library.
A more detailed outline for instructions on building the GTK+ with Visual
C++ can be found in the following GNOME Live! page:
https://live.gnome.org/GTK%2B/Win32/MSVCCompilationOfGTKStack
This VS10 solution and the projects it includes are intented to be used
in a GTK+ source tree unpacked from a tarball. In a git checkout you

View File

@@ -102,6 +102,23 @@ copy ..\..\..\gdk\win32\gdkwin32.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk
copy ..\..\..\gdk\gdkwindow.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
copy ..\..\..\gdk\win32\gdkwin32cursor.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
copy ..\..\..\gdk\win32\gdkwin32display.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
copy ..\..\..\gdk\win32\gdkwin32displaymanager.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
copy ..\..\..\gdk\win32\gdkwin32dnd.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
copy ..\..\..\gdk\win32\gdkwin32keys.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
copy ..\..\..\gdk\win32\gdkwin32screen.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
copy ..\..\..\gdk\win32\gdkwin32window.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gdk\win32
mkdir $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk
copy ..\..\..\gtk\gtk.h $(CopyDir)\include\gtk-$(GtkApiVersion)\gtk

View File

@@ -1,4 +1,11 @@
Note that all this is rather experimental.
Please do not compile this package (GTK+) in paths that contain
spaces in them-as strange problems may occur during compilation or during
the use of the library.
A more detailed outline for instructions on building the GTK+ with Visual
C++ can be found in the following GNOME Live! page:
https://live.gnome.org/GTK%2B/Win32/MSVCCompilationOfGTKStack
This VS9 solution and the projects it includes are intented to be used
in a GTK+ source tree unpacked from a tarball. In a git checkout you

View File

@@ -105,6 +105,15 @@ copy ..\..\..\gdk\gdkvisual.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#
copy ..\..\..\gdk\win32\gdkwin32.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;
copy ..\..\..\gdk\gdkwindow.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk&#x0D;&#x0A;
mkdir $(OutDir)\include\gtk-$(GtkApiVersion)\gdk\win32&#x0D;&#x0A;
copy ..\..\..\gdk\win32\gdkwin32cursor.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk\win32&#x0D;&#x0A;
copy ..\..\..\gdk\win32\gdkwin32display.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk\win32&#x0D;&#x0A;
copy ..\..\..\gdk\win32\gdkwin32displaymanager.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk\win32&#x0D;&#x0A;
copy ..\..\..\gdk\win32\gdkwin32dnd.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk\win32&#x0D;&#x0A;
copy ..\..\..\gdk\win32\gdkwin32keys.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk\win32&#x0D;&#x0A;
copy ..\..\..\gdk\win32\gdkwin32screen.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk\win32&#x0D;&#x0A;
copy ..\..\..\gdk\win32\gdkwin32window.h $(OutDir)\include\gtk-$(GtkApiVersion)\gdk\win32&#x0D;&#x0A;
mkdir $(OutDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtk.h $(OutDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;
copy ..\..\..\gtk\gtkaboutdialog.h $(OutDir)\include\gtk-$(GtkApiVersion)\gtk&#x0D;&#x0A;

View File

@@ -112,11 +112,15 @@
/* Have the Xrandr extension library */
/* #undef HAVE_RANDR */
/* Define to 1 if shm.h is available */
/* #undef HAVE_SHM_H */
/* Define to 1 if rint() is available */
#ifndef _MSC_VER
#define HAVE_RINT 1
#endif
/* Define to 1 if sigsetjmp is available */
/* #undef HAVE_SIGSETJMP */
/* Define to 1 if round() is available */
#ifndef _MSC_VER
#define HAVE_ROUND 1
#endif
/* Have the sockaddr_un.sun_len member */
/* #undef HAVE_SOCKADDR_UN_SUN_LEN */
@@ -128,6 +132,9 @@
#ifndef _MSC_VER
#define HAVE_STDINT_H 1
#else
#if (_MSC_VER >= 1600) /* VS 2010+ ships with stdint.h */
#define HAVE_STDINT_H 1
#endif
/* #undef HAVE_STDINT_H */
#endif
@@ -135,7 +142,9 @@
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the <strings.h> header file. */
#ifndef _MSC_VER
#define HAVE_STRINGS_H 1
#endif
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1

View File

@@ -9,9 +9,9 @@
# set GTK_BINARY_AGE and GTK_INTERFACE_AGE to 0.
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [1])
m4_define([gtk_micro_version], [10])
m4_define([gtk_interface_age], [0])
m4_define([gtk_minor_version], [2])
m4_define([gtk_micro_version], [3])
m4_define([gtk_interface_age], [3])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
m4_define([gtk_version],
@@ -41,9 +41,9 @@ m4_define([gtk_binary_version], [3.0.0])
# required versions of other packages
m4_define([glib_required_version], [2.29.14])
m4_define([pango_required_version], [1.29.0])
m4_define([atk_required_version], [1.30])
m4_define([atk_required_version], [2.1.5])
m4_define([cairo_required_version], [1.10.0])
m4_define([gdk_pixbuf_required_version], [2.22.0])
m4_define([gdk_pixbuf_required_version], [2.23.5])
m4_define([introspection_required_version], [0.10.1])
GLIB_REQUIRED_VERSION=glib_required_version
PANGO_REQUIRED_VERSION=pango_required_version
@@ -62,7 +62,7 @@ AC_SUBST(INTROSPECTION_REQUIRED_VERSION)
# Save this value here, since automake will set cflags later
cflags_set=${CFLAGS+set}
AM_INIT_AUTOMAKE([1.11 no-define -Wno-portability tar-ustar no-dist-gzip dist-xz])
AM_INIT_AUTOMAKE([1.11 -Wall no-define -Wno-portability tar-ustar no-dist-gzip dist-xz])
AM_MAINTAINER_MODE([enable])
# Support silent build rules. Disable
@@ -318,6 +318,11 @@ if test -z "$backend_set"; then
fi
fi
AC_ARG_ENABLE(quartz-relocation,
[AS_HELP_STRING([--enable-quartz-relocation],
[enable bundle-based relocation functions])],
[quartz_relocation=yes])
cairo_backends=
backend_immodules=
GDK_BACKENDS=
@@ -327,7 +332,7 @@ GDK_WINDOWING=
GIO_PACKAGE=gio-2.0
PANGO_PACKAGES="pango pangocairo"
if test "x$enable_x11_backend" = xyes; then
if test "$enable_x11_backend" = "yes"; then
# GDK calls the xlib backend "x11," cairo calls it "xlib." Other
# backend names are identical.
cairo_backends="$cairo_backends cairo-xlib"
@@ -340,7 +345,7 @@ if test "x$enable_x11_backend" = xyes; then
#define GDK_WINDOWING_X11"
fi
if test "x$enable_win32_backend" = xyes; then
if test "$enable_win32_backend" = "yes"; then
cairo_backends="$cairo_backends cairo-win32"
GDK_BACKENDS="$GDK_BACKENDS win32"
backend_immodules="$backend_immodules,ime"
@@ -360,6 +365,10 @@ if test "x$enable_quartz_backend" = xyes; then
#define GDK_WINDOWING_QUARTZ"
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -framework Cocoa"
AM_CONDITIONAL(USE_QUARTZ, true)
if test "x$quartz_relocation" = xyes; then
AC_DEFINE([QUARTZ_RELOCATION], [1], [Use NSBundle functions to determine load paths for libraries, translations, etc.])
fi
else
AM_CONDITIONAL(USE_QUARTZ, false)
fi
@@ -383,7 +392,7 @@ if test "x$enable_wayland_backend" == "xyes"; then
GIO_PACKAGE=gio-unix-2.0
GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_WAYLAND"
WAYLAND_PACKAGES="wayland-client xkbcommon wayland-egl"
WAYLAND_PACKAGES="wayland-client xkbcommon wayland-egl egl"
AM_CONDITIONAL(USE_WAYLAND, true)
else
AM_CONDITIONAL(USE_WAYLAND, false)
@@ -753,6 +762,18 @@ if test $gtk_uxtheme_h = yes; then
fi
AC_MSG_RESULT($gtk_uxtheme_h)
# Check for round()
AC_CHECK_LIB(m,round,have_round=yes,have_round=no)
if test $have_round = yes; then
AC_DEFINE(HAVE_ROUND, 1, [Define to 1 if round() is available])
fi
# Check for rint()
AC_CHECK_LIB(m,rint,have_rint=yes,have_rint=no)
if test $have_rint = yes; then
AC_DEFINE(HAVE_RINT, 1, [Define to 1 if rint() is available])
fi
# Checks for gdkspawn
AC_CHECK_HEADERS(crt_externs.h)
AC_CHECK_FUNCS(_NSGetEnviron)
@@ -1251,7 +1272,7 @@ LDFLAGS="$saved_ldflags"
GDK_PACKAGES="$PANGO_PACKAGES $GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES gdk-pixbuf-2.0 $cairo_backends cairo-gobject"
GDK_DEP_LIBS="$GDK_EXTRA_LIBS `$PKG_CONFIG --libs $GDK_PACKAGES`"
GDK_DEP_LIBS="$GDK_EXTRA_LIBS `$PKG_CONFIG --libs $GDK_PACKAGES` $MATH_LIB"
GDK_DEP_CFLAGS="`$PKG_CONFIG --cflags gthread-2.0 $GDK_PACKAGES` $GDK_EXTRA_CFLAGS"
#
# If we aren't writing explicit dependencies, then don't put the extra libraries we need
@@ -1308,7 +1329,7 @@ if test x"$os_openbsd" = xyes; then
fi
GTK_EXTRA_CFLAGS=
GTK_DEP_LIBS="$GDK_EXTRA_LIBS $GTK_DEP_LIBS_FOR_X `$PKG_CONFIG --libs $PANGO_PACKAGES $GTK_PACKAGES_FOR_X $GTK_PACKAGES` $GTK_EXTRA_LIBS"
GTK_DEP_LIBS="$GDK_EXTRA_LIBS $GTK_DEP_LIBS_FOR_X `$PKG_CONFIG --libs $PANGO_PACKAGES $GTK_PACKAGES_FOR_X $GTK_PACKAGES` $GTK_EXTRA_LIBS $MATH_LIB"
GTK_DEP_CFLAGS="`$PKG_CONFIG --cflags gthread-2.0 $GDK_PACKAGES $GTK_PACKAGES` $GDK_EXTRA_CFLAGS $GTK_EXTRA_CFLAGS"
if test x"$os_win32" = xyes; then
@@ -1528,7 +1549,7 @@ GOBJECT_INTROSPECTION_CHECK(introspection_required_version)
AC_ARG_ENABLE(packagekit,
[AS_HELP_STRING([--enable-packagekit=@<:@yes/no/auto@:>@],
[build packagekit open-with module [default=auto]])],
[build PackageKit open-with module [default=auto]])],
[enable_packagekit="$enableval"],
[enable_packagekit=auto])
if test "$enable_packagekit" = "auto"; then
@@ -1539,7 +1560,7 @@ if test "$enable_packagekit" = "auto"; then
fi
fi
AC_MSG_CHECKING([Whether to use PackageKit])
AC_MSG_CHECKING([whether to use PackageKit])
build_packagekit=no
if test "x$enable_packagekit" != "xno"; then
if test "$os_win32" != "yes"; then
@@ -1562,22 +1583,26 @@ AC_ARG_ENABLE(colord,
[build colord support code [default=auto]])],
[enable_colord="$enableval"],
[enable_colord=auto])
AC_MSG_CHECKING([whether to use colord])
if test "$enable_colord" = "auto"; then
if test "$os_win32" = "yes"; then
enable_colord=no
else
enable_colord=yes
fi
fi
if test "$enable_colord" != "no"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
AC_MSG_CHECKING([Whether to use colord])
have_colord=no
if test "x$enable_colord" != "xno"; then
if test "$enable_colord" != "no"; then
if test "$os_win32" != "yes"; then
PKG_CHECK_MODULES(COLORD, colord >= 0.1.9,
have_colord=yes, have_colord=no)
if test "enable_colord" = "yes"; then
if test "have_colord" = "no"; then
if test "$enable_colord" = "yes"; then
if test "$have_colord" = "no"; then
AC_MSG_ERROR([--enable-colord specified, but not available])
fi
fi
@@ -1585,9 +1610,8 @@ if test "x$enable_colord" != "xno"; then
AC_MSG_ERROR([colord support is not available on win32])
fi
fi
AC_MSG_RESULT([$have_colord])
if test "have_colord" = "yes"; then
if test "$have_colord" = "yes"; then
AC_DEFINE(HAVE_COLORD, 1, [define if we have colord])
fi
AM_CONDITIONAL(HAVE_COLORD, test "x$have_colord" = "xyes")
@@ -1775,7 +1799,7 @@ echo " GTK+ $GTK_VERSION"
echo " ==========="
echo ""
echo " GDK backends: $GDK_BACKENDS"
if test "x$enable_x11_backend" = "xyes"; then
if test "$enable_x11_backend" = "yes"; then
echo " X11 extensions: $X_EXTENSIONS"
fi
echo " Print backends: $PRINT_BACKENDS"

View File

@@ -73,7 +73,7 @@ EXTRA_DIST += \
demo.ui
demos.h: @REBUILD@ $(demos) geninclude.pl
(here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos)) > demos.h
$(AM_V_GEN) (here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos)) > demos.h
gtk3_demo_SOURCES = \
$(demos) \

View File

@@ -25,8 +25,8 @@ activate_action (GtkAction *action)
GtkSettings *settings = gtk_settings_get_default ();
g_object_set (G_OBJECT (settings),
"gtk-application-prefer-dark-theme", value,
NULL);
"gtk-application-prefer-dark-theme", value,
NULL);
return;
}
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
@@ -69,7 +69,7 @@ activate_radio_action (GtkAction *action, GtkRadioAction *current)
static void
about_cb (GtkAction *action,
GtkWidget *window)
GtkWidget *window)
{
GdkPixbuf *pixbuf, *transparent;
gchar *filename;
@@ -102,21 +102,21 @@ about_cb (GtkAction *action,
}
gtk_show_about_dialog (GTK_WINDOW (window),
"program-name", "GTK+ Code Demos",
"version", g_strdup_printf ("%s,\nRunning against GTK+ %d.%d.%d",
PACKAGE_VERSION,
gtk_get_major_version (),
gtk_get_minor_version (),
gtk_get_micro_version ()),
"copyright", "(C) 1997-2009 The GTK+ Team",
"license-type", GTK_LICENSE_LGPL_2_1,
"website", "http://www.gtk.org",
"comments", "Program to demonstrate GTK+ functions.",
"authors", authors,
"documenters", documentors,
"logo", transparent,
"program-name", "GTK+ Code Demos",
"version", g_strdup_printf ("%s,\nRunning against GTK+ %d.%d.%d",
PACKAGE_VERSION,
gtk_get_major_version (),
gtk_get_minor_version (),
gtk_get_micro_version ()),
"copyright", "(C) 1997-2009 The GTK+ Team",
"license-type", GTK_LICENSE_LGPL_2_1,
"website", "http://www.gtk.org",
"comments", "Program to demonstrate GTK+ functions.",
"authors", authors,
"documenters", documentors,
"logo", transparent,
"title", "About GTK+ Code Demos",
NULL);
NULL);
g_object_unref (transparent);
}
@@ -249,9 +249,9 @@ static const gchar *ui_info =
" <menu action='PreferencesMenu'>"
" <menuitem action='DarkTheme'/>"
" <menu action='ColorMenu'>"
" <menuitem action='Red'/>"
" <menuitem action='Green'/>"
" <menuitem action='Blue'/>"
" <menuitem action='Red'/>"
" <menuitem action='Green'/>"
" <menuitem action='Blue'/>"
" </menu>"
" <menu action='ShapeMenu'>"
" <menuitem action='Square'/>"
@@ -317,10 +317,10 @@ register_stock_icons (void)
pixbuf = NULL;
filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
if (filename)
{
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
g_free (filename);
}
{
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
g_free (filename);
}
/* Register icon to accompany stock item */
if (pixbuf != NULL)
@@ -355,8 +355,8 @@ update_statusbar (GtkTextBuffer *buffer,
GtkTextIter iter;
gtk_statusbar_pop (statusbar, 0); /* clear any previous message,
* underflow is allowed
*/
* underflow is allowed
*/
count = gtk_text_buffer_get_char_count (buffer);
@@ -407,7 +407,7 @@ do_appwindow (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Application Window");
gtk_window_set_icon_name (GTK_WINDOW (window), "document-open");
@@ -416,7 +416,7 @@ do_appwindow (GtkWidget *do_widget)
G_CALLBACK (gtk_widget_destroyed),
&window);
table = gtk_table_new (1, 5, FALSE);
table = gtk_grid_new ();
gtk_container_add (GTK_CONTAINER (window), table);
@@ -425,60 +425,52 @@ do_appwindow (GtkWidget *do_widget)
action_group = gtk_action_group_new ("AppWindowActions");
open_action = g_object_new (tool_menu_action_get_type (),
"name", "Open",
"label", "_Open",
"tooltip", "Open a file",
"stock-id", GTK_STOCK_OPEN,
NULL);
"name", "Open",
"label", "_Open",
"tooltip", "Open a file",
"stock-id", GTK_STOCK_OPEN,
NULL);
gtk_action_group_add_action (action_group, open_action);
g_object_unref (open_action);
gtk_action_group_add_actions (action_group,
entries, n_entries,
window);
entries, n_entries,
window);
gtk_action_group_add_toggle_actions (action_group,
toggle_entries, n_toggle_entries,
NULL);
toggle_entries, n_toggle_entries,
NULL);
gtk_action_group_add_radio_actions (action_group,
color_entries, n_color_entries,
COLOR_RED,
G_CALLBACK (activate_radio_action),
NULL);
color_entries, n_color_entries,
COLOR_RED,
G_CALLBACK (activate_radio_action),
NULL);
gtk_action_group_add_radio_actions (action_group,
shape_entries, n_shape_entries,
SHAPE_SQUARE,
G_CALLBACK (activate_radio_action),
NULL);
shape_entries, n_shape_entries,
SHAPE_SQUARE,
G_CALLBACK (activate_radio_action),
NULL);
merge = gtk_ui_manager_new ();
g_object_set_data_full (G_OBJECT (window), "ui-manager", merge,
g_object_unref);
g_object_unref);
gtk_ui_manager_insert_action_group (merge, action_group, 0);
gtk_window_add_accel_group (GTK_WINDOW (window),
gtk_ui_manager_get_accel_group (merge));
gtk_ui_manager_get_accel_group (merge));
if (!gtk_ui_manager_add_ui_from_string (merge, ui_info, -1, &error))
{
g_message ("building menus failed: %s", error->message);
g_error_free (error);
}
{
g_message ("building menus failed: %s", error->message);
g_error_free (error);
}
bar = gtk_ui_manager_get_widget (merge, "/MenuBar");
gtk_widget_show (bar);
gtk_table_attach (GTK_TABLE (table),
bar,
/* X direction */ /* Y direction */
0, 1, 0, 1,
GTK_EXPAND | GTK_FILL, 0,
0, 0);
gtk_widget_set_halign (bar, GTK_ALIGN_FILL);
gtk_grid_attach (GTK_GRID (table), bar, 0, 0, 1, 1);
bar = gtk_ui_manager_get_widget (merge, "/ToolBar");
gtk_widget_show (bar);
gtk_table_attach (GTK_TABLE (table),
bar,
/* X direction */ /* Y direction */
0, 1, 1, 2,
GTK_EXPAND | GTK_FILL, 0,
0, 0);
gtk_widget_set_halign (bar, GTK_ALIGN_FILL);
gtk_grid_attach (GTK_GRID (table), bar, 0, 1, 1, 1);
/* Create document
*/
@@ -495,12 +487,8 @@ do_appwindow (GtkWidget *do_widget)
g_signal_connect (infobar, "response",
G_CALLBACK (gtk_widget_hide), NULL);
gtk_table_attach (GTK_TABLE (table),
infobar,
/* X direction */ /* Y direction */
0, 1, 2, 3,
GTK_EXPAND | GTK_FILL, 0,
0, 0);
gtk_widget_set_halign (infobar, GTK_ALIGN_FILL);
gtk_grid_attach (GTK_GRID (table), infobar, 0, 2, 1, 1);
sw = gtk_scrolled_window_new (NULL, NULL);
@@ -511,12 +499,11 @@ do_appwindow (GtkWidget *do_widget)
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
GTK_SHADOW_IN);
gtk_table_attach (GTK_TABLE (table),
sw,
/* X direction */ /* Y direction */
0, 1, 3, 4,
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
0, 0);
gtk_widget_set_halign (sw, GTK_ALIGN_FILL);
gtk_widget_set_valign (sw, GTK_ALIGN_FILL);
gtk_widget_set_hexpand (sw, TRUE);
gtk_widget_set_vexpand (sw, TRUE);
gtk_grid_attach (GTK_GRID (table), sw, 0, 3, 1, 1);
gtk_window_set_default_size (GTK_WINDOW (window),
200, 200);
@@ -530,16 +517,12 @@ do_appwindow (GtkWidget *do_widget)
/* Create statusbar */
statusbar = gtk_statusbar_new ();
gtk_table_attach (GTK_TABLE (table),
statusbar,
/* X direction */ /* Y direction */
0, 1, 4, 5,
GTK_EXPAND | GTK_FILL, 0,
0, 0);
gtk_widget_set_halign (sw, GTK_ALIGN_FILL);
gtk_grid_attach (GTK_GRID (table), statusbar, 0, 4, 1, 1);
/* Show text widget info in the statusbar */
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents));
g_signal_connect_object (buffer,
"changed",
G_CALLBACK (update_statusbar),
@@ -569,4 +552,3 @@ do_appwindow (GtkWidget *do_widget)
return window;
}

View File

@@ -101,6 +101,7 @@ create_page1 (GtkWidget *assistant)
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
entry = gtk_entry_new ();
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (entry), "changed",
G_CALLBACK (on_entry_changed), assistant);
@@ -146,22 +147,19 @@ create_page3 (GtkWidget *assistant)
static void
create_page4 (GtkWidget *assistant)
{
GtkWidget *page;
page = gtk_alignment_new (0.5, 0.5, 0.5, 0.0);
progress_bar = gtk_progress_bar_new ();
gtk_container_add (GTK_CONTAINER (page), progress_bar);
gtk_widget_set_halign (progress_bar, GTK_ALIGN_CENTER);
gtk_widget_set_valign (progress_bar, GTK_ALIGN_CENTER);
gtk_widget_show_all (page);
gtk_assistant_append_page (GTK_ASSISTANT (assistant), page);
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), page, GTK_ASSISTANT_PAGE_PROGRESS);
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), page, "Applying changes");
gtk_widget_show (progress_bar);
gtk_assistant_append_page (GTK_ASSISTANT (assistant), progress_bar);
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), progress_bar, GTK_ASSISTANT_PAGE_PROGRESS);
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), progress_bar, "Applying changes");
/* This prevents the assistant window from being
* closed while we're "busy" applying changes.
*/
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), page, FALSE);
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), progress_bar, FALSE);
}
GtkWidget*

View File

@@ -33,7 +33,7 @@ do_builder (GtkWidget *do_widget)
static GtkWidget *window = NULL;
GError *err = NULL;
gchar *filename;
if (!window)
{
builder = gtk_builder_new ();
@@ -41,16 +41,16 @@ do_builder (GtkWidget *do_widget)
gtk_builder_add_from_file (builder, filename, &err);
g_free (filename);
if (err)
{
g_error ("ERROR: %s\n", err->message);
return NULL;
}
{
g_error ("ERROR: %s\n", err->message);
return NULL;
}
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));
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
}
if (!gtk_widget_get_visible (window))
@@ -58,7 +58,7 @@ do_builder (GtkWidget *do_widget)
gtk_widget_show_all (window);
}
else
{
{
gtk_widget_destroy (window);
window = NULL;
}

View File

@@ -7,14 +7,14 @@
static GtkWidget *
create_bbox (gint horizontal,
char *title,
gint spacing,
gint layout)
char *title,
gint spacing,
gint layout)
{
GtkWidget *frame;
GtkWidget *bbox;
GtkWidget *button;
frame = gtk_frame_new (title);
if (horizontal)
@@ -27,13 +27,13 @@ create_bbox (gint horizontal,
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
gtk_box_set_spacing (GTK_BOX (bbox), spacing);
button = gtk_button_new_from_stock (GTK_STOCK_OK);
gtk_container_add (GTK_CONTAINER (bbox), button);
button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
gtk_container_add (GTK_CONTAINER (bbox), button);
button = gtk_button_new_from_stock (GTK_STOCK_HELP);
gtk_container_add (GTK_CONTAINER (bbox), button);
@@ -49,68 +49,68 @@ do_button_box (GtkWidget *do_widget)
GtkWidget *hbox;
GtkWidget *frame_horz;
GtkWidget *frame_vert;
if (!window)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Button 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);
main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (window), main_vbox);
frame_horz = gtk_frame_new ("Horizontal Button Boxes");
gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
gtk_box_pack_start (GTK_BOX (vbox),
create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox),
create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox),
create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (vbox),
create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (vbox),
create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (vbox),
create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (vbox),
create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (vbox),
create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
TRUE, TRUE, 5);
frame_vert = gtk_frame_new ("Vertical Button Boxes");
gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
gtk_box_pack_start (GTK_BOX (hbox),
create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (hbox),
create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (hbox),
create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (hbox),
create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (hbox),
create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (hbox),
create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (hbox),
create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
TRUE, TRUE, 5);
gtk_box_pack_start (GTK_BOX (hbox),
create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
TRUE, TRUE, 5);
}
if (!gtk_widget_get_visible (window))
@@ -118,7 +118,7 @@ do_button_box (GtkWidget *do_widget)
gtk_widget_show_all (window);
}
else
{
{
gtk_widget_destroy (window);
window = NULL;
}

View File

@@ -95,8 +95,8 @@ find_toplevel_at_pointer (GdkDisplay *display)
static gboolean
button_release_event_cb (GtkWidget *widget,
GdkEventButton *event,
gboolean *clicked)
GdkEventButton *event,
gboolean *clicked)
{
*clicked = TRUE;
return TRUE;
@@ -108,7 +108,7 @@ button_release_event_cb (GtkWidget *widget,
*/
static GtkWidget *
query_for_toplevel (GdkScreen *screen,
const char *prompt)
const char *prompt)
{
GdkDisplay *display = gdk_screen_get_display (screen);
GtkWidget *popup, *label, *frame;
@@ -132,31 +132,31 @@ query_for_toplevel (GdkScreen *screen,
cursor = gdk_cursor_new_for_display (display, GDK_CROSSHAIR);
if (gdk_pointer_grab (gtk_widget_get_window (popup), FALSE,
GDK_BUTTON_RELEASE_MASK,
NULL,
cursor,
GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS)
GDK_BUTTON_RELEASE_MASK,
NULL,
cursor,
GDK_CURRENT_TIME) == GDK_GRAB_SUCCESS)
{
gboolean clicked = FALSE;
g_signal_connect (popup, "button-release-event",
G_CALLBACK (button_release_event_cb), &clicked);
G_CALLBACK (button_release_event_cb), &clicked);
/* Process events until clicked is set by button_release_event_cb.
* We pass in may_block=TRUE since we want to wait if there
* are no events currently.
*/
while (!clicked)
g_main_context_iteration (NULL, TRUE);
g_main_context_iteration (NULL, TRUE);
toplevel = find_toplevel_at_pointer (gdk_screen_get_display (screen));
if (toplevel == popup)
toplevel = NULL;
toplevel = NULL;
}
g_object_unref (cursor);
gtk_widget_destroy (popup);
gdk_flush (); /* Really release the grab */
gdk_flush (); /* Really release the grab */
return toplevel;
}
@@ -171,8 +171,8 @@ query_change_display (ChangeDisplayInfo *info)
GtkWidget *toplevel;
toplevel = query_for_toplevel (screen,
"Please select the toplevel\n"
"to move to the new screen");
"Please select the toplevel\n"
"to move to the new screen");
if (toplevel)
gtk_window_set_screen (GTK_WINDOW (toplevel), info->current_screen);
@@ -193,19 +193,19 @@ fill_screens (ChangeDisplayInfo *info)
gint i;
for (i = 0; i < n_screens; i++)
{
GdkScreen *screen = gdk_display_get_screen (info->current_display, i);
GtkTreeIter iter;
{
GdkScreen *screen = gdk_display_get_screen (info->current_display, i);
GtkTreeIter iter;
gtk_list_store_append (GTK_LIST_STORE (info->screen_model), &iter);
gtk_list_store_set (GTK_LIST_STORE (info->screen_model), &iter,
SCREEN_COLUMN_NUMBER, i,
SCREEN_COLUMN_SCREEN, screen,
-1);
gtk_list_store_append (GTK_LIST_STORE (info->screen_model), &iter);
gtk_list_store_set (GTK_LIST_STORE (info->screen_model), &iter,
SCREEN_COLUMN_NUMBER, i,
SCREEN_COLUMN_SCREEN, screen,
-1);
if (i == 0)
gtk_tree_selection_select_iter (info->screen_selection, &iter);
}
if (i == 0)
gtk_tree_selection_select_iter (info->screen_selection, &iter);
}
}
}
@@ -215,8 +215,8 @@ fill_screens (ChangeDisplayInfo *info)
*/
static void
response_cb (GtkDialog *dialog,
gint response_id,
ChangeDisplayInfo *info)
gint response_id,
ChangeDisplayInfo *info)
{
if (response_id == GTK_RESPONSE_OK)
query_change_display (info);
@@ -230,7 +230,7 @@ response_cb (GtkDialog *dialog,
*/
static void
open_display_cb (GtkWidget *button,
ChangeDisplayInfo *info)
ChangeDisplayInfo *info)
{
GtkWidget *content_area;
GtkWidget *dialog;
@@ -240,11 +240,11 @@ open_display_cb (GtkWidget *button,
GdkDisplay *result = NULL;
dialog = gtk_dialog_new_with_buttons ("Open Display",
GTK_WINDOW (info->window),
GTK_DIALOG_MODAL,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_OK,
NULL);
GTK_WINDOW (info->window),
GTK_DIALOG_MODAL,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_OK,
NULL);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
display_entry = gtk_entry_new ();
@@ -264,25 +264,25 @@ open_display_cb (GtkWidget *button,
{
gint response_id = gtk_dialog_run (GTK_DIALOG (dialog));
if (response_id != GTK_RESPONSE_OK)
break;
break;
new_screen_name = gtk_editable_get_chars (GTK_EDITABLE (display_entry),
0, -1);
0, -1);
if (strcmp (new_screen_name, "") != 0)
{
result = gdk_display_open (new_screen_name);
if (!result)
{
gchar *error_msg =
g_strdup_printf ("Can't open display :\n\t%s\nplease try another one\n",
new_screen_name);
gtk_label_set_text (GTK_LABEL (dialog_label), error_msg);
g_free (error_msg);
}
{
result = gdk_display_open (new_screen_name);
if (!result)
{
gchar *error_msg =
g_strdup_printf ("Can't open display :\n\t%s\nplease try another one\n",
new_screen_name);
gtk_label_set_text (GTK_LABEL (dialog_label), error_msg);
g_free (error_msg);
}
g_free (new_screen_name);
}
g_free (new_screen_name);
}
}
gtk_widget_destroy (dialog);
@@ -293,7 +293,7 @@ open_display_cb (GtkWidget *button,
*/
static void
close_display_cb (GtkWidget *button,
ChangeDisplayInfo *info)
ChangeDisplayInfo *info)
{
if (info->current_display)
gdk_display_close (info->current_display);
@@ -305,7 +305,7 @@ close_display_cb (GtkWidget *button,
*/
static void
display_changed_cb (GtkTreeSelection *selection,
ChangeDisplayInfo *info)
ChangeDisplayInfo *info)
{
GtkTreeModel *model;
GtkTreeIter iter;
@@ -314,8 +314,8 @@ display_changed_cb (GtkTreeSelection *selection,
g_object_unref (info->current_display);
if (gtk_tree_selection_get_selected (selection, &model, &iter))
gtk_tree_model_get (model, &iter,
DISPLAY_COLUMN_DISPLAY, &info->current_display,
-1);
DISPLAY_COLUMN_DISPLAY, &info->current_display,
-1);
else
info->current_display = NULL;
@@ -327,7 +327,7 @@ display_changed_cb (GtkTreeSelection *selection,
*/
static void
screen_changed_cb (GtkTreeSelection *selection,
ChangeDisplayInfo *info)
ChangeDisplayInfo *info)
{
GtkTreeModel *model;
GtkTreeIter iter;
@@ -336,8 +336,8 @@ screen_changed_cb (GtkTreeSelection *selection,
g_object_unref (info->current_screen);
if (gtk_tree_selection_get_selected (selection, &model, &iter))
gtk_tree_model_get (model, &iter,
SCREEN_COLUMN_SCREEN, &info->current_screen,
-1);
SCREEN_COLUMN_SCREEN, &info->current_screen,
-1);
else
info->current_screen = NULL;
}
@@ -349,10 +349,10 @@ screen_changed_cb (GtkTreeSelection *selection,
*/
static void
create_frame (ChangeDisplayInfo *info,
const char *title,
GtkWidget **frame,
GtkWidget **tree_view,
GtkWidget **button_vbox)
const char *title,
GtkWidget **frame,
GtkWidget **tree_view,
GtkWidget **button_vbox)
{
GtkTreeSelection *selection;
GtkWidget *scrollwin;
@@ -366,9 +366,9 @@ create_frame (ChangeDisplayInfo *info,
scrollwin = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin),
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrollwin),
GTK_SHADOW_IN);
GTK_SHADOW_IN);
gtk_box_pack_start (GTK_BOX (hbox), scrollwin, TRUE, TRUE, 0);
*tree_view = gtk_tree_view_new ();
@@ -397,7 +397,8 @@ left_align_button_new (const char *label)
GtkWidget *button = gtk_button_new_with_mnemonic (label);
GtkWidget *child = gtk_bin_get_child (GTK_BIN (button));
gtk_misc_set_alignment (GTK_MISC (child), 0., 0.5);
gtk_widget_set_halign (child, GTK_ALIGN_START);
gtk_widget_set_valign (child, GTK_ALIGN_CENTER);
return button;
}
@@ -425,20 +426,20 @@ create_display_frame (ChangeDisplayInfo *info)
gtk_box_pack_start (GTK_BOX (button_vbox), button, FALSE, FALSE, 0);
info->display_model = (GtkTreeModel *)gtk_list_store_new (DISPLAY_NUM_COLUMNS,
G_TYPE_STRING,
GDK_TYPE_DISPLAY);
G_TYPE_STRING,
GDK_TYPE_DISPLAY);
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), info->display_model);
column = gtk_tree_view_column_new_with_attributes ("Name",
gtk_cell_renderer_text_new (),
"text", DISPLAY_COLUMN_NAME,
NULL);
gtk_cell_renderer_text_new (),
"text", DISPLAY_COLUMN_NAME,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
g_signal_connect (selection, "changed",
G_CALLBACK (display_changed_cb), info);
G_CALLBACK (display_changed_cb), info);
return frame;
}
@@ -456,20 +457,20 @@ create_screen_frame (ChangeDisplayInfo *info)
create_frame (info, "Screen", &frame, &tree_view, &button_vbox);
info->screen_model = (GtkTreeModel *)gtk_list_store_new (SCREEN_NUM_COLUMNS,
G_TYPE_INT,
GDK_TYPE_SCREEN);
G_TYPE_INT,
GDK_TYPE_SCREEN);
gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), info->screen_model);
column = gtk_tree_view_column_new_with_attributes ("Number",
gtk_cell_renderer_text_new (),
"text", SCREEN_COLUMN_NUMBER,
NULL);
gtk_cell_renderer_text_new (),
"text", SCREEN_COLUMN_NUMBER,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
info->screen_selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
g_signal_connect (info->screen_selection, "changed",
G_CALLBACK (screen_changed_cb), info);
G_CALLBACK (screen_changed_cb), info);
return frame;
}
@@ -479,8 +480,8 @@ create_screen_frame (ChangeDisplayInfo *info)
*/
static void
display_closed_cb (GdkDisplay *display,
gboolean is_error,
ChangeDisplayInfo *info)
gboolean is_error,
ChangeDisplayInfo *info)
{
GtkTreeIter iter;
gboolean valid;
@@ -492,13 +493,13 @@ display_closed_cb (GdkDisplay *display,
GdkDisplay *tmp_display;
gtk_tree_model_get (info->display_model, &iter,
DISPLAY_COLUMN_DISPLAY, &tmp_display,
-1);
DISPLAY_COLUMN_DISPLAY, &tmp_display,
-1);
if (tmp_display == display)
{
gtk_list_store_remove (GTK_LIST_STORE (info->display_model), &iter);
break;
}
{
gtk_list_store_remove (GTK_LIST_STORE (info->display_model), &iter);
break;
}
}
}
@@ -508,27 +509,27 @@ display_closed_cb (GdkDisplay *display,
*/
static void
add_display (ChangeDisplayInfo *info,
GdkDisplay *display)
GdkDisplay *display)
{
const gchar *name = gdk_display_get_name (display);
GtkTreeIter iter;
gtk_list_store_append (GTK_LIST_STORE (info->display_model), &iter);
gtk_list_store_set (GTK_LIST_STORE (info->display_model), &iter,
DISPLAY_COLUMN_NAME, name,
DISPLAY_COLUMN_DISPLAY, display,
-1);
DISPLAY_COLUMN_NAME, name,
DISPLAY_COLUMN_DISPLAY, display,
-1);
g_signal_connect (display, "closed",
G_CALLBACK (display_closed_cb), info);
G_CALLBACK (display_closed_cb), info);
}
/* Called when a new display is opened
*/
static void
display_opened_cb (GdkDisplayManager *manager,
GdkDisplay *display,
ChangeDisplayInfo *info)
GdkDisplay *display,
ChangeDisplayInfo *info)
{
add_display (info, display);
}
@@ -550,7 +551,7 @@ initialize_displays (ChangeDisplayInfo *info)
g_slist_free (tmp_list);
g_signal_connect (manager, "display-opened",
G_CALLBACK (display_opened_cb), info);
G_CALLBACK (display_opened_cb), info);
}
/* Cleans up when the toplevel is destroyed; we remove the
@@ -565,13 +566,13 @@ destroy_info (ChangeDisplayInfo *info)
GSList *tmp_list;
g_signal_handlers_disconnect_by_func (manager,
display_opened_cb,
info);
display_opened_cb,
info);
for (tmp_list = displays; tmp_list; tmp_list = tmp_list->next)
g_signal_handlers_disconnect_by_func (tmp_list->data,
display_closed_cb,
info);
display_closed_cb,
info);
g_slist_free (tmp_list);
@@ -589,7 +590,7 @@ destroy_info (ChangeDisplayInfo *info)
static void
destroy_cb (GObject *object,
ChangeDisplayInfo **info)
ChangeDisplayInfo **info)
{
destroy_info (*info);
*info = NULL;
@@ -612,18 +613,18 @@ do_changedisplay (GtkWidget *do_widget)
info = g_new0 (ChangeDisplayInfo, 1);
info->window = gtk_dialog_new_with_buttons ("Change Screen or display",
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
"Change", GTK_RESPONSE_OK,
NULL);
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
"Change", GTK_RESPONSE_OK,
NULL);
gtk_window_set_default_size (GTK_WINDOW (info->window), 300, 400);
g_signal_connect (info->window, "response",
G_CALLBACK (response_cb), info);
G_CALLBACK (response_cb), info);
g_signal_connect (info->window, "destroy",
G_CALLBACK (destroy_cb), &info);
G_CALLBACK (destroy_cb), &info);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (info->window));

View File

@@ -1,15 +1,15 @@
/* Combo boxes
/* Combo boxes
*
* The ComboBox widget allows to select one option out of a list.
* The ComboBoxEntry additionally allows the user to enter a value
* that is not in the list of options.
* that is not in the list of options.
*
* How the options are displayed is controlled by cell renderers.
*/
#include <gtk/gtk.h>
enum
enum
{
PIXBUF_COL,
TEXT_COL
@@ -20,16 +20,16 @@ strip_underscore (const gchar *text)
{
gchar *p, *q;
gchar *result;
result = g_strdup (text);
p = q = result;
while (*p)
while (*p)
{
if (*p != '_')
{
*q = *p;
q++;
}
{
*q = *p;
q++;
}
p++;
}
*q = '\0';
@@ -46,7 +46,7 @@ create_stock_icon_store (void)
GTK_STOCK_NEW,
GTK_STOCK_CLEAR,
NULL,
GTK_STOCK_OPEN
GTK_STOCK_OPEN
};
GtkStockItem item;
@@ -58,50 +58,50 @@ create_stock_icon_store (void)
gint i;
cellview = gtk_cell_view_new ();
store = gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING);
for (i = 0; i < G_N_ELEMENTS (stock_id); i++)
{
if (stock_id[i])
{
pixbuf = gtk_widget_render_icon_pixbuf (cellview, stock_id[i],
GTK_ICON_SIZE_BUTTON);
gtk_stock_lookup (stock_id[i], &item);
label = strip_underscore (item.label);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
PIXBUF_COL, pixbuf,
TEXT_COL, label,
-1);
g_object_unref (pixbuf);
g_free (label);
}
{
pixbuf = gtk_widget_render_icon_pixbuf (cellview, stock_id[i],
GTK_ICON_SIZE_BUTTON);
gtk_stock_lookup (stock_id[i], &item);
label = strip_underscore (item.label);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
PIXBUF_COL, pixbuf,
TEXT_COL, label,
-1);
g_object_unref (pixbuf);
g_free (label);
}
else
{
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
PIXBUF_COL, NULL,
TEXT_COL, "separator",
-1);
}
{
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
PIXBUF_COL, NULL,
TEXT_COL, "separator",
-1);
}
}
gtk_widget_destroy (cellview);
return GTK_TREE_MODEL (store);
}
/* A GtkCellLayoutDataFunc that demonstrates how one can control
* sensitivity of rows. This particular function does nothing
* sensitivity of rows. This particular function does nothing
* useful and just makes the second row insensitive.
*/
static void
set_sensitive (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
{
GtkTreePath *path;
gint *indices;
@@ -116,13 +116,13 @@ set_sensitive (GtkCellLayout *cell_layout,
}
/* A GtkTreeViewRowSeparatorFunc that demonstrates how rows can be
* rendered as separators. This particular function does nothing
* rendered as separators. This particular function does nothing
* useful and just turns the fourth row into a separator.
*/
static gboolean
is_separator (GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
GtkTreeIter *iter,
gpointer data)
{
GtkTreePath *path;
gboolean result;
@@ -141,11 +141,11 @@ create_capital_store (void)
gchar *group;
gchar *capital;
} capitals[] = {
{ "A - B", NULL },
{ "A - B", NULL },
{ NULL, "Albany" },
{ NULL, "Annapolis" },
{ NULL, "Atlanta" },
{ NULL, "Augusta" },
{ NULL, "Augusta" },
{ NULL, "Austin" },
{ NULL, "Baton Rouge" },
{ NULL, "Bismarck" },
@@ -199,36 +199,36 @@ create_capital_store (void)
{ NULL, "Trenton" },
{ NULL, NULL }
};
GtkTreeIter iter, iter2;
GtkTreeStore *store;
gint i;
store = gtk_tree_store_new (1, G_TYPE_STRING);
for (i = 0; capitals[i].group || capitals[i].capital; i++)
{
if (capitals[i].group)
{
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0, capitals[i].group, -1);
}
{
gtk_tree_store_append (store, &iter, NULL);
gtk_tree_store_set (store, &iter, 0, capitals[i].group, -1);
}
else if (capitals[i].capital)
{
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0, capitals[i].capital, -1);
}
{
gtk_tree_store_append (store, &iter2, &iter);
gtk_tree_store_set (store, &iter2, 0, capitals[i].capital, -1);
}
}
return GTK_TREE_MODEL (store);
}
static void
is_capital_sensitive (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
{
gboolean sensitive;
@@ -274,8 +274,8 @@ struct _MaskEntryClass
static void mask_entry_editable_init (GtkEditableInterface *iface);
G_DEFINE_TYPE_WITH_CODE (MaskEntry, mask_entry, GTK_TYPE_ENTRY,
G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
mask_entry_editable_init));
G_IMPLEMENT_INTERFACE (GTK_TYPE_EDITABLE,
mask_entry_editable_init));
static void
@@ -286,10 +286,10 @@ mask_entry_set_background (MaskEntry *entry)
if (entry->mask)
{
if (!g_regex_match_simple (entry->mask, gtk_entry_get_text (GTK_ENTRY (entry)), 0, 0))
{
gtk_widget_override_color (GTK_WIDGET (entry), 0, &error_color);
return;
}
{
gtk_widget_override_color (GTK_WIDGET (entry), 0, &error_color);
return;
}
}
gtk_widget_override_color (GTK_WIDGET (entry), 0, NULL);
@@ -338,58 +338,58 @@ do_combobox (GtkWidget *do_widget)
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Combo boxes");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed),
&window);
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
gtk_container_add (GTK_CONTAINER (window), vbox);
/* A combobox demonstrating cell renderers, separators and
* insensitive rows
* insensitive rows
*/
frame = gtk_frame_new ("Some stock icons");
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_set_border_width (GTK_CONTAINER (box), 5);
gtk_container_add (GTK_CONTAINER (frame), box);
model = create_stock_icon_store ();
combo = gtk_combo_box_new_with_model (model);
g_object_unref (model);
gtk_container_add (GTK_CONTAINER (box), combo);
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, FALSE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
"pixbuf", PIXBUF_COL,
NULL);
"pixbuf", PIXBUF_COL,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
renderer,
set_sensitive,
NULL, NULL);
renderer,
set_sensitive,
NULL, NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
"text", TEXT_COL,
NULL);
"text", TEXT_COL,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
renderer,
set_sensitive,
NULL, NULL);
renderer,
set_sensitive,
NULL, NULL);
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo),
is_separator, NULL, NULL);
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (combo),
is_separator, NULL, NULL);
gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0);
/* A combobox demonstrating trees.
*/
frame = gtk_frame_new ("Where are we ?");
@@ -398,7 +398,7 @@ do_combobox (GtkWidget *do_widget)
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_set_border_width (GTK_CONTAINER (box), 5);
gtk_container_add (GTK_CONTAINER (frame), box);
model = create_capital_store ();
combo = gtk_combo_box_new_with_model (model);
g_object_unref (model);
@@ -407,12 +407,12 @@ do_combobox (GtkWidget *do_widget)
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
"text", 0,
NULL);
"text", 0,
NULL);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
renderer,
is_capital_sensitive,
NULL, NULL);
renderer,
is_capital_sensitive,
NULL, NULL);
path = gtk_tree_path_new_from_indices (0, 8, -1);
gtk_tree_model_get_iter (model, &iter, path);
@@ -423,18 +423,18 @@ do_combobox (GtkWidget *do_widget)
*/
frame = gtk_frame_new ("Editable");
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_set_border_width (GTK_CONTAINER (box), 5);
gtk_container_add (GTK_CONTAINER (frame), box);
combo = gtk_combo_box_text_new_with_entry ();
fill_combo_entry (combo);
gtk_container_add (GTK_CONTAINER (box), combo);
entry = g_object_new (TYPE_MASK_ENTRY, NULL);
MASK_ENTRY (entry)->mask = "^([0-9]*|One|Two|2\302\275|Three)$";
gtk_container_remove (GTK_CONTAINER (combo), gtk_bin_get_child (GTK_BIN (combo)));
gtk_container_add (GTK_CONTAINER (combo), entry);
@@ -464,7 +464,7 @@ do_combobox (GtkWidget *do_widget)
gtk_widget_show_all (window);
}
else
{
{
gtk_widget_destroy (window);
window = NULL;
}

View File

@@ -11,17 +11,17 @@ static GtkWidget *entry2 = NULL;
static void
message_dialog_clicked (GtkButton *button,
gpointer user_data)
gpointer user_data)
{
GtkWidget *dialog;
static gint i = 1;
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
"This message box has been popped up the following\n"
"number of times:");
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
"This message box has been popped up the following\n"
"number of times:");
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
"%d", i);
gtk_dialog_run (GTK_DIALOG (dialog));
@@ -31,7 +31,7 @@ message_dialog_clicked (GtkButton *button,
static void
interactive_dialog_clicked (GtkButton *button,
gpointer user_data)
gpointer user_data)
{
GtkWidget *content_area;
GtkWidget *dialog;
@@ -44,13 +44,13 @@ interactive_dialog_clicked (GtkButton *button,
gint response;
dialog = gtk_dialog_new_with_buttons ("Interactive Dialog",
GTK_WINDOW (window),
GTK_DIALOG_MODAL| GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK,
GTK_RESPONSE_OK,
GTK_WINDOW (window),
GTK_DIALOG_MODAL| GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK,
GTK_RESPONSE_OK,
"_Non-stock Button",
GTK_RESPONSE_CANCEL,
NULL);
NULL);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
@@ -61,29 +61,25 @@ interactive_dialog_clicked (GtkButton *button,
stock = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
gtk_box_pack_start (GTK_BOX (hbox), stock, FALSE, FALSE, 0);
table = gtk_table_new (2, 2, FALSE);
gtk_table_set_row_spacings (GTK_TABLE (table), 4);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
table = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table), 4);
gtk_grid_set_column_spacing (GTK_GRID (table), 4);
gtk_box_pack_start (GTK_BOX (hbox), table, TRUE, TRUE, 0);
label = gtk_label_new_with_mnemonic ("_Entry 1");
gtk_table_attach_defaults (GTK_TABLE (table),
label,
0, 1, 0, 1);
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
local_entry1 = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY (local_entry1), gtk_entry_get_text (GTK_ENTRY (entry1)));
gtk_table_attach_defaults (GTK_TABLE (table), local_entry1, 1, 2, 0, 1);
gtk_grid_attach (GTK_GRID (table), local_entry1, 1, 0, 1, 1);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), local_entry1);
label = gtk_label_new_with_mnemonic ("E_ntry 2");
gtk_table_attach_defaults (GTK_TABLE (table),
label,
0, 1, 1, 2);
gtk_grid_attach (GTK_GRID (table), label, 0, 1, 1, 1);
local_entry2 = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY (local_entry2), gtk_entry_get_text (GTK_ENTRY (entry2)));
gtk_table_attach_defaults (GTK_TABLE (table), local_entry2, 1, 2, 1, 2);
gtk_grid_attach (GTK_GRID (table), local_entry2, 1, 1, 1, 1);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), local_entry2);
gtk_widget_show_all (hbox);
response = gtk_dialog_run (GTK_DIALOG (dialog));
@@ -106,12 +102,12 @@ do_dialog (GtkWidget *do_widget)
GtkWidget *button;
GtkWidget *table;
GtkWidget *label;
if (!window)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Dialogs");
g_signal_connect (window, "destroy", G_CALLBACK (gtk_widget_destroyed), &window);
@@ -129,7 +125,7 @@ do_dialog (GtkWidget *do_widget)
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
button = gtk_button_new_with_mnemonic ("_Message Dialog");
g_signal_connect (button, "clicked",
G_CALLBACK (message_dialog_clicked), NULL);
G_CALLBACK (message_dialog_clicked), NULL);
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), gtk_separator_new (GTK_ORIENTATION_HORIZONTAL),
@@ -142,33 +138,27 @@ do_dialog (GtkWidget *do_widget)
button = gtk_button_new_with_mnemonic ("_Interactive Dialog");
g_signal_connect (button, "clicked",
G_CALLBACK (interactive_dialog_clicked), NULL);
G_CALLBACK (interactive_dialog_clicked), NULL);
gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox2), button, FALSE, FALSE, 0);
table = gtk_table_new (2, 2, FALSE);
gtk_table_set_row_spacings (GTK_TABLE (table), 4);
gtk_table_set_col_spacings (GTK_TABLE (table), 4);
table = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table), 4);
gtk_grid_set_column_spacing (GTK_GRID (table), 4);
gtk_box_pack_start (GTK_BOX (hbox), table, FALSE, FALSE, 0);
label = gtk_label_new_with_mnemonic ("_Entry 1");
gtk_table_attach_defaults (GTK_TABLE (table),
label,
0, 1, 0, 1);
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
entry1 = gtk_entry_new ();
gtk_table_attach_defaults (GTK_TABLE (table), entry1, 1, 2, 0, 1);
gtk_grid_attach (GTK_GRID (table), entry1, 1, 0, 1, 1);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry1);
label = gtk_label_new_with_mnemonic ("E_ntry 2");
gtk_table_attach_defaults (GTK_TABLE (table),
label,
0, 1, 1, 2);
gtk_grid_attach (GTK_GRID (table), label, 0, 1, 1, 1);
entry2 = gtk_entry_new ();
gtk_table_attach_defaults (GTK_TABLE (table), entry2, 1, 2, 1, 2);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry2);
gtk_grid_attach (GTK_GRID (table), entry2, 1, 1, 1, 1);
}
if (!gtk_widget_get_visible (window))
@@ -176,7 +166,7 @@ do_dialog (GtkWidget *do_widget)
gtk_widget_show_all (window);
}
else
{
{
gtk_widget_destroy (window);
window = NULL;
}

View File

@@ -6,7 +6,7 @@
* GtkCellRenderer::editing-started signal to do custom setup of the
* editable widget.
*
* The cell renderers used in this demo are GtkCellRendererText,
* The cell renderers used in this demo are GtkCellRendererText,
* GtkCellRendererCombo and GtkCellRendererProgress.
*/
@@ -205,7 +205,7 @@ editing_started (GtkCellRenderer *cell,
const gchar *path,
gpointer data)
{
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (editable),
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (editable),
separator_row, NULL, NULL);
}
@@ -259,7 +259,7 @@ cell_edited (GtkCellRendererText *cell,
}
static void
add_columns (GtkTreeView *treeview,
add_columns (GtkTreeView *treeview,
GtkTreeModel *items_model,
GtkTreeModel *numbers_model)
{
@@ -306,8 +306,6 @@ add_columns (GtkTreeView *treeview,
-1, "Yummy", renderer,
"value", COLUMN_ITEM_YUMMY,
NULL);
}
GtkWidget *

View File

@@ -20,17 +20,17 @@ do_entry_buffer (GtkWidget *do_widget)
if (!window)
{
window = gtk_dialog_new_with_buttons ("GtkEntryBuffer",
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE,
GTK_RESPONSE_NONE,
NULL);
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE,
GTK_RESPONSE_NONE,
NULL);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect (window, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
@@ -64,5 +64,3 @@ do_entry_buffer (GtkWidget *do_widget)
return window;
}

View File

@@ -15,7 +15,7 @@ create_completion_model (void)
{
GtkListStore *store;
GtkTreeIter iter;
store = gtk_list_store_new (1, G_TYPE_STRING);
/* Append one word */
@@ -29,7 +29,7 @@ create_completion_model (void)
/* And another word */
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, "totally", -1);
return GTK_TREE_MODEL (store);
}
@@ -43,51 +43,51 @@ do_entry_completion (GtkWidget *do_widget)
GtkWidget *entry;
GtkEntryCompletion *completion;
GtkTreeModel *completion_model;
if (!window)
{
window = gtk_dialog_new_with_buttons ("GtkEntryCompletion",
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE,
GTK_RESPONSE_NONE,
NULL);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
{
window = gtk_dialog_new_with_buttons ("GtkEntryCompletion",
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE,
GTK_RESPONSE_NONE,
NULL);
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);
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));
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_set_border_width (GTK_CONTAINER (vbox), 5);
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);
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label), "Completion demo, try writing <b>total</b> or <b>gnome</b> for example.");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label), "Completion demo, try writing <b>total</b> or <b>gnome</b> for example.");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
/* Create our entry */
entry = gtk_entry_new ();
gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
/* Create our entry */
entry = gtk_entry_new ();
gtk_box_pack_start (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
/* Create the completion object */
completion = gtk_entry_completion_new ();
/* Create the completion object */
completion = gtk_entry_completion_new ();
/* Assign the completion to the entry */
gtk_entry_set_completion (GTK_ENTRY (entry), completion);
g_object_unref (completion);
/* Create a tree model and use it as the completion model */
completion_model = create_completion_model ();
gtk_entry_completion_set_model (completion, completion_model);
g_object_unref (completion_model);
/* Use model column 0 as the text column */
gtk_entry_completion_set_text_column (completion, 0);
}
/* Assign the completion to the entry */
gtk_entry_set_completion (GTK_ENTRY (entry), completion);
g_object_unref (completion);
/* Create a tree model and use it as the completion model */
completion_model = create_completion_model ();
gtk_entry_completion_set_model (completion, completion_model);
g_object_unref (completion_model);
/* Use model column 0 as the text column */
gtk_entry_completion_set_text_column (completion, 0);
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
@@ -96,5 +96,3 @@ do_entry_completion (GtkWidget *do_widget)
return window;
}

View File

@@ -17,21 +17,21 @@ do_expander (GtkWidget *do_widget)
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *expander;
if (!window)
{
window = gtk_dialog_new_with_buttons ("GtkExpander",
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE,
GTK_RESPONSE_NONE,
NULL);
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE,
GTK_RESPONSE_NONE,
NULL);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect (window, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
@@ -57,5 +57,3 @@ do_expander (GtkWidget *do_widget)
return window;
}

View File

@@ -1,8 +1,8 @@
/* Text Widget/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.
* They can also affect the behavior of mouse and key presses, as this demo
* 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.
* They can also affect the behavior of mouse and key presses, as this demo
* shows.
*/
@@ -12,19 +12,19 @@
/* Inserts a piece of text into the buffer, giving it the usual
* appearance of a hyperlink in a web browser: blue and underlined.
* Additionally, attaches some data on the tag, to make it recognizable
* as a link.
* as a link.
*/
static void
insert_link (GtkTextBuffer *buffer,
GtkTextIter *iter,
gchar *text,
static void
insert_link (GtkTextBuffer *buffer,
GtkTextIter *iter,
gchar *text,
gint page)
{
GtkTextTag *tag;
tag = gtk_text_buffer_create_tag (buffer, NULL,
"foreground", "blue",
"underline", PANGO_UNDERLINE_SINGLE,
tag = gtk_text_buffer_create_tag (buffer, NULL,
"foreground", "blue",
"underline", PANGO_UNDERLINE_SINGLE,
NULL);
g_object_set_data (G_OBJECT (tag), "page", GINT_TO_POINTER (page));
gtk_text_buffer_insert_with_tags (buffer, iter, text, -1, tag, NULL);
@@ -34,7 +34,7 @@ insert_link (GtkTextBuffer *buffer,
* hypertext app, this method would parse a file to identify the links.
*/
static void
show_page (GtkTextBuffer *buffer,
show_page (GtkTextBuffer *buffer,
gint page)
{
GtkTextIter iter;
@@ -51,7 +51,7 @@ show_page (GtkTextBuffer *buffer,
}
else if (page == 2)
{
gtk_text_buffer_insert (buffer, &iter,
gtk_text_buffer_insert (buffer, &iter,
"A tag is an attribute that can be applied to some range of text. "
"For example, a tag might be called \"bold\" and make the text inside "
"the tag bold. However, the tag concept is more general than that; "
@@ -60,27 +60,27 @@ show_page (GtkTextBuffer *buffer,
"user can't edit it, or countless other things.\n", -1);
insert_link (buffer, &iter, "Go back", 1);
}
else if (page == 3)
else if (page == 3)
{
GtkTextTag *tag;
tag = gtk_text_buffer_create_tag (buffer, NULL,
"weight", PANGO_WEIGHT_BOLD,
tag = gtk_text_buffer_create_tag (buffer, NULL,
"weight", PANGO_WEIGHT_BOLD,
NULL);
gtk_text_buffer_insert_with_tags (buffer, &iter, "hypertext:\n", -1, tag, NULL);
gtk_text_buffer_insert (buffer, &iter,
gtk_text_buffer_insert (buffer, &iter,
"machine-readable text that is not sequential but is organized "
"so that related items of information are connected.\n", -1);
insert_link (buffer, &iter, "Go back", 1);
}
}
/* Looks at all tags covering the position of iter in the text view,
/* Looks at all tags covering the position of iter in the text view,
* and if one of them is a link, follow it by showing the page identified
* by the data attached to it.
*/
static void
follow_if_link (GtkWidget *text_view,
follow_if_link (GtkWidget *text_view,
GtkTextIter *iter)
{
GSList *tags = NULL, *tagp = NULL;
@@ -98,7 +98,7 @@ follow_if_link (GtkWidget *text_view,
}
}
if (tags)
if (tags)
g_slist_free (tags);
}
@@ -113,10 +113,10 @@ key_press_event (GtkWidget *text_view,
switch (event->keyval)
{
case GDK_KEY_Return:
case GDK_KEY_Return:
case GDK_KEY_KP_Enter:
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view));
gtk_text_buffer_get_iter_at_mark (buffer, &iter,
gtk_text_buffer_get_iter_at_mark (buffer, &iter,
gtk_text_buffer_get_insert (buffer));
follow_if_link (text_view, &iter);
break;
@@ -154,7 +154,7 @@ event_after (GtkWidget *text_view,
if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end))
return FALSE;
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
GTK_TEXT_WINDOW_WIDGET,
event->x, event->y, &x, &y);
@@ -169,7 +169,7 @@ static gboolean hovering_over_link = FALSE;
static GdkCursor *hand_cursor = NULL;
static GdkCursor *regular_cursor = NULL;
/* Looks at all tags covering the position (x, y) in the text view,
/* Looks at all tags covering the position (x, y) in the text view,
* and if one of them is a link, change the cursor to the "hands" cursor
* typically used by web browsers.
*/
@@ -183,14 +183,14 @@ set_cursor_if_appropriate (GtkTextView *text_view,
gboolean hovering = FALSE;
gtk_text_view_get_iter_at_location (text_view, &iter, x, y);
tags = gtk_text_iter_get_tags (&iter);
for (tagp = tags; tagp != NULL; tagp = tagp->next)
{
GtkTextTag *tag = tagp->data;
gint page = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (tag), "page"));
if (page != 0)
if (page != 0)
{
hovering = TRUE;
break;
@@ -207,11 +207,11 @@ set_cursor_if_appropriate (GtkTextView *text_view,
gdk_window_set_cursor (gtk_text_view_get_window (text_view, GTK_TEXT_WINDOW_TEXT), regular_cursor);
}
if (tags)
if (tags)
g_slist_free (tags);
}
/* Update the cursor image if the pointer moved.
/* Update the cursor image if the pointer moved.
*/
static gboolean
motion_notify_event (GtkWidget *text_view,
@@ -219,7 +219,7 @@ motion_notify_event (GtkWidget *text_view,
{
gint x, y;
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
GTK_TEXT_WINDOW_WIDGET,
event->x, event->y, &x, &y);
@@ -242,7 +242,7 @@ visibility_notify_event (GtkWidget *text_view,
gdk_window_get_pointer (gtk_widget_get_window (text_view),
&wx, &wy, NULL);
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (text_view),
GTK_TEXT_WINDOW_WIDGET,
wx, wy, &bx, &by);
@@ -264,13 +264,13 @@ do_hypertext (GtkWidget *do_widget)
hand_cursor = gdk_cursor_new (GDK_HAND2);
regular_cursor = gdk_cursor_new (GDK_XTERM);
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);
@@ -279,17 +279,17 @@ do_hypertext (GtkWidget *do_widget)
view = gtk_text_view_new ();
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD);
g_signal_connect (view, "key-press-event",
g_signal_connect (view, "key-press-event",
G_CALLBACK (key_press_event), NULL);
g_signal_connect (view, "event-after",
g_signal_connect (view, "event-after",
G_CALLBACK (event_after), NULL);
g_signal_connect (view, "motion-notify-event",
g_signal_connect (view, "motion-notify-event",
G_CALLBACK (motion_notify_event), NULL);
g_signal_connect (view, "visibility-notify-event",
g_signal_connect (view, "visibility-notify-event",
G_CALLBACK (visibility_notify_event), NULL);
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
@@ -314,4 +314,3 @@ do_hypertext (GtkWidget *do_widget)
return window;
}

View File

@@ -85,23 +85,23 @@ fill_store (GtkListStore *store)
/* We ignore hidden files that start with a '.' */
if (name[0] != '.')
{
path = g_build_filename (parent, name, NULL);
{
path = g_build_filename (parent, name, NULL);
is_dir = g_file_test (path, G_FILE_TEST_IS_DIR);
is_dir = g_file_test (path, G_FILE_TEST_IS_DIR);
display_name = g_filename_to_utf8 (name, -1, NULL, NULL, NULL);
display_name = g_filename_to_utf8 (name, -1, NULL, NULL, NULL);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
COL_PATH, path,
COL_DISPLAY_NAME, display_name,
COL_IS_DIRECTORY, is_dir,
COL_PIXBUF, is_dir ? folder_pixbuf : file_pixbuf,
-1);
g_free (path);
g_free (display_name);
}
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter,
COL_PATH, path,
COL_DISPLAY_NAME, display_name,
COL_IS_DIRECTORY, is_dir,
COL_PIXBUF, is_dir ? folder_pixbuf : file_pixbuf,
-1);
g_free (path);
g_free (display_name);
}
name = g_dir_read_name (dir);
}
@@ -110,9 +110,9 @@ fill_store (GtkListStore *store)
static gint
sort_func (GtkTreeModel *model,
GtkTreeIter *a,
GtkTreeIter *b,
gpointer user_data)
GtkTreeIter *a,
GtkTreeIter *b,
gpointer user_data)
{
gboolean is_dir_a, is_dir_b;
gchar *name_a, *name_b;
@@ -124,14 +124,14 @@ sort_func (GtkTreeModel *model,
gtk_tree_model_get (model, a,
COL_IS_DIRECTORY, &is_dir_a,
COL_DISPLAY_NAME, &name_a,
-1);
COL_IS_DIRECTORY, &is_dir_a,
COL_DISPLAY_NAME, &name_a,
-1);
gtk_tree_model_get (model, b,
COL_IS_DIRECTORY, &is_dir_b,
COL_DISPLAY_NAME, &name_b,
-1);
COL_IS_DIRECTORY, &is_dir_b,
COL_DISPLAY_NAME, &name_b,
-1);
if (!is_dir_a && is_dir_b)
ret = 1;
@@ -154,26 +154,26 @@ create_store (void)
GtkListStore *store;
store = gtk_list_store_new (NUM_COLS,
G_TYPE_STRING,
G_TYPE_STRING,
GDK_TYPE_PIXBUF,
G_TYPE_BOOLEAN);
G_TYPE_STRING,
G_TYPE_STRING,
GDK_TYPE_PIXBUF,
G_TYPE_BOOLEAN);
/* Set sort column and function */
gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (store),
sort_func,
NULL, NULL);
sort_func,
NULL, NULL);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
GTK_SORT_ASCENDING);
GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID,
GTK_SORT_ASCENDING);
return store;
}
static void
item_activated (GtkIconView *icon_view,
GtkTreePath *tree_path,
gpointer user_data)
GtkTreePath *tree_path,
gpointer user_data)
{
GtkListStore *store;
gchar *path;
@@ -183,11 +183,11 @@ item_activated (GtkIconView *icon_view,
store = GTK_LIST_STORE (user_data);
gtk_tree_model_get_iter (GTK_TREE_MODEL (store),
&iter, tree_path);
&iter, tree_path);
gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
COL_PATH, &path,
COL_IS_DIRECTORY, &is_dir,
-1);
COL_PATH, &path,
COL_IS_DIRECTORY, &is_dir,
-1);
if (!is_dir)
{
@@ -207,7 +207,7 @@ item_activated (GtkIconView *icon_view,
static void
up_clicked (GtkToolItem *item,
gpointer user_data)
gpointer user_data)
{
GtkListStore *store;
gchar *dir_name;
@@ -223,12 +223,12 @@ up_clicked (GtkToolItem *item,
/* Maybe de-sensitize the up button */
gtk_widget_set_sensitive (GTK_WIDGET (up_button),
strcmp (parent, "/") != 0);
strcmp (parent, "/") != 0);
}
static void
home_clicked (GtkToolItem *item,
gpointer user_data)
gpointer user_data)
{
GtkListStore *store;
@@ -241,7 +241,7 @@ home_clicked (GtkToolItem *item,
/* Sensitize the up button */
gtk_widget_set_sensitive (GTK_WIDGET (up_button),
TRUE);
TRUE);
}
static void close_window(void)
@@ -267,96 +267,96 @@ do_iconview (GtkWidget *do_widget)
gtk_window_set_default_size (GTK_WINDOW (window), 650, 400);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "GtkIconView demo");
g_signal_connect (window, "destroy",
G_CALLBACK (close_window), NULL);
G_CALLBACK (close_window), NULL);
error = NULL;
if (!load_pixbufs (&error))
{
GtkWidget *dialog;
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failed to load an image: %s",
error->message);
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failed to load an image: %s",
error->message);
g_error_free (error);
g_error_free (error);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
gtk_widget_show (dialog);
}
gtk_widget_show (dialog);
}
else
{
GtkWidget *sw;
GtkWidget *icon_view;
GtkListStore *store;
GtkWidget *vbox;
GtkWidget *tool_bar;
GtkToolItem *home_button;
{
GtkWidget *sw;
GtkWidget *icon_view;
GtkListStore *store;
GtkWidget *vbox;
GtkWidget *tool_bar;
GtkToolItem *home_button;
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
tool_bar = gtk_toolbar_new ();
gtk_box_pack_start (GTK_BOX (vbox), tool_bar, FALSE, FALSE, 0);
tool_bar = gtk_toolbar_new ();
gtk_box_pack_start (GTK_BOX (vbox), tool_bar, FALSE, FALSE, 0);
up_button = gtk_tool_button_new_from_stock (GTK_STOCK_GO_UP);
gtk_tool_item_set_is_important (up_button, TRUE);
gtk_widget_set_sensitive (GTK_WIDGET (up_button), FALSE);
gtk_toolbar_insert (GTK_TOOLBAR (tool_bar), up_button, -1);
up_button = gtk_tool_button_new_from_stock (GTK_STOCK_GO_UP);
gtk_tool_item_set_is_important (up_button, TRUE);
gtk_widget_set_sensitive (GTK_WIDGET (up_button), FALSE);
gtk_toolbar_insert (GTK_TOOLBAR (tool_bar), up_button, -1);
home_button = gtk_tool_button_new_from_stock (GTK_STOCK_HOME);
gtk_tool_item_set_is_important (home_button, TRUE);
gtk_toolbar_insert (GTK_TOOLBAR (tool_bar), home_button, -1);
home_button = gtk_tool_button_new_from_stock (GTK_STOCK_HOME);
gtk_tool_item_set_is_important (home_button, TRUE);
gtk_toolbar_insert (GTK_TOOLBAR (tool_bar), home_button, -1);
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
/* Create the store and fill it with the contents of '/' */
parent = g_strdup ("/");
store = create_store ();
fill_store (store);
/* Create the store and fill it with the contents of '/' */
parent = g_strdup ("/");
store = create_store ();
fill_store (store);
icon_view = gtk_icon_view_new_with_model (GTK_TREE_MODEL (store));
gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view),
GTK_SELECTION_MULTIPLE);
g_object_unref (store);
icon_view = gtk_icon_view_new_with_model (GTK_TREE_MODEL (store));
gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view),
GTK_SELECTION_MULTIPLE);
g_object_unref (store);
/* Connect to the "clicked" signal of the "Up" tool button */
g_signal_connect (up_button, "clicked",
G_CALLBACK (up_clicked), store);
/* Connect to the "clicked" signal of the "Up" tool button */
g_signal_connect (up_button, "clicked",
G_CALLBACK (up_clicked), store);
/* Connect to the "clicked" signal of the "Home" tool button */
g_signal_connect (home_button, "clicked",
G_CALLBACK (home_clicked), store);
/* Connect to the "clicked" signal of the "Home" tool button */
g_signal_connect (home_button, "clicked",
G_CALLBACK (home_clicked), store);
/* We now set which model columns that correspond to the text
* and pixbuf of each item
*/
gtk_icon_view_set_text_column (GTK_ICON_VIEW (icon_view), COL_DISPLAY_NAME);
gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (icon_view), COL_PIXBUF);
/* We now set which model columns that correspond to the text
* and pixbuf of each item
*/
gtk_icon_view_set_text_column (GTK_ICON_VIEW (icon_view), COL_DISPLAY_NAME);
gtk_icon_view_set_pixbuf_column (GTK_ICON_VIEW (icon_view), COL_PIXBUF);
/* Connect to the "item-activated" signal */
g_signal_connect (icon_view, "item-activated",
G_CALLBACK (item_activated), store);
gtk_container_add (GTK_CONTAINER (sw), icon_view);
/* Connect to the "item-activated" signal */
g_signal_connect (icon_view, "item-activated",
G_CALLBACK (item_activated), store);
gtk_container_add (GTK_CONTAINER (sw), icon_view);
gtk_widget_grab_focus (icon_view);
}
gtk_widget_grab_focus (icon_view);
}
}
if (!gtk_widget_get_visible (window))
@@ -369,4 +369,3 @@ do_iconview (GtkWidget *do_widget)
return window;
}

View File

@@ -47,10 +47,10 @@ create_store (void)
static void
set_cell_color (GtkCellLayout *cell_layout,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
gpointer data)
{
gchar *text;
GdkColor color;
@@ -76,9 +76,9 @@ set_cell_color (GtkCellLayout *cell_layout,
static void
edited (GtkCellRendererText *cell,
gchar *path_string,
gchar *text,
gpointer data)
gchar *path_string,
gchar *text,
gpointer data)
{
GtkTreeModel *model;
GtkTreeIter iter;
@@ -89,7 +89,7 @@ edited (GtkCellRendererText *cell,
gtk_tree_model_get_iter (model, &iter, path);
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
COL_TEXT, text, -1);
COL_TEXT, text, -1);
gtk_tree_path_free (path);
}
@@ -106,11 +106,11 @@ do_iconview_edit (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Editing and Drag-and-Drop");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
store = create_store ();
fill_store (store);
@@ -119,29 +119,29 @@ do_iconview_edit (GtkWidget *do_widget)
g_object_unref (store);
gtk_icon_view_set_selection_mode (GTK_ICON_VIEW (icon_view),
GTK_SELECTION_SINGLE);
GTK_SELECTION_SINGLE);
gtk_icon_view_set_item_orientation (GTK_ICON_VIEW (icon_view),
GTK_ORIENTATION_HORIZONTAL);
GTK_ORIENTATION_HORIZONTAL);
gtk_icon_view_set_columns (GTK_ICON_VIEW (icon_view), 2);
gtk_icon_view_set_reorderable (GTK_ICON_VIEW (icon_view), TRUE);
renderer = gtk_cell_renderer_pixbuf_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (icon_view),
renderer, TRUE);
renderer, TRUE);
gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (icon_view),
renderer,
set_cell_color,
NULL, NULL);
renderer,
set_cell_color,
NULL, NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (icon_view),
renderer, TRUE);
renderer, TRUE);
g_object_set (renderer, "editable", TRUE, NULL);
g_signal_connect (renderer, "edited", G_CALLBACK (edited), icon_view);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (icon_view),
renderer,
"text", COL_TEXT,
NULL);
renderer,
"text", COL_TEXT,
NULL);
gtk_container_add (GTK_CONTAINER (window), icon_view);
}
@@ -156,4 +156,3 @@ do_iconview_edit (GtkWidget *do_widget)
return window;
}

View File

@@ -25,7 +25,7 @@ static FILE* image_stream = NULL;
static void
progressive_prepared_callback (GdkPixbufLoader *loader,
gpointer data)
gpointer data)
{
GdkPixbuf *pixbuf;
GtkWidget *image;
@@ -44,11 +44,11 @@ progressive_prepared_callback (GdkPixbufLoader *loader,
static void
progressive_updated_callback (GdkPixbufLoader *loader,
gint x,
gint y,
gint width,
gint height,
gpointer data)
gint x,
gint y,
gint width,
gint height,
gpointer data)
{
GtkWidget *image;
@@ -86,97 +86,97 @@ progressive_timeout (gpointer data)
bytes_read = fread (buf, 1, 256, image_stream);
if (ferror (image_stream))
{
GtkWidget *dialog;
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failure reading image file 'alphatest.png': %s",
g_strerror (errno));
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failure reading image file 'alphatest.png': %s",
g_strerror (errno));
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
fclose (image_stream);
image_stream = NULL;
fclose (image_stream);
image_stream = NULL;
gtk_widget_show (dialog);
gtk_widget_show (dialog);
load_timeout = 0;
load_timeout = 0;
return FALSE; /* uninstall the timeout */
}
return FALSE; /* uninstall the timeout */
}
if (!gdk_pixbuf_loader_write (pixbuf_loader,
buf, bytes_read,
&error))
{
GtkWidget *dialog;
buf, bytes_read,
&error))
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failed to load image: %s",
error->message);
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failed to load image: %s",
error->message);
g_error_free (error);
g_error_free (error);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
fclose (image_stream);
image_stream = NULL;
fclose (image_stream);
image_stream = NULL;
gtk_widget_show (dialog);
gtk_widget_show (dialog);
load_timeout = 0;
load_timeout = 0;
return FALSE; /* uninstall the timeout */
}
return FALSE; /* uninstall the timeout */
}
if (feof (image_stream))
{
fclose (image_stream);
image_stream = NULL;
{
fclose (image_stream);
image_stream = NULL;
/* Errors can happen on close, e.g. if the image
* file was truncated we'll know on close that
* it was incomplete.
*/
error = NULL;
if (!gdk_pixbuf_loader_close (pixbuf_loader,
&error))
{
GtkWidget *dialog;
/* Errors can happen on close, e.g. if the image
* file was truncated we'll know on close that
* it was incomplete.
*/
error = NULL;
if (!gdk_pixbuf_loader_close (pixbuf_loader,
&error))
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failed to load image: %s",
error->message);
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failed to load image: %s",
error->message);
g_error_free (error);
g_error_free (error);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
gtk_widget_show (dialog);
gtk_widget_show (dialog);
g_object_unref (pixbuf_loader);
pixbuf_loader = NULL;
g_object_unref (pixbuf_loader);
pixbuf_loader = NULL;
load_timeout = 0;
load_timeout = 0;
return FALSE; /* uninstall the timeout */
}
return FALSE; /* uninstall the timeout */
}
g_object_unref (pixbuf_loader);
pixbuf_loader = NULL;
}
g_object_unref (pixbuf_loader);
pixbuf_loader = NULL;
}
}
else
{
@@ -190,55 +190,55 @@ progressive_timeout (gpointer data)
*/
filename = demo_find_file ("alphatest.png", &error);
if (error)
{
error_message = g_strdup (error->message);
g_error_free (error);
}
{
error_message = g_strdup (error->message);
g_error_free (error);
}
else
{
image_stream = g_fopen (filename, "rb");
g_free (filename);
{
image_stream = g_fopen (filename, "rb");
g_free (filename);
if (!image_stream)
error_message = g_strdup_printf ("Unable to open image file 'alphatest.png': %s",
g_strerror (errno));
}
if (!image_stream)
error_message = g_strdup_printf ("Unable to open image file 'alphatest.png': %s",
g_strerror (errno));
}
if (image_stream == NULL)
{
GtkWidget *dialog;
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"%s", error_message);
g_free (error_message);
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"%s", error_message);
g_free (error_message);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
gtk_widget_show (dialog);
gtk_widget_show (dialog);
load_timeout = 0;
load_timeout = 0;
return FALSE; /* uninstall the timeout */
}
return FALSE; /* uninstall the timeout */
}
if (pixbuf_loader)
{
gdk_pixbuf_loader_close (pixbuf_loader, NULL);
g_object_unref (pixbuf_loader);
pixbuf_loader = NULL;
}
{
gdk_pixbuf_loader_close (pixbuf_loader, NULL);
g_object_unref (pixbuf_loader);
pixbuf_loader = NULL;
}
pixbuf_loader = gdk_pixbuf_loader_new ();
g_signal_connect (pixbuf_loader, "area-prepared",
G_CALLBACK (progressive_prepared_callback), image);
G_CALLBACK (progressive_prepared_callback), image);
g_signal_connect (pixbuf_loader, "area-updated",
G_CALLBACK (progressive_updated_callback), image);
G_CALLBACK (progressive_updated_callback), image);
}
/* leave timeout installed */
@@ -256,13 +256,13 @@ start_progressive_loading (GtkWidget *image)
* pauses in the reading process.
*/
load_timeout = gdk_threads_add_timeout (150,
progressive_timeout,
image);
progressive_timeout,
image);
}
static void
cleanup_callback (GObject *object,
gpointer data)
gpointer data)
{
if (load_timeout)
{
@@ -314,7 +314,6 @@ do_images (GtkWidget *do_widget)
GtkWidget *vbox;
GtkWidget *image;
GtkWidget *label;
GtkWidget *align;
GtkWidget *button;
GdkPixbuf *pixbuf;
GIcon *gicon;
@@ -325,13 +324,13 @@ do_images (GtkWidget *do_widget)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Images");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
g_signal_connect (window, "destroy",
G_CALLBACK (cleanup_callback), NULL);
G_CALLBACK (cleanup_callback), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 8);
@@ -341,17 +340,14 @@ do_images (GtkWidget *do_widget)
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
"<u>Image loaded from a file</u>");
"<u>Image loaded from a file</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
/* The alignment keeps the frame from growing when users resize
* the window
*/
align = gtk_alignment_new (0.5, 0.5, 0, 0);
gtk_container_add (GTK_CONTAINER (align), frame);
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
/* demo_find_file() looks in the current directory first,
* so you can run gtk-demo without installing GTK, then looks
@@ -360,34 +356,34 @@ do_images (GtkWidget *do_widget)
pixbuf = NULL;
filename = demo_find_file ("gtk-logo-rgb.gif", &error);
if (filename)
{
pixbuf = gdk_pixbuf_new_from_file (filename, &error);
g_free (filename);
}
{
pixbuf = gdk_pixbuf_new_from_file (filename, &error);
g_free (filename);
}
if (error)
{
/* This code shows off error handling. You can just use
* gtk_image_new_from_file() instead if you don't want to report
* errors to the user. If the file doesn't load when using
* gtk_image_new_from_file(), a "missing image" icon will
* be displayed instead.
*/
GtkWidget *dialog;
{
/* This code shows off error handling. You can just use
* gtk_image_new_from_file() instead if you don't want to report
* errors to the user. If the file doesn't load when using
* gtk_image_new_from_file(), a "missing image" icon will
* be displayed instead.
*/
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Unable to open image file 'gtk-logo-rgb.gif': %s",
error->message);
g_error_free (error);
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Unable to open image file 'gtk-logo-rgb.gif': %s",
error->message);
g_error_free (error);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
gtk_widget_show (dialog);
}
gtk_widget_show (dialog);
}
image = gtk_image_new_from_pixbuf (pixbuf);
@@ -398,17 +394,14 @@ do_images (GtkWidget *do_widget)
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
"<u>Animation loaded from a file</u>");
"<u>Animation loaded from a file</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
/* The alignment keeps the frame from growing when users resize
* the window
*/
align = gtk_alignment_new (0.5, 0.5, 0, 0);
gtk_container_add (GTK_CONTAINER (align), frame);
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
filename = demo_find_file ("floppybuddy.gif", NULL);
image = gtk_image_new_from_file (filename);
@@ -420,17 +413,14 @@ do_images (GtkWidget *do_widget)
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
"<u>Symbolic themed icon</u>");
"<u>Symbolic themed icon</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
/* The alignment keeps the frame from growing when users resize
* the window
*/
align = gtk_alignment_new (0.5, 0.5, 0, 0);
gtk_container_add (GTK_CONTAINER (align), frame);
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gicon = g_themed_icon_new_with_default_fallbacks ("battery-caution-charging-symbolic");
image = gtk_image_new_from_gicon (gicon, GTK_ICON_SIZE_DIALOG);
@@ -442,17 +432,14 @@ do_images (GtkWidget *do_widget)
label = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (label),
"<u>Progressive image loading</u>");
"<u>Progressive image loading</u>");
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0);
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
/* The alignment keeps the frame from growing when users resize
* the window
*/
align = gtk_alignment_new (0.5, 0.5, 0, 0);
gtk_container_add (GTK_CONTAINER (align), frame);
gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0);
gtk_widget_set_halign (frame, GTK_ALIGN_CENTER);
gtk_widget_set_valign (frame, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
/* Create an empty image for now; the progressive loader
* will create the pixbuf and fill it in.

View File

@@ -15,10 +15,10 @@ on_bar_response (GtkInfoBar *info_bar,
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
"You clicked a button on an info bar");
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
"You clicked a button on an info bar");
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
"Your response has id %d", response_id);
gtk_dialog_run (GTK_DIALOG (dialog));

View File

@@ -54,11 +54,11 @@ do_links (GtkWidget *do_widget)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Links");
gtk_container_set_border_width (GTK_CONTAINER (window), 12);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
label = gtk_label_new ("Some <a href=\"http://en.wikipedia.org/wiki/Text\""
"title=\"plain text\">text</a> may be marked up\n"

View File

@@ -43,9 +43,9 @@ get_democodedir (void)
{
result = g_win32_get_package_installation_directory_of_module (NULL);
if (result == NULL)
result = "unknown-location";
result = "unknown-location";
result = g_strconcat (result, "\\share\\gtk-2.0\\demo", NULL);
result = g_strconcat (result, "\\share\\gtk-3.0\\demo", NULL);
}
return result;
@@ -59,19 +59,19 @@ get_democodedir (void)
* demo_find_file:
* @base: base filename
* @err: location to store error, or %NULL.
*
*
* Looks for @base first in the current directory, then in the
* location GTK+ where it will be installed on make install,
* returns the first file found.
*
*
* Return value: the filename, if found or %NULL
**/
*/
gchar *
demo_find_file (const char *base,
GError **err)
GError **err)
{
g_return_val_if_fail (err == NULL || *err == NULL, NULL);
if (g_file_test ("gtk-logo-rgb.gif", G_FILE_TEST_EXISTS) &&
g_file_test (base, G_FILE_TEST_EXISTS))
return g_strdup (base);
@@ -79,12 +79,12 @@ demo_find_file (const char *base,
{
char *filename = g_build_filename (DEMOCODEDIR, base, NULL);
if (!g_file_test (filename, G_FILE_TEST_EXISTS))
{
g_set_error (err, G_FILE_ERROR, G_FILE_ERROR_NOENT,
"Cannot find demo data file \"%s\"", base);
g_free (filename);
return NULL;
}
{
g_set_error (err, G_FILE_ERROR, G_FILE_ERROR_NOENT,
"Cannot find demo data file \"%s\"", base);
g_free (filename);
return NULL;
}
return filename;
}
}
@@ -98,12 +98,12 @@ window_closed_cb (GtkWidget *window, gpointer data)
gtk_tree_model_get_iter (cbdata->model, &iter, cbdata->path);
gtk_tree_model_get (GTK_TREE_MODEL (cbdata->model), &iter,
STYLE_COLUMN, &style,
-1);
STYLE_COLUMN, &style,
-1);
if (style == PANGO_STYLE_ITALIC)
gtk_tree_store_set (GTK_TREE_STORE (cbdata->model), &iter,
STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
gtk_tree_path_free (cbdata->path);
g_free (cbdata);
@@ -113,17 +113,17 @@ gboolean
read_line (FILE *stream, GString *str)
{
int n_read = 0;
#ifdef HAVE_FLOCKFILE
flockfile (stream);
#endif
g_string_truncate (str, 0);
while (1)
{
int c;
#ifdef HAVE_FLOCKFILE
c = getc_unlocked (stream);
#else
@@ -131,31 +131,31 @@ read_line (FILE *stream, GString *str)
#endif
if (c == EOF)
goto done;
goto done;
else
n_read++;
n_read++;
switch (c)
{
case '\r':
case '\n':
{
{
case '\r':
case '\n':
{
#ifdef HAVE_FLOCKFILE
int next_c = getc_unlocked (stream);
int next_c = getc_unlocked (stream);
#else
int next_c = getc (stream);
int next_c = getc (stream);
#endif
if (!(next_c == EOF ||
(c == '\r' && next_c == '\n') ||
(c == '\n' && next_c == '\r')))
ungetc (next_c, stream);
goto done;
}
default:
g_string_append_c (str, c);
}
if (!(next_c == EOF ||
(c == '\r' && next_c == '\n') ||
(c == '\n' && next_c == '\r')))
ungetc (next_c, stream);
goto done;
}
default:
g_string_append_c (str, c);
}
}
done:
@@ -333,10 +333,10 @@ static gchar *control[] =
};
void
parse_chars (gchar *text,
gchar **end_ptr,
gint *state,
gchar **tag,
gboolean start)
gchar **end_ptr,
gint *state,
gchar **tag,
gboolean start)
{
gint i;
gchar *next_token;
@@ -346,11 +346,11 @@ parse_chars (gchar *text,
{
*end_ptr = strstr (text, "*/");
if (*end_ptr)
{
*end_ptr += 2;
*state = STATE_NORMAL;
*tag = "comment";
}
{
*end_ptr += 2;
*state = STATE_NORMAL;
*tag = "comment";
}
return;
}
@@ -362,9 +362,9 @@ parse_chars (gchar *text,
{
*end_ptr = strstr (text, "*/");
if (*end_ptr)
*end_ptr += 2;
*end_ptr += 2;
else
*state = STATE_IN_COMMENT;
*state = STATE_IN_COMMENT;
*tag = "comment";
return;
}
@@ -381,29 +381,29 @@ parse_chars (gchar *text,
if (start && * text != '\t' && *text != ' ' && *text != '{' && *text != '}')
{
if (strstr (text, "("))
{
*end_ptr = strstr (text, "(");
*tag = "function";
return;
}
{
*end_ptr = strstr (text, "(");
*tag = "function";
return;
}
}
/* check for types */
for (i = 0; types[i] != NULL; i++)
if (!strncmp (text, types[i], strlen (types[i])) ||
(start && types[i][0] == ' ' && !strncmp (text, types[i] + 1, strlen (types[i]) - 1)))
{
*end_ptr = text + strlen (types[i]);
*tag = "type";
return;
*end_ptr = text + strlen (types[i]);
*tag = "type";
return;
}
/* check for control */
for (i = 0; control[i] != NULL; i++)
if (!strncmp (text, control[i], strlen (control[i])))
{
*end_ptr = text + strlen (control[i]);
*tag = "control";
return;
*end_ptr = text + strlen (control[i]);
*tag = "control";
return;
}
/* check for string */
@@ -414,18 +414,18 @@ parse_chars (gchar *text,
*end_ptr = text + 1;
*tag = "string";
while (**end_ptr != '\000')
{
if (**end_ptr == '\"' && !maybe_escape)
{
*end_ptr += 1;
return;
}
if (**end_ptr == '\\')
maybe_escape = TRUE;
else
maybe_escape = FALSE;
*end_ptr += 1;
}
{
if (**end_ptr == '\"' && !maybe_escape)
{
*end_ptr += 1;
return;
}
if (**end_ptr == '\\')
maybe_escape = TRUE;
else
maybe_escape = FALSE;
*end_ptr += 1;
}
return;
}
@@ -434,36 +434,36 @@ parse_chars (gchar *text,
{
next_token = strstr (text, tokens[i]);
if (next_token)
{
if (*end_ptr)
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
else
*end_ptr = next_token;
}
{
if (*end_ptr)
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
else
*end_ptr = next_token;
}
}
for (i = 0; types[i] != NULL; i++)
{
next_token = strstr (text, types[i]);
if (next_token)
{
if (*end_ptr)
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
else
*end_ptr = next_token;
}
{
if (*end_ptr)
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
else
*end_ptr = next_token;
}
}
for (i = 0; control[i] != NULL; i++)
{
next_token = strstr (text, control[i]);
if (next_token)
{
if (*end_ptr)
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
else
*end_ptr = next_token;
}
{
if (*end_ptr)
*end_ptr = (*end_ptr<next_token)?*end_ptr:next_token;
else
*end_ptr = next_token;
}
}
}
@@ -488,25 +488,25 @@ fontify (void)
start_ptr = text = gtk_text_iter_get_text (&start_iter, &next_iter);
do
{
parse_chars (start_ptr, &end_ptr, &state, &tag, start);
{
parse_chars (start_ptr, &end_ptr, &state, &tag, start);
start = FALSE;
if (end_ptr)
{
tmp_iter = start_iter;
gtk_text_iter_forward_chars (&tmp_iter, end_ptr - start_ptr);
}
else
{
tmp_iter = next_iter;
}
if (tag)
gtk_text_buffer_apply_tag_by_name (source_buffer, tag, &start_iter, &tmp_iter);
start = FALSE;
if (end_ptr)
{
tmp_iter = start_iter;
gtk_text_iter_forward_chars (&tmp_iter, end_ptr - start_ptr);
}
else
{
tmp_iter = next_iter;
}
if (tag)
gtk_text_buffer_apply_tag_by_name (source_buffer, tag, &start_iter, &tmp_iter);
start_iter = tmp_iter;
start_ptr = end_ptr;
}
start_iter = tmp_iter;
start_ptr = end_ptr;
}
while (end_ptr);
g_free (text);
@@ -533,7 +533,7 @@ load_file (const gchar *filename)
g_free (current_file);
current_file = g_strdup (filename);
gtk_text_buffer_get_bounds (info_buffer, &start, &end);
gtk_text_buffer_delete (info_buffer, &start, &end);
@@ -564,101 +564,101 @@ load_file (const gchar *filename)
gchar *p = buffer->str;
gchar *q;
gchar *r;
switch (state)
{
case 0:
/* Reading title */
while (*p == '/' || *p == '*' || g_ascii_isspace (*p))
p++;
r = p;
while (*r != '/' && strlen (r))
r++;
if (strlen (r) > 0)
p = r + 1;
q = p + strlen (p);
while (q > p && g_ascii_isspace (*(q - 1)))
q--;
{
case 0:
/* Reading title */
while (*p == '/' || *p == '*' || g_ascii_isspace (*p))
p++;
r = p;
while (*r != '/' && strlen (r))
r++;
if (strlen (r) > 0)
p = r + 1;
q = p + strlen (p);
while (q > p && g_ascii_isspace (*(q - 1)))
q--;
if (q > p)
{
int len_chars = g_utf8_pointer_to_offset (p, q);
if (q > p)
{
int len_chars = g_utf8_pointer_to_offset (p, q);
end = start;
end = start;
g_assert (strlen (p) >= q - p);
gtk_text_buffer_insert (info_buffer, &end, p, q - p);
start = end;
g_assert (strlen (p) >= q - p);
gtk_text_buffer_insert (info_buffer, &end, p, q - p);
start = end;
gtk_text_iter_backward_chars (&start, len_chars);
gtk_text_buffer_apply_tag_by_name (info_buffer, "title", &start, &end);
gtk_text_iter_backward_chars (&start, len_chars);
gtk_text_buffer_apply_tag_by_name (info_buffer, "title", &start, &end);
start = end;
state++;
}
break;
case 1:
/* Reading body of info section */
while (g_ascii_isspace (*p))
p++;
if (*p == '*' && *(p + 1) == '/')
{
gtk_text_buffer_get_iter_at_offset (source_buffer, &start, 0);
state++;
}
else
{
int len;
while (*p == '*' || g_ascii_isspace (*p))
p++;
start = end;
len = strlen (p);
while (g_ascii_isspace (*(p + len - 1)))
len--;
if (len > 0)
{
if (in_para)
gtk_text_buffer_insert (info_buffer, &start, " ", 1);
state++;
}
break;
g_assert (strlen (p) >= len);
gtk_text_buffer_insert (info_buffer, &start, p, len);
in_para = 1;
}
else
{
gtk_text_buffer_insert (info_buffer, &start, "\n", 1);
in_para = 0;
}
}
break;
case 1:
/* Reading body of info section */
while (g_ascii_isspace (*p))
p++;
if (*p == '*' && *(p + 1) == '/')
{
gtk_text_buffer_get_iter_at_offset (source_buffer, &start, 0);
state++;
}
else
{
int len;
case 2:
/* Skipping blank lines */
while (g_ascii_isspace (*p))
p++;
if (*p)
{
p = buffer->str;
state++;
/* Fall through */
}
else
break;
case 3:
/* Reading program body */
gtk_text_buffer_insert (source_buffer, &start, p, -1);
gtk_text_buffer_insert (source_buffer, &start, "\n", 1);
break;
}
while (*p == '*' || g_ascii_isspace (*p))
p++;
len = strlen (p);
while (g_ascii_isspace (*(p + len - 1)))
len--;
if (len > 0)
{
if (in_para)
gtk_text_buffer_insert (info_buffer, &start, " ", 1);
g_assert (strlen (p) >= len);
gtk_text_buffer_insert (info_buffer, &start, p, len);
in_para = 1;
}
else
{
gtk_text_buffer_insert (info_buffer, &start, "\n", 1);
in_para = 0;
}
}
break;
case 2:
/* Skipping blank lines */
while (g_ascii_isspace (*p))
p++;
if (*p)
{
p = buffer->str;
state++;
/* Fall through */
}
else
break;
case 3:
/* Reading program body */
gtk_text_buffer_insert (source_buffer, &start, p, -1);
gtk_text_buffer_insert (source_buffer, &start, "\n", 1);
break;
}
}
fclose (file);
fontify ();
g_string_free (buffer, TRUE);
@@ -667,7 +667,7 @@ load_file (const gchar *filename)
void
row_activated_cb (GtkTreeView *tree_view,
GtkTreePath *path,
GtkTreeViewColumn *column)
GtkTreeViewColumn *column)
{
GtkTreeIter iter;
PangoStyle style;
@@ -676,39 +676,39 @@ row_activated_cb (GtkTreeView *tree_view,
GtkTreeModel *model;
model = gtk_tree_view_get_model (tree_view);
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_model_get (GTK_TREE_MODEL (model),
&iter,
FUNC_COLUMN, &func,
STYLE_COLUMN, &style,
-1);
&iter,
FUNC_COLUMN, &func,
STYLE_COLUMN, &style,
-1);
if (func)
{
gtk_tree_store_set (GTK_TREE_STORE (model),
&iter,
STYLE_COLUMN, (style == PANGO_STYLE_ITALIC ? PANGO_STYLE_NORMAL : PANGO_STYLE_ITALIC),
-1);
&iter,
STYLE_COLUMN, (style == PANGO_STYLE_ITALIC ? PANGO_STYLE_NORMAL : PANGO_STYLE_ITALIC),
-1);
window = (func) (gtk_widget_get_toplevel (GTK_WIDGET (tree_view)));
if (window != NULL)
{
CallbackData *cbdata;
cbdata = g_new (CallbackData, 1);
cbdata->model = model;
cbdata->path = gtk_tree_path_copy (path);
g_signal_connect (window, "destroy",
G_CALLBACK (window_closed_cb), cbdata);
}
{
CallbackData *cbdata;
cbdata = g_new (CallbackData, 1);
cbdata->model = model;
cbdata->path = gtk_tree_path_copy (path);
g_signal_connect (window, "destroy",
G_CALLBACK (window_closed_cb), cbdata);
}
}
}
static void
selection_cb (GtkTreeSelection *selection,
GtkTreeModel *model)
GtkTreeModel *model)
{
GtkTreeIter iter;
GValue value = {0, };
@@ -717,8 +717,8 @@ selection_cb (GtkTreeSelection *selection,
return;
gtk_tree_model_get_value (model, &iter,
FILENAME_COLUMN,
&value);
FILENAME_COLUMN,
&value);
if (g_value_get_string (&value))
load_file (g_value_get_string (&value));
g_value_unset (&value);
@@ -726,7 +726,7 @@ selection_cb (GtkTreeSelection *selection,
static GtkWidget *
create_text (GtkTextBuffer **buffer,
gboolean is_source)
gboolean is_source)
{
GtkWidget *scrolled_window;
GtkWidget *text_view;
@@ -734,20 +734,20 @@ create_text (GtkTextBuffer **buffer,
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_SHADOW_IN);
GTK_SHADOW_IN);
text_view = gtk_text_view_new ();
*buffer = gtk_text_buffer_new (NULL);
gtk_text_view_set_buffer (GTK_TEXT_VIEW (text_view), *buffer);
gtk_text_view_set_editable (GTK_TEXT_VIEW (text_view), FALSE);
gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (text_view), FALSE);
gtk_container_add (GTK_CONTAINER (scrolled_window), text_view);
if (is_source)
{
font_desc = pango_font_description_from_string ("monospace");
@@ -767,7 +767,7 @@ create_text (GtkTextBuffer **buffer,
gtk_text_view_set_pixels_below_lines (GTK_TEXT_VIEW (text_view),
2);
}
return scrolled_window;
}
@@ -790,7 +790,7 @@ create_tree (void)
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
gtk_tree_selection_set_mode (GTK_TREE_SELECTION (selection),
GTK_SELECTION_BROWSE);
GTK_SELECTION_BROWSE);
gtk_widget_set_size_request (tree_view, 200, -1);
/* this code only supports 1 level of children. If we
@@ -803,46 +803,46 @@ create_tree (void)
gtk_tree_store_append (GTK_TREE_STORE (model), &iter, NULL);
gtk_tree_store_set (GTK_TREE_STORE (model),
&iter,
TITLE_COLUMN, d->title,
FILENAME_COLUMN, d->filename,
FUNC_COLUMN, d->func,
STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
&iter,
TITLE_COLUMN, d->title,
FILENAME_COLUMN, d->filename,
FUNC_COLUMN, d->func,
STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
d++;
if (!children)
continue;
while (children->title)
{
GtkTreeIter child_iter;
continue;
gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
gtk_tree_store_set (GTK_TREE_STORE (model),
&child_iter,
TITLE_COLUMN, children->title,
FILENAME_COLUMN, children->filename,
FUNC_COLUMN, children->func,
STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
children++;
}
while (children->title)
{
GtkTreeIter child_iter;
gtk_tree_store_append (GTK_TREE_STORE (model), &child_iter, &iter);
gtk_tree_store_set (GTK_TREE_STORE (model),
&child_iter,
TITLE_COLUMN, children->title,
FILENAME_COLUMN, children->filename,
FUNC_COLUMN, children->func,
STYLE_COLUMN, PANGO_STYLE_NORMAL,
-1);
children++;
}
}
cell = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes ("Widget (double click for demo)",
cell,
"text", TITLE_COLUMN,
"style", STYLE_COLUMN,
NULL);
cell,
"text", TITLE_COLUMN,
"style", STYLE_COLUMN,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view),
GTK_TREE_VIEW_COLUMN (column));
GTK_TREE_VIEW_COLUMN (column));
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (model), &iter);
gtk_tree_selection_select_iter (GTK_TREE_SELECTION (selection), &iter);
@@ -852,11 +852,11 @@ create_tree (void)
gtk_tree_view_collapse_all (GTK_TREE_VIEW (tree_view));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_NEVER,
GTK_POLICY_AUTOMATIC);
GTK_POLICY_NEVER,
GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (scrolled_window), tree_view);
label = gtk_label_new ("Widget (double click for demo)");
@@ -895,21 +895,21 @@ setup_default_icon (void)
if (err)
{
GtkWidget *dialog;
dialog = gtk_message_dialog_new (NULL, 0,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failed to read icon file: %s",
err->message);
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Failed to read icon file: %s",
err->message);
g_error_free (err);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
G_CALLBACK (gtk_widget_destroy), NULL);
}
if (pixbuf)
{
GList *list;
GList *list;
GdkPixbuf *transparent;
/* The gtk-logo-rgb icon has a white background, make it transparent */
@@ -943,15 +943,15 @@ main (int argc, char **argv)
g_setenv ("GTK_IM_MODULE_FILE", "../../modules/input/immodules.cache", TRUE);
}
/* -- End of hack -- */
gtk_init (&argc, &argv);
setup_default_icon ();
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), "GTK+ Code Demos");
g_signal_connect_after (window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);
G_CALLBACK (gtk_main_quit), NULL);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_container_add (GTK_CONTAINER (window), hbox);
@@ -963,8 +963,8 @@ main (int argc, char **argv)
gtk_box_pack_start (GTK_BOX (hbox), notebook, TRUE, TRUE, 0);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
create_text (&info_buffer, FALSE),
gtk_label_new_with_mnemonic ("_Info"));
create_text (&info_buffer, FALSE),
gtk_label_new_with_mnemonic ("_Info"));
gtk_text_buffer_create_tag (info_buffer, "title",
"font", "Sans 18",
@@ -972,8 +972,8 @@ main (int argc, char **argv)
g_object_unref (info_buffer);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook),
create_text (&source_buffer, TRUE),
gtk_label_new_with_mnemonic ("_Source"));
create_text (&source_buffer, TRUE),
gtk_label_new_with_mnemonic ("_Source"));
gtk_text_buffer_create_tag (source_buffer, "comment",
@@ -998,13 +998,12 @@ main (int argc, char **argv)
"foreground", "DarkGoldenrod4",
NULL);
g_object_unref (source_buffer);
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
gtk_widget_show_all (window);
load_file (testgtk_demos[0].filename);
gtk_main ();
return 0;

View File

@@ -31,7 +31,7 @@
static GtkWidget *
create_menu (gint depth,
gboolean tearoff)
gboolean tearoff)
{
GtkWidget *menu;
GtkWidget *menuitem;
@@ -61,7 +61,7 @@ create_menu (gint depth,
gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
gtk_widget_show (menuitem);
if (i == 3)
gtk_widget_set_sensitive (menuitem, FALSE);
gtk_widget_set_sensitive (menuitem, FALSE);
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, TRUE));
}
@@ -106,10 +106,10 @@ do_menus (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Menus");
g_signal_connect (window, "destroy",
G_CALLBACK(gtk_widget_destroyed), &window);
G_CALLBACK(gtk_widget_destroyed), &window);
accel_group = gtk_accel_group_new ();
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
@@ -152,13 +152,13 @@ do_menus (GtkWidget *do_widget)
button = gtk_button_new_with_label ("Flip");
g_signal_connect (button, "clicked",
G_CALLBACK (change_orientation), menubar);
G_CALLBACK (change_orientation), menubar);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_show (button);
button = gtk_button_new_with_label ("Close");
g_signal_connect_swapped (button, "clicked",
G_CALLBACK(gtk_widget_destroy), window);
G_CALLBACK(gtk_widget_destroy), window);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_set_can_default (button, TRUE);
gtk_widget_grab_default (button);

View File

@@ -613,4 +613,3 @@ do_offscreen_window (GtkWidget *do_widget)
return window;
}

View File

@@ -524,4 +524,3 @@ do_offscreen_window2 (GtkWidget *do_widget)
return window;
}

View File

@@ -23,7 +23,7 @@ do_overlay (GtkWidget *do_widget)
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);

View File

@@ -15,7 +15,7 @@
void
toggle_resize (GtkWidget *widget,
GtkWidget *child)
GtkWidget *child)
{
GtkWidget *parent;
GtkPaned *paned;
@@ -43,7 +43,7 @@ toggle_resize (GtkWidget *widget,
void
toggle_shrink (GtkWidget *widget,
GtkWidget *child)
GtkWidget *child)
{
GtkWidget *parent;
GtkPaned *paned;
@@ -70,10 +70,10 @@ toggle_shrink (GtkWidget *widget,
}
GtkWidget *
create_pane_options (GtkPaned *paned,
const gchar *frame_label,
const gchar *label1,
const gchar *label2)
create_pane_options (GtkPaned *paned,
const gchar *frame_label,
const gchar *label1,
const gchar *label2)
{
GtkWidget *child1, *child2;
GtkWidget *frame;
@@ -86,47 +86,38 @@ create_pane_options (GtkPaned *paned,
frame = gtk_frame_new (frame_label);
gtk_container_set_border_width (GTK_CONTAINER (frame), 4);
table = gtk_table_new (3, 2, TRUE);
table = gtk_grid_new ();
gtk_container_add (GTK_CONTAINER (frame), table);
label = gtk_label_new (label1);
gtk_table_attach_defaults (GTK_TABLE (table), label,
0, 1, 0, 1);
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
check_button = gtk_check_button_new_with_mnemonic ("_Resize");
gtk_table_attach_defaults (GTK_TABLE (table), check_button,
0, 1, 1, 2);
gtk_grid_attach (GTK_GRID (table), check_button, 0, 1, 1, 1);
g_signal_connect (check_button, "toggled",
G_CALLBACK (toggle_resize), child1);
G_CALLBACK (toggle_resize), child1);
check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
gtk_table_attach_defaults (GTK_TABLE (table), check_button,
0, 1, 2, 3);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
TRUE);
gtk_grid_attach (GTK_GRID (table), check_button, 0, 2, 1, 1);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
g_signal_connect (check_button, "toggled",
G_CALLBACK (toggle_shrink), child1);
G_CALLBACK (toggle_shrink), child1);
label = gtk_label_new (label2);
gtk_table_attach_defaults (GTK_TABLE (table), label,
1, 2, 0, 1);
gtk_grid_attach (GTK_GRID (table), label, 1, 0, 1, 1);
check_button = gtk_check_button_new_with_mnemonic ("_Resize");
gtk_table_attach_defaults (GTK_TABLE (table), check_button,
1, 2, 1, 2);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
TRUE);
gtk_grid_attach (GTK_GRID (table), check_button, 1, 1, 1, 1);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
g_signal_connect (check_button, "toggled",
G_CALLBACK (toggle_resize), child2);
G_CALLBACK (toggle_resize), child2);
check_button = gtk_check_button_new_with_mnemonic ("_Shrink");
gtk_table_attach_defaults (GTK_TABLE (table), check_button,
1, 2, 2, 3);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button),
TRUE);
gtk_grid_attach (GTK_GRID (table), check_button, 1, 2, 1, 1);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
g_signal_connect (check_button, "toggled",
G_CALLBACK (toggle_shrink), child2);
G_CALLBACK (toggle_shrink), child2);
return frame;
}
@@ -145,10 +136,10 @@ do_panes (GtkWidget *do_widget)
{
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
gtk_window_set_title (GTK_WINDOW (window), "Panes");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
@@ -167,7 +158,7 @@ do_panes (GtkWidget *do_widget)
gtk_frame_set_shadow_type (GTK_FRAME(frame), GTK_SHADOW_IN);
gtk_widget_set_size_request (frame, 60, 60);
gtk_paned_add1 (GTK_PANED (hpaned), frame);
button = gtk_button_new_with_mnemonic ("_Hi there");
gtk_container_add (GTK_CONTAINER(frame), button);
@@ -184,18 +175,18 @@ do_panes (GtkWidget *do_widget)
/* Now create toggle buttons to control sizing */
gtk_box_pack_start (GTK_BOX (vbox),
create_pane_options (GTK_PANED (hpaned),
"Horizontal",
"Left",
"Right"),
FALSE, FALSE, 0);
create_pane_options (GTK_PANED (hpaned),
"Horizontal",
"Left",
"Right"),
FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox),
create_pane_options (GTK_PANED (vpaned),
"Vertical",
"Top",
"Bottom"),
FALSE, FALSE, 0);
create_pane_options (GTK_PANED (vpaned),
"Vertical",
"Top",
"Bottom"),
FALSE, FALSE, 0);
gtk_widget_show_all (vbox);
}

View File

@@ -25,45 +25,54 @@ do_pickers (GtkWidget *do_widget)
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
table = gtk_table_new (5, 2, FALSE);
gtk_table_set_col_spacing (GTK_TABLE (table), 0, 10);
gtk_table_set_row_spacings (GTK_TABLE (table), 3);
table = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (table), 3);
gtk_grid_set_column_spacing (GTK_GRID (table), 10);
gtk_container_add (GTK_CONTAINER (window), table);
gtk_container_set_border_width (GTK_CONTAINER (table), 10);
label = gtk_label_new ("Color:");
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
gtk_widget_set_hexpand (label, TRUE);
picker = gtk_color_button_new ();
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 0, 1);
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 0, 1);
gtk_grid_attach (GTK_GRID (table), label, 0, 0, 1, 1);
gtk_grid_attach (GTK_GRID (table), picker, 1, 0, 1, 1);
label = gtk_label_new ("Font:");
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
gtk_widget_set_hexpand (label, TRUE);
picker = gtk_font_button_new ();
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 1, 2);
gtk_grid_attach (GTK_GRID (table), label, 0, 1, 1, 1);
gtk_grid_attach (GTK_GRID (table), picker, 1, 1, 1, 1);
label = gtk_label_new ("File:");
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
gtk_widget_set_hexpand (label, TRUE);
picker = gtk_file_chooser_button_new ("Pick a File",
GTK_FILE_CHOOSER_ACTION_OPEN);
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 2, 3);
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 2, 3);
gtk_grid_attach (GTK_GRID (table), label, 0, 2, 1, 1);
gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1);
label = gtk_label_new ("Folder:");
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
picker = gtk_file_chooser_button_new ("Pick a Folder",
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 3, 4);
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 3, 4);
gtk_grid_attach (GTK_GRID (table), label, 0, 3, 1, 1);
gtk_grid_attach (GTK_GRID (table), picker, 1, 3, 1, 1);
label = gtk_label_new ("Mail:");
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
gtk_widget_set_hexpand (label, TRUE);
picker = gtk_app_chooser_button_new ("x-scheme-handler/mailto");
gtk_app_chooser_button_set_show_dialog_item (GTK_APP_CHOOSER_BUTTON (picker), TRUE);
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 4, 5);
gtk_table_attach_defaults (GTK_TABLE (table), picker, 1, 2, 4, 5);
gtk_grid_attach (GTK_GRID (table), label, 0, 4, 1, 1);
gtk_grid_attach (GTK_GRID (table), picker, 1, 4, 1, 1);
}
if (!gtk_widget_get_visible (window))

View File

@@ -71,7 +71,7 @@ load_pixbufs (GError **error)
background = gdk_pixbuf_new_from_file (filename, error);
g_free (filename);
if (!background)
return FALSE; /* Note that "error" was filled with a GError */
@@ -83,10 +83,10 @@ load_pixbufs (GError **error)
filename = demo_find_file (image_names[i], error);
if (!filename)
return FALSE; /* Note that "error" was filled with a GError */
images[i] = gdk_pixbuf_new_from_file (filename, error);
g_free (filename);
if (!images[i])
return FALSE; /* Note that "error" was filled with a GError */
}

View File

@@ -26,8 +26,8 @@ typedef struct
static void
begin_print (GtkPrintOperation *operation,
GtkPrintContext *context,
gpointer user_data)
GtkPrintContext *context,
gpointer user_data)
{
PrintData *data = (PrintData *)user_data;
char *contents;
@@ -55,9 +55,9 @@ begin_print (GtkPrintOperation *operation,
static void
draw_page (GtkPrintOperation *operation,
GtkPrintContext *context,
gint page_nr,
gpointer user_data)
GtkPrintContext *context,
gint page_nr,
gpointer user_data)
{
PrintData *data = (PrintData *)user_data;
cairo_t *cr;
@@ -132,8 +132,8 @@ draw_page (GtkPrintOperation *operation,
static void
end_print (GtkPrintOperation *operation,
GtkPrintContext *context,
gpointer user_data)
GtkPrintContext *context,
gpointer user_data)
{
PrintData *data = (PrintData *)user_data;
@@ -159,11 +159,11 @@ do_printing (GtkWidget *do_widget)
data->font_size = 12.0;
g_signal_connect (G_OBJECT (operation), "begin-print",
G_CALLBACK (begin_print), data);
G_CALLBACK (begin_print), data);
g_signal_connect (G_OBJECT (operation), "draw-page",
G_CALLBACK (draw_page), data);
G_CALLBACK (draw_page), data);
g_signal_connect (G_OBJECT (operation), "end-print",
G_CALLBACK (end_print), data);
G_CALLBACK (end_print), data);
gtk_print_operation_set_use_full_page (operation, FALSE);
gtk_print_operation_set_unit (operation, GTK_UNIT_POINTS);
@@ -195,14 +195,14 @@ do_printing (GtkWidget *do_widget)
GtkWidget *dialog;
dialog = gtk_message_dialog_new (GTK_WINDOW (do_widget),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"%s", error->message);
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"%s", error->message);
g_error_free (error);
g_signal_connect (dialog, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
G_CALLBACK (gtk_widget_destroy), NULL);
gtk_widget_show (dialog);
}

View File

@@ -75,7 +75,7 @@ create_fancy_attr_list_for_layout (PangoLayout *layout)
for (p = text; (p = strstr (p, HEART)); p += strlen (HEART))
{
PangoAttribute *attr;
attr = pango_attr_shape_new_with_data (&ink_rect,
&logical_rect,
GUINT_TO_POINTER (g_utf8_get_char (p)),
@@ -152,7 +152,7 @@ rotated_text_draw (GtkWidget *widget,
/* Inform Pango to re-layout the text with the new transformation matrix */
pango_cairo_update_layout (cr, layout);
pango_layout_get_pixel_size (layout, &width, &height);
cairo_move_to (cr, - width / 2, - RADIUS * .9);
pango_cairo_show_layout (cr, layout);
@@ -166,7 +166,7 @@ rotated_text_draw (GtkWidget *widget,
g_object_unref (layout);
g_object_unref (context);
cairo_pattern_destroy (pattern);
return FALSE;
}

View File

@@ -2,9 +2,9 @@
*
* GtkSizeGroup provides a mechanism for grouping a number of
* widgets together so they all request the same amount of space.
* This is typically useful when you want a column of widgets to
* This is typically useful when you want a column of widgets to
* have the same size, but you can't use a GtkTable widget.
*
*
* Note that size groups only affect the amount of space requested,
* not the size that the widgets finally receive. If you want the
* widgets in a GtkSizeGroup to actually be the same size, you need
@@ -26,7 +26,7 @@ create_combo_box (const char **strings)
const char **str;
combo_box = gtk_combo_box_text_new ();
for (str = strings; *str; str++)
gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo_box), *str);
@@ -36,34 +36,30 @@ create_combo_box (const char **strings)
}
static void
add_row (GtkTable *table,
int row,
GtkSizeGroup *size_group,
const char *label_text,
const char **options)
add_row (GtkGrid *table,
int row,
GtkSizeGroup *size_group,
const char *label_text,
const char **options)
{
GtkWidget *combo_box;
GtkWidget *label;
label = gtk_label_new_with_mnemonic (label_text);
gtk_misc_set_alignment (GTK_MISC (label), 0, 1);
gtk_table_attach (GTK_TABLE (table), label,
0, 1, row, row + 1,
GTK_EXPAND | GTK_FILL, 0,
0, 0);
gtk_widget_set_halign (label, GTK_ALIGN_START);
gtk_widget_set_valign (label, GTK_ALIGN_END);
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_size_group_add_widget (size_group, combo_box);
gtk_table_attach (GTK_TABLE (table), combo_box,
1, 2, row, row + 1,
0, 0,
0, 0);
gtk_grid_attach (table, combo_box, 1, row, 1, 1);
}
static void
toggle_grouping (GtkToggleButton *check_button,
GtkSizeGroup *size_group)
GtkSizeGroup *size_group)
{
GtkSizeGroupMode new_mode;
@@ -75,7 +71,7 @@ toggle_grouping (GtkToggleButton *check_button,
new_mode = GTK_SIZE_GROUP_HORIZONTAL;
else
new_mode = GTK_SIZE_GROUP_NONE;
gtk_size_group_set_mode (size_group, new_mode);
}
@@ -92,29 +88,29 @@ do_sizegroup (GtkWidget *do_widget)
static const char *color_options[] = {
"Red", "Green", "Blue", NULL
};
static const char *dash_options[] = {
"Solid", "Dashed", "Dotted", NULL
};
static const char *end_options[] = {
"Square", "Round", "Arrow", NULL
};
if (!window)
{
window = gtk_dialog_new_with_buttons ("GtkSizeGroup",
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE,
GTK_RESPONSE_NONE,
NULL);
GTK_WINDOW (do_widget),
0,
GTK_STOCK_CLOSE,
GTK_RESPONSE_NONE,
NULL);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect (window, "response",
G_CALLBACK (gtk_widget_destroy), NULL);
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
content_area = gtk_dialog_get_content_area (GTK_DIALOG (window));
@@ -123,42 +119,40 @@ do_sizegroup (GtkWidget *do_widget)
gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
/* Create one frame holding color options
*/
/* Create one frame holding color options */
frame = gtk_frame_new ("Color Options");
gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
table = gtk_table_new (2, 2, FALSE);
table = gtk_grid_new ();
gtk_container_set_border_width (GTK_CONTAINER (table), 5);
gtk_table_set_row_spacings (GTK_TABLE (table), 5);
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
gtk_grid_set_row_spacing (GTK_GRID (table), 5);
gtk_grid_set_column_spacing (GTK_GRID (table), 10);
gtk_container_add (GTK_CONTAINER (frame), table);
add_row (GTK_TABLE (table), 0, size_group, "_Foreground", color_options);
add_row (GTK_TABLE (table), 1, size_group, "_Background", color_options);
add_row (GTK_GRID (table), 0, size_group, "_Foreground", color_options);
add_row (GTK_GRID (table), 1, size_group, "_Background", color_options);
/* And another frame holding line style options
*/
/* And another frame holding line style options */
frame = gtk_frame_new ("Line Options");
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
table = gtk_table_new (2, 2, FALSE);
table = gtk_grid_new ();
gtk_container_set_border_width (GTK_CONTAINER (table), 5);
gtk_table_set_row_spacings (GTK_TABLE (table), 5);
gtk_table_set_col_spacings (GTK_TABLE (table), 10);
gtk_grid_set_row_spacing (GTK_GRID (table), 5);
gtk_grid_set_column_spacing (GTK_GRID (table), 10);
gtk_container_add (GTK_CONTAINER (frame), table);
add_row (GTK_TABLE (table), 0, size_group, "_Dashing", dash_options);
add_row (GTK_TABLE (table), 1, size_group, "_Line ends", end_options);
add_row (GTK_GRID (table), 0, size_group, "_Dashing", dash_options);
add_row (GTK_GRID (table), 1, size_group, "_Line ends", end_options);
/* And a check button to turn grouping on and off */
check_button = gtk_check_button_new_with_mnemonic ("_Enable grouping");
gtk_box_pack_start (GTK_BOX (vbox), check_button, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_button), TRUE);
g_signal_connect (check_button, "toggled",
G_CALLBACK (toggle_grouping), size_group);
G_CALLBACK (toggle_grouping), size_group);
}
if (!gtk_widget_get_visible (window))

View File

@@ -93,5 +93,3 @@ do_spinner (GtkWidget *do_widget)
return window;
}

View File

@@ -35,7 +35,7 @@ stock_item_info_free (StockItemInfo *info)
g_free (info->accel_str);
if (info->small_icon)
g_object_unref (info->small_icon);
g_free (info);
}
@@ -48,7 +48,7 @@ stock_item_info_copy (StockItemInfo *src)
info->id = g_strdup (src->id);
info->macro = g_strdup (src->macro);
info->accel_str = g_strdup (src->accel_str);
info->item = src->item;
info->small_icon = src->small_icon;
@@ -82,9 +82,9 @@ id_to_macro (const gchar *id)
/* gtk-foo-bar -> GTK_STOCK_FOO_BAR */
macro = g_string_new (NULL);
cp = id;
if (strncmp (cp, "gtk-", 4) == 0)
{
g_string_append (macro, "GTK_STOCK_");
@@ -94,11 +94,11 @@ id_to_macro (const gchar *id)
while (*cp)
{
if (*cp == '-')
g_string_append_c (macro, '_');
g_string_append_c (macro, '_');
else if (g_ascii_islower (*cp))
g_string_append_c (macro, g_ascii_toupper (*cp));
g_string_append_c (macro, g_ascii_toupper (*cp));
else
g_string_append_c (macro, *cp);
g_string_append_c (macro, *cp);
cp++;
}
@@ -112,7 +112,7 @@ create_model (void)
GtkListStore *store;
GSList *ids;
GSList *tmp_list;
store = gtk_list_store_new (2, STOCK_ITEM_INFO_TYPE, G_TYPE_STRING);
ids = gtk_stock_list_ids ();
@@ -124,9 +124,9 @@ create_model (void)
GtkStockItem item;
GtkTreeIter iter;
GtkIconSet *icon_set;
info.id = tmp_list->data;
if (gtk_stock_lookup (info.id, &item))
{
info.item = item;
@@ -165,19 +165,19 @@ create_model (void)
++i;
}
g_free (sizes);
info.small_icon = gtk_widget_render_icon_pixbuf (window,
info.small_icon = gtk_widget_render_icon_pixbuf (window,
info.id,
size);
if (size != GTK_ICON_SIZE_MENU)
{
/* Make the result the proper size for our thumbnail */
gint w, h;
GdkPixbuf *scaled;
gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &w, &h);
scaled = gdk_pixbuf_scale_simple (info.small_icon,
w, h,
GDK_INTERP_BILINEAR);
@@ -200,7 +200,7 @@ create_model (void)
}
info.macro = id_to_macro (info.id);
gtk_list_store_append (store, &iter);
gtk_list_store_set (store, &iter, 0, &info, 1, info.id, -1);
@@ -208,10 +208,10 @@ create_model (void)
g_free (info.accel_str);
if (info.small_icon)
g_object_unref (info.small_icon);
tmp_list = g_slist_next (tmp_list);
}
g_slist_foreach (ids, (GFunc)g_free, NULL);
g_slist_free (ids);
@@ -235,16 +235,16 @@ get_largest_size (const char *id)
for (i = 0; i < n_sizes; i++)
{
gint width, height;
gtk_icon_size_lookup (sizes[i], &width, &height);
if (width * height > best_pixels)
{
best_size = sizes[i];
best_pixels = width * height;
}
{
best_size = sizes[i];
best_pixels = width * height;
}
}
g_free (sizes);
return best_size;
@@ -257,7 +257,7 @@ selection_changed (GtkTreeSelection *selection)
StockItemDisplay *display;
GtkTreeModel *model;
GtkTreeIter iter;
treeview = gtk_tree_selection_get_tree_view (selection);
display = g_object_get_data (G_OBJECT (treeview), "stock-display");
@@ -265,7 +265,7 @@ selection_changed (GtkTreeSelection *selection)
{
StockItemInfo *info;
gchar *str;
gtk_tree_model_get (model, &iter,
0, &info,
-1);
@@ -313,21 +313,21 @@ selection_changed (GtkTreeSelection *selection)
static void
macro_set_func_text (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
GtkCellRenderer *cell,
GtkTreeModel *model,
GtkTreeIter *iter,
gpointer data)
{
StockItemInfo *info;
gtk_tree_model_get (model, iter,
0, &info,
-1);
g_object_set (GTK_CELL_RENDERER (cell),
"text", info->macro,
NULL);
stock_item_info_free (info);
}
@@ -339,15 +339,15 @@ id_set_func (GtkTreeViewColumn *tree_column,
gpointer data)
{
StockItemInfo *info;
gtk_tree_model_get (model, iter,
0, &info,
-1);
g_object_set (GTK_CELL_RENDERER (cell),
"text", info->id,
NULL);
stock_item_info_free (info);
}
@@ -359,15 +359,15 @@ accel_set_func (GtkTreeViewColumn *tree_column,
gpointer data)
{
StockItemInfo *info;
gtk_tree_model_get (model, iter,
0, &info,
-1);
g_object_set (GTK_CELL_RENDERER (cell),
"text", info->accel_str,
NULL);
stock_item_info_free (info);
}
@@ -379,21 +379,21 @@ label_set_func (GtkTreeViewColumn *tree_column,
gpointer data)
{
StockItemInfo *info;
gtk_tree_model_get (model, iter,
0, &info,
-1);
g_object_set (GTK_CELL_RENDERER (cell),
"text", info->item.label,
NULL);
stock_item_info_free (info);
}
GtkWidget *
do_stock_browser (GtkWidget *do_widget)
{
{
if (!window)
{
GtkWidget *frame;
@@ -401,7 +401,6 @@ do_stock_browser (GtkWidget *do_widget)
GtkWidget *hbox;
GtkWidget *sw;
GtkWidget *treeview;
GtkWidget *align;
GtkTreeModel *model;
GtkCellRenderer *cell_renderer;
StockItemDisplay *display;
@@ -410,7 +409,7 @@ do_stock_browser (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Stock Icons and Items");
gtk_window_set_default_size (GTK_WINDOW (window), -1, 500);
@@ -427,31 +426,31 @@ do_stock_browser (GtkWidget *do_widget)
gtk_box_pack_start (GTK_BOX (hbox), sw, FALSE, FALSE, 0);
model = create_model ();
treeview = gtk_tree_view_new_with_model (model);
g_object_unref (model);
gtk_container_add (GTK_CONTAINER (sw), treeview);
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, "Macro");
cell_renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_start (column,
cell_renderer,
FALSE);
cell_renderer,
FALSE);
gtk_tree_view_column_set_attributes (column, cell_renderer,
"stock_id", 1, NULL);
"stock_id", 1, NULL);
cell_renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column,
cell_renderer,
TRUE);
cell_renderer,
TRUE);
gtk_tree_view_column_set_cell_data_func (column, cell_renderer,
macro_set_func_text, NULL, NULL);
macro_set_func_text, NULL, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview),
column);
column);
cell_renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_insert_column_with_data_func (GTK_TREE_VIEW (treeview),
@@ -479,12 +478,10 @@ do_stock_browser (GtkWidget *do_widget)
id_set_func,
NULL,
NULL);
align = gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
gtk_box_pack_end (GTK_BOX (hbox), align, FALSE, FALSE, 0);
frame = gtk_frame_new ("Selected Item");
gtk_container_add (GTK_CONTAINER (align), frame);
gtk_widget_set_valign (frame, GTK_ALIGN_START);
gtk_box_pack_end (GTK_BOX (hbox), frame, FALSE, FALSE, 0);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 4);
@@ -495,7 +492,7 @@ do_stock_browser (GtkWidget *do_widget)
"stock-display",
display,
g_free); /* free display with treeview */
display->type_label = gtk_label_new (NULL);
display->macro_label = gtk_label_new (NULL);
display->id_label = gtk_label_new (NULL);
@@ -507,7 +504,7 @@ do_stock_browser (GtkWidget *do_widget)
gtk_box_pack_start (GTK_BOX (vbox), display->icon_image,
FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), display->label_accel_label,
FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (vbox), display->macro_label,
@@ -517,11 +514,11 @@ do_stock_browser (GtkWidget *do_widget)
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
g_signal_connect (selection,
"changed",
G_CALLBACK (selection_changed),
NULL);
"changed",
G_CALLBACK (selection_changed),
NULL);
}
if (!gtk_widget_get_visible (window))
@@ -529,7 +526,7 @@ do_stock_browser (GtkWidget *do_widget)
gtk_widget_show_all (window);
}
else
{
{
gtk_widget_destroy (window);
window = NULL;
}

View File

@@ -1,6 +1,6 @@
/* Text Widget/Automatic scrolling
*
* This example demonstrates how to use the gravity of
* This example demonstrates how to use the gravity of
* GtkTextMarks to keep a text view scrolled to the bottom
* while appending text.
*/
@@ -20,14 +20,14 @@ scroll_to_end (GtkTextView *textview)
static int count;
buffer = gtk_text_view_get_buffer (textview);
/* Get "end" mark. It's located at the end of buffer because
/* Get "end" mark. It's located at the end of buffer because
* of right gravity
*/
mark = gtk_text_buffer_get_mark (buffer, "end");
gtk_text_buffer_get_iter_at_mark (buffer, &iter, mark);
/* and insert some text at its position, the iter will be
/* and insert some text at its position, the iter will be
* revalidated after insertion to point to the end of inserted text
*/
spaces = g_strnfill (count++, ' ');
@@ -43,7 +43,7 @@ scroll_to_end (GtkTextView *textview)
*/
gtk_text_view_scroll_mark_onscreen (textview, mark);
/* Emulate typewriter behavior, shift to the left if we
/* Emulate typewriter behavior, shift to the left if we
* are far enough to the right.
*/
if (count > 150)
@@ -64,7 +64,7 @@ scroll_to_bottom (GtkTextView *textview)
static int count;
buffer = gtk_text_view_get_buffer (textview);
/* Get end iterator */
gtk_text_buffer_get_end_iter (buffer, &iter);
@@ -80,17 +80,17 @@ scroll_to_bottom (GtkTextView *textview)
-1);
g_free (spaces);
/* Move the iterator to the beginning of line, so we don't scroll
* in horizontal direction
/* Move the iterator to the beginning of line, so we don't scroll
* in horizontal direction
*/
gtk_text_iter_set_line_offset (&iter, 0);
/* and place the mark at iter. the mark will stay there after we
* insert some text at the end because it has right gravity.
*/
mark = gtk_text_buffer_get_mark (buffer, "scroll");
gtk_text_buffer_move_mark (buffer, mark, &iter);
/* Scroll the mark onscreen.
*/
gtk_text_view_scroll_mark_onscreen (textview, mark);
@@ -114,30 +114,30 @@ setup_scroll (GtkTextView *textview,
gtk_text_buffer_get_end_iter (buffer, &iter);
if (to_end)
{
/* If we want to scroll to the end, including horizontal scrolling,
* then we just create a mark with right gravity at the end of the
* buffer. It will stay at the end unless explicitely moved with
* gtk_text_buffer_move_mark.
*/
gtk_text_buffer_create_mark (buffer, "end", &iter, FALSE);
/* Add scrolling timeout. */
return g_timeout_add (50, (GSourceFunc) scroll_to_end, textview);
}
{
/* If we want to scroll to the end, including horizontal scrolling,
* then we just create a mark with right gravity at the end of the
* buffer. It will stay at the end unless explicitely moved with
* gtk_text_buffer_move_mark.
*/
gtk_text_buffer_create_mark (buffer, "end", &iter, FALSE);
/* Add scrolling timeout. */
return g_timeout_add (50, (GSourceFunc) scroll_to_end, textview);
}
else
{
/* If we want to scroll to the bottom, but not scroll horizontally,
* then an end mark won't do the job. Just create a mark so we can
* use it with gtk_text_view_scroll_mark_onscreen, we'll position it
* explicitely when needed. Use left gravity so the mark stays where
* we put it after inserting new text.
*/
gtk_text_buffer_create_mark (buffer, "scroll", &iter, TRUE);
/* Add scrolling timeout. */
return g_timeout_add (100, (GSourceFunc) scroll_to_bottom, textview);
}
{
/* If we want to scroll to the bottom, but not scroll horizontally,
* then an end mark won't do the job. Just create a mark so we can
* use it with gtk_text_view_scroll_mark_onscreen, we'll position it
* explicitely when needed. Use left gravity so the mark stays where
* we put it after inserting new text.
*/
gtk_text_buffer_create_mark (buffer, "scroll", &iter, TRUE);
/* Add scrolling timeout. */
return g_timeout_add (100, (GSourceFunc) scroll_to_bottom, textview);
}
}
static void
@@ -163,7 +163,7 @@ create_text_view (GtkWidget *hbox,
timeout = setup_scroll (GTK_TEXT_VIEW (textview), to_end);
/* Remove the timeout in destroy handler, so we don't try to
* scroll destroyed widget.
* scroll destroyed widget.
*/
g_signal_connect (textview, "destroy",
G_CALLBACK (remove_timeout),
@@ -181,9 +181,9 @@ do_textscroll (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
gtk_container_add (GTK_CONTAINER (window), hbox);
@@ -193,9 +193,9 @@ do_textscroll (GtkWidget *do_widget)
}
if (!gtk_widget_get_visible (window))
gtk_widget_show_all (window);
gtk_widget_show_all (window);
else
gtk_widget_destroy (window);
gtk_widget_destroy (window);
return window;
}

View File

@@ -561,7 +561,6 @@ recursive_attach_view (int depth,
GtkWidget *child_view;
GtkWidget *event_box;
GdkRGBA color;
GtkWidget *align;
if (depth > 4)
return;
@@ -573,11 +572,10 @@ recursive_attach_view (int depth,
gdk_rgba_parse (&color, "black");
gtk_widget_override_background_color (event_box, 0, &color);
align = gtk_alignment_new (0.5, 0.5, 1.0, 1.0);
gtk_container_set_border_width (GTK_CONTAINER (align), 1);
gtk_widget_set_halign (child_view, GTK_ALIGN_FILL);
gtk_widget_set_valign (child_view, GTK_ALIGN_FILL);
gtk_container_add (GTK_CONTAINER (event_box), align);
gtk_container_add (GTK_CONTAINER (align), child_view);
gtk_container_add (GTK_CONTAINER (event_box), child_view);
gtk_text_view_add_child_at_anchor (view, event_box, anchor);
@@ -634,4 +632,3 @@ easter_egg_callback (GtkWidget *button,
gtk_widget_show_all (window);
}

View File

@@ -170,14 +170,14 @@ create_model (void)
/* create tree store */
model = gtk_tree_store_new (NUM_COLUMNS,
G_TYPE_STRING,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN);
G_TYPE_STRING,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN);
/* add data to the tree store */
while (month->label)
@@ -186,35 +186,35 @@ create_model (void)
gtk_tree_store_append (model, &iter, NULL);
gtk_tree_store_set (model, &iter,
HOLIDAY_NAME_COLUMN, month->label,
ALEX_COLUMN, FALSE,
HAVOC_COLUMN, FALSE,
TIM_COLUMN, FALSE,
OWEN_COLUMN, FALSE,
DAVE_COLUMN, FALSE,
VISIBLE_COLUMN, FALSE,
WORLD_COLUMN, FALSE,
-1);
HOLIDAY_NAME_COLUMN, month->label,
ALEX_COLUMN, FALSE,
HAVOC_COLUMN, FALSE,
TIM_COLUMN, FALSE,
OWEN_COLUMN, FALSE,
DAVE_COLUMN, FALSE,
VISIBLE_COLUMN, FALSE,
WORLD_COLUMN, FALSE,
-1);
/* add children */
while (holiday->label)
{
GtkTreeIter child_iter;
{
GtkTreeIter child_iter;
gtk_tree_store_append (model, &child_iter, &iter);
gtk_tree_store_set (model, &child_iter,
HOLIDAY_NAME_COLUMN, holiday->label,
ALEX_COLUMN, holiday->alex,
HAVOC_COLUMN, holiday->havoc,
TIM_COLUMN, holiday->tim,
OWEN_COLUMN, holiday->owen,
DAVE_COLUMN, holiday->dave,
VISIBLE_COLUMN, TRUE,
WORLD_COLUMN, holiday->world_holiday,
-1);
gtk_tree_store_append (model, &child_iter, &iter);
gtk_tree_store_set (model, &child_iter,
HOLIDAY_NAME_COLUMN, holiday->label,
ALEX_COLUMN, holiday->alex,
HAVOC_COLUMN, holiday->havoc,
TIM_COLUMN, holiday->tim,
OWEN_COLUMN, holiday->owen,
DAVE_COLUMN, holiday->dave,
VISIBLE_COLUMN, TRUE,
WORLD_COLUMN, holiday->world_holiday,
-1);
holiday++;
}
holiday++;
}
month++;
}
@@ -224,8 +224,8 @@ create_model (void)
static void
item_toggled (GtkCellRendererToggle *cell,
gchar *path_str,
gpointer data)
gchar *path_str,
gpointer data)
{
GtkTreeModel *model = (GtkTreeModel *)data;
GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
@@ -245,7 +245,7 @@ item_toggled (GtkCellRendererToggle *cell,
/* set new value */
gtk_tree_store_set (GTK_TREE_STORE (model), &iter, column,
toggle_item, -1);
toggle_item, -1);
/* clean up */
gtk_tree_path_free (path);
@@ -264,10 +264,10 @@ add_columns (GtkTreeView *treeview)
g_object_set (renderer, "xalign", 0.0, NULL);
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-1, "Holiday",
renderer, "text",
HOLIDAY_NAME_COLUMN,
NULL);
-1, "Holiday",
renderer, "text",
HOLIDAY_NAME_COLUMN,
NULL);
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
@@ -279,18 +279,18 @@ add_columns (GtkTreeView *treeview)
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-1, "Alex",
renderer,
"active",
ALEX_COLUMN,
"visible",
VISIBLE_COLUMN,
"activatable",
WORLD_COLUMN, NULL);
-1, "Alex",
renderer,
"active",
ALEX_COLUMN,
"visible",
VISIBLE_COLUMN,
"activatable",
WORLD_COLUMN, NULL);
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
GTK_TREE_VIEW_COLUMN_FIXED);
GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
@@ -302,17 +302,17 @@ add_columns (GtkTreeView *treeview)
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-1, "Havoc",
renderer,
"active",
HAVOC_COLUMN,
"visible",
VISIBLE_COLUMN,
NULL);
-1, "Havoc",
renderer,
"active",
HAVOC_COLUMN,
"visible",
VISIBLE_COLUMN,
NULL);
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
GTK_TREE_VIEW_COLUMN_FIXED);
GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
@@ -324,18 +324,18 @@ add_columns (GtkTreeView *treeview)
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-1, "Tim",
renderer,
"active",
TIM_COLUMN,
"visible",
VISIBLE_COLUMN,
"activatable",
WORLD_COLUMN, NULL);
-1, "Tim",
renderer,
"active",
TIM_COLUMN,
"visible",
VISIBLE_COLUMN,
"activatable",
WORLD_COLUMN, NULL);
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
GTK_TREE_VIEW_COLUMN_FIXED);
GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
@@ -347,17 +347,17 @@ add_columns (GtkTreeView *treeview)
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-1, "Owen",
renderer,
"active",
OWEN_COLUMN,
"visible",
VISIBLE_COLUMN,
NULL);
-1, "Owen",
renderer,
"active",
OWEN_COLUMN,
"visible",
VISIBLE_COLUMN,
NULL);
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
GTK_TREE_VIEW_COLUMN_FIXED);
GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
@@ -369,17 +369,17 @@ add_columns (GtkTreeView *treeview)
g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), model);
col_offset = gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (treeview),
-1, "Dave",
renderer,
"active",
DAVE_COLUMN,
"visible",
VISIBLE_COLUMN,
NULL);
-1, "Dave",
renderer,
"active",
DAVE_COLUMN,
"visible",
VISIBLE_COLUMN,
NULL);
column = gtk_tree_view_get_column (GTK_TREE_VIEW (treeview), col_offset - 1);
gtk_tree_view_column_set_sizing (GTK_TREE_VIEW_COLUMN (column),
GTK_TREE_VIEW_COLUMN_FIXED);
GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width (GTK_TREE_VIEW_COLUMN (column), 50);
gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
}
@@ -397,25 +397,25 @@ do_tree_store (GtkWidget *do_widget)
/* create window, etc */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
gtk_window_set_title (GTK_WINDOW (window), "Card planning sheet");
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 8);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 8);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_box_pack_start (GTK_BOX (vbox),
gtk_label_new ("Jonathan's Holiday Card Planning Sheet"),
FALSE, FALSE, 0);
gtk_label_new ("Jonathan's Holiday Card Planning Sheet"),
FALSE, FALSE, 0);
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
GTK_SHADOW_ETCHED_IN);
GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
/* create model */
@@ -426,7 +426,7 @@ do_tree_store (GtkWidget *do_widget)
g_object_unref (model);
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
gtk_tree_selection_set_mode (gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)),
GTK_SELECTION_MULTIPLE);
GTK_SELECTION_MULTIPLE);
add_columns (GTK_TREE_VIEW (treeview));
@@ -434,7 +434,7 @@ do_tree_store (GtkWidget *do_widget)
/* expand all rows after the treeview widget has been realized */
g_signal_connect (treeview, "realize",
G_CALLBACK (gtk_tree_view_expand_all), NULL);
G_CALLBACK (gtk_tree_view_expand_all), NULL);
gtk_window_set_default_size (GTK_WINDOW (window), 650, 400);
}

View File

@@ -15,8 +15,8 @@ activate_action (GtkAction *action)
static void
activate_radio_action (GtkAction *action, GtkRadioAction *current)
{
g_message ("Radio action \"%s\" selected",
gtk_action_get_name (GTK_ACTION (current)));
g_message ("Radio action \"%s\" selected",
gtk_action_get_name (GTK_ACTION (current)));
}
static GtkActionEntry entries[] = {
@@ -27,30 +27,30 @@ static GtkActionEntry entries[] = {
{ "HelpMenu", NULL, "_Help" }, /* name, stock id, label */
{ "New", GTK_STOCK_NEW, /* name, stock id */
"_New", "<control>N", /* label, accelerator */
"Create a new file", /* tooltip */
G_CALLBACK (activate_action) },
"Create a new file", /* tooltip */
G_CALLBACK (activate_action) },
{ "Open", GTK_STOCK_OPEN, /* name, stock id */
"_Open","<control>O", /* label, accelerator */
"_Open","<control>O", /* label, accelerator */
"Open a file", /* tooltip */
G_CALLBACK (activate_action) },
G_CALLBACK (activate_action) },
{ "Save", GTK_STOCK_SAVE, /* name, stock id */
"_Save","<control>S", /* label, accelerator */
"_Save","<control>S", /* label, accelerator */
"Save current file", /* tooltip */
G_CALLBACK (activate_action) },
{ "SaveAs", GTK_STOCK_SAVE, /* name, stock id */
"Save _As...", NULL, /* label, accelerator */
"Save _As...", NULL, /* label, accelerator */
"Save to a file", /* tooltip */
G_CALLBACK (activate_action) },
{ "Quit", GTK_STOCK_QUIT, /* name, stock id */
"_Quit", "<control>Q", /* label, accelerator */
"_Quit", "<control>Q", /* label, accelerator */
"Quit", /* tooltip */
G_CALLBACK (activate_action) },
{ "About", NULL, /* name, stock id */
"_About", "<control>A", /* label, accelerator */
"About", /* tooltip */
"_About", "<control>A", /* label, accelerator */
"About", /* tooltip */
G_CALLBACK (activate_action) },
{ "Logo", "demo-gtk-logo", /* name, stock id */
NULL, NULL, /* label, accelerator */
NULL, NULL, /* label, accelerator */
"GTK+", /* tooltip */
G_CALLBACK (activate_action) },
};
@@ -59,9 +59,9 @@ static guint n_entries = G_N_ELEMENTS (entries);
static GtkToggleActionEntry toggle_entries[] = {
{ "Bold", GTK_STOCK_BOLD, /* name, stock id */
"_Bold", "<control>B", /* label, accelerator */
"_Bold", "<control>B", /* label, accelerator */
"Bold", /* tooltip */
G_CALLBACK (activate_action),
G_CALLBACK (activate_action),
TRUE }, /* is_active */
};
static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
@@ -74,13 +74,13 @@ enum {
static GtkRadioActionEntry color_entries[] = {
{ "Red", NULL, /* name, stock id */
"_Red", "<control>R", /* label, accelerator */
"_Red", "<control>R", /* label, accelerator */
"Blood", COLOR_RED }, /* tooltip, value */
{ "Green", NULL, /* name, stock id */
"_Green", "<control>G", /* label, accelerator */
"_Green", "<control>G", /* label, accelerator */
"Grass", COLOR_GREEN }, /* tooltip, value */
{ "Blue", NULL, /* name, stock id */
"_Blue", "<control>B", /* label, accelerator */
"_Blue", "<control>B", /* label, accelerator */
"Sky", COLOR_BLUE }, /* tooltip, value */
};
static guint n_color_entries = G_N_ELEMENTS (color_entries);
@@ -93,18 +93,18 @@ enum {
static GtkRadioActionEntry shape_entries[] = {
{ "Square", NULL, /* name, stock id */
"_Square", "<control>S", /* label, accelerator */
"_Square", "<control>S", /* label, accelerator */
"Square", SHAPE_SQUARE }, /* tooltip, value */
{ "Rectangle", NULL, /* name, stock id */
"_Rectangle", "<control>R", /* label, accelerator */
"_Rectangle", "<control>R", /* label, accelerator */
"Rectangle", SHAPE_RECTANGLE }, /* tooltip, value */
{ "Oval", NULL, /* name, stock id */
"_Oval", "<control>O", /* label, accelerator */
"Egg", SHAPE_OVAL }, /* tooltip, value */
"_Oval", "<control>O", /* label, accelerator */
"Egg", SHAPE_OVAL }, /* tooltip, value */
};
static guint n_shape_entries = G_N_ELEMENTS (shape_entries);
static const gchar *ui_info =
static const gchar *ui_info =
"<ui>"
" <menubar name='MenuBar'>"
" <menu action='FileMenu'>"
@@ -117,9 +117,9 @@ static const gchar *ui_info =
" </menu>"
" <menu action='PreferencesMenu'>"
" <menu action='ColorMenu'>"
" <menuitem action='Red'/>"
" <menuitem action='Green'/>"
" <menuitem action='Blue'/>"
" <menuitem action='Red'/>"
" <menuitem action='Green'/>"
" <menuitem action='Blue'/>"
" </menu>"
" <menu action='ShapeMenu'>"
" <menuitem action='Square'/>"
@@ -144,7 +144,7 @@ GtkWidget *
do_ui_manager (GtkWidget *do_widget)
{
static GtkWidget *window = NULL;
if (!window)
{
GtkWidget *box1;
@@ -158,68 +158,66 @@ do_ui_manager (GtkWidget *do_widget)
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_screen (GTK_WINDOW (window),
gtk_widget_get_screen (do_widget));
gtk_widget_get_screen (do_widget));
g_signal_connect (window, "destroy",
G_CALLBACK (gtk_widget_destroyed), &window);
G_CALLBACK (gtk_widget_destroyed), &window);
g_signal_connect (window, "delete-event",
G_CALLBACK (gtk_true), NULL);
G_CALLBACK (gtk_true), NULL);
actions = gtk_action_group_new ("Actions");
gtk_action_group_add_actions (actions, entries, n_entries, NULL);
gtk_action_group_add_toggle_actions (actions,
toggle_entries, n_toggle_entries,
NULL);
gtk_action_group_add_radio_actions (actions,
color_entries, n_color_entries,
COLOR_RED,
G_CALLBACK (activate_radio_action),
NULL);
gtk_action_group_add_radio_actions (actions,
shape_entries, n_shape_entries,
SHAPE_OVAL,
G_CALLBACK (activate_radio_action),
NULL);
gtk_action_group_add_toggle_actions (actions,
toggle_entries, n_toggle_entries,
NULL);
gtk_action_group_add_radio_actions (actions,
color_entries, n_color_entries,
COLOR_RED,
G_CALLBACK (activate_radio_action),
NULL);
gtk_action_group_add_radio_actions (actions,
shape_entries, n_shape_entries,
SHAPE_OVAL,
G_CALLBACK (activate_radio_action),
NULL);
ui = gtk_ui_manager_new ();
gtk_ui_manager_insert_action_group (ui, actions, 0);
g_object_unref (actions);
gtk_window_add_accel_group (GTK_WINDOW (window),
gtk_ui_manager_get_accel_group (ui));
gtk_window_add_accel_group (GTK_WINDOW (window),
gtk_ui_manager_get_accel_group (ui));
gtk_window_set_title (GTK_WINDOW (window), "UI Manager");
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
if (!gtk_ui_manager_add_ui_from_string (ui, ui_info, -1, &error))
{
g_message ("building menus failed: %s", error->message);
g_error_free (error);
}
{
g_message ("building menus failed: %s", error->message);
g_error_free (error);
}
box1 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add (GTK_CONTAINER (window), box1);
gtk_box_pack_start (GTK_BOX (box1),
gtk_ui_manager_get_widget (ui, "/MenuBar"),
FALSE, FALSE, 0);
gtk_ui_manager_get_widget (ui, "/MenuBar"),
FALSE, FALSE, 0);
label = gtk_label_new ("Type\n<alt>\nto start");
gtk_widget_set_size_request (label, 200, 200);
gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5);
gtk_widget_set_halign (label, GTK_ALIGN_CENTER);
gtk_widget_set_valign (label, GTK_ALIGN_CENTER);
gtk_box_pack_start (GTK_BOX (box1), label, TRUE, TRUE, 0);
separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10);
gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
button = gtk_button_new_with_label ("close");
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (gtk_widget_destroy), window);
G_CALLBACK (gtk_widget_destroy), window);
gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
gtk_widget_set_can_default (button, TRUE);
gtk_widget_grab_default (button);

View File

@@ -8,7 +8,6 @@ EXTRA_DIST += \
developers.txt \
dnd_internals.txt \
focus_tracking.txt \
generation.txt \
gtkdocs_fix \
make-todo \
refcounting.txt \

View File

@@ -1,177 +0,0 @@
Overview:
========
This file describes the way that autogeneration
works within the GTK+ source code.
The following files in the gdk/ subdirectory
are autogenerated:
gdkkeysyms.h
gdkcursors.h
The following files in the gtk/ subdirectory
are autogenerated:
gtk.defs
Description of GTK+ types (and some functions) in a lisp-style
format.
gtktypebuiltins.h
Header file including declarations for internal types
gtktypebuiltins_vars.c
Variables for type values for internal types.
gtktypebuiltins_ids.c
Arrays holding information about each internal type.
gtktypebuiltins_evals.c
Arrays holding mapping between enumeration values
and strings.
gtkmarshal.c
gtkmarshal.h
Autogenerated signal marshallers
GDK
===
gdkkeysyms.h and gdkcursors.h are generated from
the corresponding header files
X11/cursorfont.h
X11/keysymdef.h
by some simple sed scripts. These are not actually
run automatically because we want all the keysyms
even on systems with a limited set.
So the Gdk rule to generate both files (X-derived-headers)
only needs to be rerun for every new release of the X Window
System.
GTK+ - type definitions
=======================
The type definitions are generated from several sources:
gtk-boxed.defs - definitions for boxed types
GTK+ header files
GDK header files
The makeenums.pl script does a heuristic parse of
the header files and extracts all enumerations declarations.
It also recognizes a number of pseudo-comments in the
header files:
Two of these apply to individual enumeration values:
/*< skip >*/
This enumeration value should be skipped.
/*< nick=NICK >*/
The nickname for this value should NICK instead of the
normally guessed value. For instance:
typedef enum {
GTK_TARGET_SAME_APP = 1 << 0, /*< nick=same-app >*/
GTK_TARGET_SAME_WIDGET = 1 << 1 /*< nick=same-widget >*/
} GtkTargetFlags;
makes the nicks "same-app" and "same-widget", instead of
"app" and "widget" that would normally be used.
The other two apply to entire enumeration declarations.
/*< prefix=PREFIX >*/
Specifies the prefix to be removed from the enumeration
values to generate nicknames.
/*< flags >*/
Specifies that this enumeration is used as a bitfield.
(makenums.pl normally guesses this from the presence of values
with << operators). For instance:
typedef enum /*< flags >*/
{
GDK_IM_PREEDIT_AREA = 0x0001,
GDK_IM_PREEDIT_CALLBACKS = 0x0002,
[ ... ]
} GdkIMStyle;
makeenums.pl can be run into two modes:
1) Generate the gtktypebuiltins_eval.c file (this
contains arrays holding the mapping of
string <=> enumeration value)
2) Generate the enumeration portion of gtk.defs.
The enumeration portion is added to the boxed type
declarations in gtk-boxed.defs to create gtk.defs.
The makeetypes.awk program takes the gtk.defs file, and
from that generates various files depending on the
third parameter passed to it:
macros: gtktypebuiltins.h
variables: gtktypebuiltins_vars.c
entries: gtktypebuiltins_ids.c
GTK+ - marshallers
==================
The files gtkmarshal.c and gtkmarshal.h include declarations
and definitions for the marshallers needed inside of
GTK+. The marshallers to be generated are listed in
the file gtkmashal.list, which is processed
by genmarshal.pl.
The format of this file is a list of lines:
<retval-type>:<arg1-type>,<arg2-type>,<arg3-type>
e.g.:
BOOL:POINTER,STRING,STRING,POINTER
A marshaller is generated for each line in the file.
The possible types are:
NONE
BOOL
CHAR
INT
UINT
LONG
ULONG
FLOAT
DOUBLE
STRING
ENUM
FLAGS
BOXED
POINTER
OBJECT
FOREIGN (gpointer data, GtkDestroyNotify notify)
C_CALLBACK (GtkFunction func, gpointer func_data)
SIGNAL (GtkSignalFunc f, gpointer data)
ARGS (gint n_args, GtkArg *args)
CALLBACK (GtkCallBackMarshal marshall,
gpointer data,
GtkDestroyNotify Notify)
Some of these types map to multiple return values - these
are marked above with the return types in parentheses.
NOTES
=====
When autogenerating GTK+ files, the autogenerated
files are often rebuild resulting in the same result.
To prevent unnecessary rebuilds of the entire directory, some files
that multiple other source files depend on are not actually written
to directly. Instead, an intermediate file is written, which
is then compared to the old file, and only if it is different
is it copied into the final location.

View File

@@ -57,6 +57,10 @@
<title>Index of new symbols in 3.0</title>
<xi:include href="xml/api-index-3.0.xml"><xi:fallback /></xi:include>
</index>
<index id="api-index-3-2" role="3.2">
<title>Index of new symbols in 3.2</title>
<xi:include href="xml/api-index-3.2.xml"><xi:fallback /></xi:include>
</index>
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>

View File

@@ -761,11 +761,16 @@ gdk_event_put
gdk_event_new
gdk_event_copy
gdk_event_free
gdk_event_get_time
gdk_event_get_state
gdk_event_get_axis
gdk_event_get_button
gdk_event_get_click_count
gdk_event_get_coords
gdk_event_get_keycode
gdk_event_get_keyval
gdk_event_get_root_coords
gdk_event_get_scroll_direction
gdk_event_get_state
gdk_event_get_time
gdk_event_request_motions
gdk_events_get_angle
gdk_events_get_center

View File

@@ -219,6 +219,8 @@
<xi:include href="xml/gtkfilechooserwidget.xml" />
<xi:include href="xml/gtkfilefilter.xml" />
<xi:include href="xml/gtkfontbutton.xml" />
<xi:include href="xml/gtkfontchooser.xml" />
<xi:include href="xml/gtkfontchooserdlg.xml" />
<xi:include href="xml/gtkfontsel.xml" />
<xi:include href="xml/gtkfontseldlg.xml" />
</chapter>

View File

@@ -305,6 +305,7 @@ gtk_adjustment_get_lower
gtk_adjustment_get_page_increment
gtk_adjustment_get_page_size
gtk_adjustment_get_step_increment
gtk_adjustment_get_minimum_increment
gtk_adjustment_get_upper
gtk_adjustment_set_lower
gtk_adjustment_set_page_increment
@@ -902,6 +903,7 @@ gtk_container_child_get_property
gtk_container_child_set_property
gtk_container_child_get_valist
gtk_container_child_set_valist
gtk_container_child_notify
gtk_container_forall
gtk_container_get_border_width
gtk_container_set_border_width
@@ -1476,6 +1478,77 @@ GtkFontSelectionDialogPrivate
gtk_font_selection_dialog_get_type
</SECTION>
<SECTION>
<FILE>gtkfontchooser</FILE>
<TITLE>GtkFontChooser</TITLE>
GtkFontChooser
gtk_font_chooser_get_font_family
gtk_font_chooser_get_font_face
gtk_font_chooser_get_font_size
gtk_font_chooser_get_font
gtk_font_chooser_set_font
gtk_font_chooser_get_font_desc
gtk_font_chooser_set_font_desc
gtk_font_chooser_get_preview_text
gtk_font_chooser_set_preview_text
gtk_font_chooser_get_show_preview_entry
gtk_font_chooser_set_show_preview_entry
GtkFontFilterFunc
gtk_font_chooser_set_filter_func
<SUBSECTION Standard>
GtkFontChooserIface
GTK_TYPE_FONT_CHOOSER
GTK_FONT_CHOOSER
GTK_FONT_CHOOSER_IFACE
GTK_IS_FONT_CHOOSER
GTK_IS_FONT_CHOOSER_IFACE
GTK_FONT_CHOOSER_GET_IFACE
<SUBSECTION Private>
gtk_font_chooser_get_type
</SECTION>
<SECTION>
<FILE>gtkfontchooserwidget</FILE>
<TITLE>GtkFontChooserWidget</TITLE>
GtkFontChooserWidget
gtk_font_chooser_widget_new
<SUBSECTION Standard>
GtkFontChooserWidgetClass
GTK_TYPE_FONT_CHOOSER_WIDGET
GTK_FONT_CHOOSER_WIDGET
GTK_FONT_CHOOSER_WIDGET_CLASS
GTK_IS_FONT_CHOOSER_WIDGET
GTK_IS_FONT_CHOOSER_WIDGET_CLASS
GTK_FONT_CHOOSER_WIDGET_GET_CLASS
<SUBSECTION Private>
GtkFontChooserWidgetPrivate
gtk_font_chooser_widget_get_type
</SECTION>
<SECTION>
<FILE>gtkfontchooserdlg</FILE>
<TITLE>GtkFontChooserDialog</TITLE>
GtkFontChooserDialog
gtk_font_chooser_dialog_new
<SUBSECTION Standard>
GtkFontChooserDialogClass
GTK_TYPE_FONT_CHOOSER_DIALOG
GTK_FONT_CHOOSER_DIALOG
GTK_FONT_CHOOSER_DIALOG_CLASS
GTK_IS_FONT_CHOOSER_DIALOG
GTK_IS_FONT_CHOOSER_DIALOG_CLASS
GTK_FONT_CHOOSER_DIALOG_GET_CLASS
<SUBSECTION Private>
GtkFontChooserDialogPrivate
gtk_font_chooser_dialog_get_type
</SECTION>
<SECTION>
<FILE>gtkframe</FILE>
<TITLE>GtkFrame</TITLE>
@@ -3269,6 +3342,7 @@ gtk_text_buffer_get_type
GtkTextIter
gtk_text_iter_get_buffer
gtk_text_iter_copy
gtk_text_iter_assign
gtk_text_iter_free
gtk_text_iter_get_offset
gtk_text_iter_get_line
@@ -4229,6 +4303,7 @@ gtk_tree_view_column_cell_is_visible
gtk_tree_view_column_focus_cell
gtk_tree_view_column_queue_resize
gtk_tree_view_column_get_tree_view
gtk_tree_view_column_get_x_offset
<SUBSECTION Standard>
GTK_TREE_VIEW_COLUMN
GTK_IS_TREE_VIEW_COLUMN
@@ -5111,6 +5186,7 @@ gtk_widget_unset_state_flags
gtk_widget_get_state_flags
gtk_widget_has_default
gtk_widget_has_focus
gtk_widget_has_visible_focus
gtk_widget_has_grab
gtk_widget_has_rc_style
gtk_widget_is_drawable
@@ -5293,6 +5369,8 @@ gtk_window_get_opacity
gtk_window_set_opacity
gtk_window_get_mnemonics_visible
gtk_window_set_mnemonics_visible
gtk_window_get_focus_visible
gtk_window_set_focus_visible
gtk_window_set_has_resize_grip
gtk_window_get_has_resize_grip
gtk_window_resize_grip_is_visible
@@ -5420,6 +5498,7 @@ GTK_CHECK_VERSION
GtkWidgetPath
gtk_widget_path_append_type
gtk_widget_path_append_with_siblings
gtk_widget_path_append_for_widget
gtk_widget_path_copy
gtk_widget_path_ref
gtk_widget_path_unref
@@ -5530,6 +5609,7 @@ GTK_STYLE_CLASS_BACKGROUND
GTK_STYLE_CLASS_BUTTON
GTK_STYLE_CLASS_CALENDAR
GTK_STYLE_CLASS_CELL
GTK_STYLE_CLASS_COMBOBOX_ENTRY
GTK_STYLE_CLASS_CHECK
GTK_STYLE_CLASS_DEFAULT
GTK_STYLE_CLASS_ENTRY
@@ -5679,6 +5759,19 @@ gtk_css_provider_new
gtk_css_provider_to_string
GTK_CSS_PROVIDER_ERROR
GtkCssProviderError
<SUBSECTION>
GtkCssSection
GtkCssSectionType
gtk_css_section_get_end_line
gtk_css_section_get_end_position
gtk_css_section_get_file
gtk_css_section_get_parent
gtk_css_section_get_section_type
gtk_css_section_get_start_line
gtk_css_section_get_start_position
gtk_css_section_get_type
gtk_css_section_ref
gtk_css_section_unref
<SUBSECTION Standard>
GTK_TYPE_CSS_PROVIDER
GTK_CSS_PROVIDER
@@ -5689,6 +5782,7 @@ GTK_IS_CSS_PROVIDER_CLASS
<SUBSECTION Private>
gtk_css_provider_get_type
gtk_css_provider_error_quark
gtk_css_section_get_type
</SECTION>
<SECTION>
@@ -6914,6 +7008,10 @@ GtkGrid
gtk_grid_new
gtk_grid_attach
gtk_grid_attach_next_to
gtk_grid_get_child_at
gtk_grid_insert_row
gtk_grid_insert_column
gtk_grid_insert_next_to
gtk_grid_set_row_homogeneous
gtk_grid_get_row_homogeneous
gtk_grid_set_row_spacing
@@ -6992,6 +7090,8 @@ gtk_app_chooser_button_new
gtk_app_chooser_button_append_custom_item
gtk_app_chooser_button_append_separator
gtk_app_chooser_button_set_active_custom_item
gtk_app_chooser_button_get_show_default_item
gtk_app_chooser_button_set_show_default_item
gtk_app_chooser_button_get_show_dialog_item
gtk_app_chooser_button_set_show_dialog_item
gtk_app_chooser_button_get_heading
@@ -7095,6 +7195,7 @@ GtkLockButtonPrivate
GtkOverlay
gtk_overlay_new
gtk_overlay_add_overlay
<SUBSECTION Standard>
GTK_TYPE_OVERLAY

View File

@@ -66,6 +66,9 @@ gtk_file_chooser_widget_get_type
gtk_file_filter_get_type
gtk_fixed_get_type
gtk_font_button_get_type
gtk_font_chooser_get_type
gtk_font_chooser_dialog_get_type
gtk_font_chooser_widget_get_type
gtk_font_selection_dialog_get_type
gtk_font_selection_get_type
gtk_frame_get_type

View File

@@ -25,7 +25,6 @@ EXTRA_DIST += \
gdk.def \
gdkmarshalers.list \
gdkwindowimpl.h \
makeenums.pl \
makefile.msc \
gdk.symbols \
gdkenumtypes.c.template \

View File

@@ -87,19 +87,6 @@ gdk_broadway_display_manager_lookup_keyval (GdkDisplayManager *manager,
return _gdk_keyval_from_name (name);
}
static void
gdk_broadway_display_manager_keyval_convert_case (GdkDisplayManager *manager,
guint symbol,
guint *lower,
guint *upper)
{
/* FIXME implement this */
if (lower)
*lower = symbol;
if (upper)
*upper = symbol;
}
static void
gdk_broadway_display_manager_init (GdkBroadwayDisplayManager *manager)
{
@@ -129,7 +116,6 @@ gdk_broadway_display_manager_class_init (GdkBroadwayDisplayManagerClass *class)
manager_class->get_atom_name = _gdk_broadway_display_manager_get_atom_name;
manager_class->lookup_keyval = gdk_broadway_display_manager_lookup_keyval;
manager_class->get_keyval_name = gdk_broadway_display_manager_get_keyval_name;
manager_class->keyval_convert_case = gdk_broadway_display_manager_keyval_convert_case;
}
void

View File

@@ -156,10 +156,15 @@ gdk_event_copy
gdk_event_free
gdk_event_get
gdk_event_get_axis
gdk_event_get_button
gdk_event_get_click_count
gdk_event_get_coords
gdk_event_get_device
gdk_event_get_keycode
gdk_event_get_keyval
gdk_event_get_root_coords
gdk_event_get_screen
gdk_event_get_scroll_direction
gdk_event_get_source_device
gdk_event_get_state
gdk_event_get_time

View File

@@ -427,7 +427,11 @@ gdk_cairo_region_create_from_surface (cairo_surface_t *surface)
gint x0 = x;
while (x < extents.width)
{
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
if (((data[x / 8] >> (x%8)) & 1) == 0)
#else
if (((data[x / 8] >> (7-(x%8))) & 1) == 0)
#endif
/* This pixel is "transparent"*/
break;
x++;

View File

@@ -1275,9 +1275,14 @@ gdk_display_pointer_is_grabbed (GdkDisplay *display)
if (gdk_device_get_source (device) == GDK_SOURCE_MOUSE &&
gdk_display_device_is_grabbed (display, device))
return TRUE;
{
g_list_free (devices);
return TRUE;
}
}
g_list_free (devices);
return FALSE;
}

View File

@@ -29,6 +29,7 @@
#include "gdkconfig.h"
#include "gdkdisplaymanagerprivate.h"
#include "gdkinternals.h"
#include "gdkkeysprivate.h"
#include "gdkmarshalers.h"
#include "gdkintl.h"
@@ -136,6 +137,8 @@ gdk_display_manager_class_init (GdkDisplayManagerClass *klass)
object_class->set_property = gdk_display_manager_set_property;
object_class->get_property = gdk_display_manager_get_property;
klass->keyval_convert_case = _gdk_display_manager_real_keyval_convert_case;
/**
* GdkDisplayManager::display-opened:
* @manager: the object on which the signal is emitted

View File

@@ -949,6 +949,192 @@ gdk_event_get_root_coords (const GdkEvent *event,
return fetched;
}
/**
* gdk_event_get_button:
* @event: a #GdkEvent
* @button: (out): location to store mouse button number
*
* Extract the button number from an event.
*
* Return value: %TRUE if the event delivered a button number
*
* Since: 3.2
**/
gboolean
gdk_event_get_button (const GdkEvent *event,
guint *button)
{
gboolean fetched = TRUE;
guint number = 0;
g_return_val_if_fail (event != NULL, FALSE);
switch (event->type)
{
case GDK_BUTTON_PRESS:
case GDK_2BUTTON_PRESS:
case GDK_3BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
number = event->button.button;
break;
default:
fetched = FALSE;
break;
}
if (button)
*button = number;
return fetched;
}
/**
* gdk_event_get_click_count:
* @event: a #GdkEvent
* @click_count: (out): location to store click count
*
* Extracts the click count from an event.
*
* Return value: %TRUE if the event delivered a click count
*
* Since: 3.2
*/
gboolean
gdk_event_get_click_count (const GdkEvent *event,
guint *click_count)
{
gboolean fetched = TRUE;
guint number = 0;
g_return_val_if_fail (event != NULL, FALSE);
switch (event->type)
{
case GDK_BUTTON_PRESS:
case GDK_BUTTON_RELEASE:
number = 1;
break;
case GDK_2BUTTON_PRESS:
number = 2;
break;
case GDK_3BUTTON_PRESS:
number = 3;
break;
default:
fetched = FALSE;
break;
}
if (click_count)
*click_count = number;
return fetched;
}
/**
* gdk_event_get_keyval:
* @event: a #GdkEvent
* @keyval: (out): location to store the keyval
*
* Extracts the keyval from an event.
*
* Return value: %TRUE if the event delivered a key symbol
*
* Since: 3.2
*/
gboolean
gdk_event_get_keyval (const GdkEvent *event,
guint *keyval)
{
gboolean fetched = TRUE;
guint number = 0;
switch (event->type)
{
case GDK_KEY_PRESS:
case GDK_KEY_RELEASE:
number = event->key.keyval;
break;
default:
fetched = FALSE;
break;
}
if (keyval)
*keyval = number;
return fetched;
}
/**
* gdk_event_get_keycode:
* @event: a #GdkEvent
* @keycode: (out): location to store the keycode
*
* Extracts the hardware keycode from an event.
*
* Return value: %TRUE if the event delivered a hardware keycode
*
* Since: 3.2
*/
gboolean
gdk_event_get_keycode (const GdkEvent *event,
guint16 *keycode)
{
gboolean fetched = TRUE;
guint16 number = 0;
switch (event->type)
{
case GDK_KEY_PRESS:
case GDK_KEY_RELEASE:
number = event->key.hardware_keycode;
break;
default:
fetched = FALSE;
break;
}
if (keycode)
*keycode = number;
return fetched;
}
/**
* gdk_event_get_scroll_direction:
* @event: a #GdkEvent
* @direction: (out): location to store the scroll direction
*
* Extracts the scroll direction from an event.
*
* Return value: %TRUE if the event delivered a scroll direction
*
* Since: 3.2
*/
gboolean
gdk_event_get_scroll_direction (const GdkEvent *event,
GdkScrollDirection *direction)
{
gboolean fetched = TRUE;
GdkScrollDirection dir = 0;
switch (event->type)
{
case GDK_SCROLL:
dir = event->scroll.direction;
break;
default:
fetched = FALSE;
break;
}
if (direction)
*direction = dir;
return fetched;
}
/**
* gdk_event_get_axis:
* @event: a #GdkEvent

View File

@@ -1054,9 +1054,19 @@ gboolean gdk_event_get_state (const GdkEvent *event,
gboolean gdk_event_get_coords (const GdkEvent *event,
gdouble *x_win,
gdouble *y_win);
gboolean gdk_event_get_root_coords (const GdkEvent *event,
gdouble *x_root,
gdouble *y_root);
gboolean gdk_event_get_root_coords (const GdkEvent *event,
gdouble *x_root,
gdouble *y_root);
gboolean gdk_event_get_button (const GdkEvent *event,
guint *button);
gboolean gdk_event_get_click_count (const GdkEvent *event,
guint *click_count);
gboolean gdk_event_get_keyval (const GdkEvent *event,
guint *keyval);
gboolean gdk_event_get_keycode (const GdkEvent *event,
guint16 *keycode);
gboolean gdk_event_get_scroll_direction (const GdkEvent *event,
GdkScrollDirection *direction);
gboolean gdk_event_get_axis (const GdkEvent *event,
GdkAxisUse axis_use,
gdouble *value);

View File

@@ -26,6 +26,7 @@
#include "config.h"
#include "gdkkeysyms.h"
#include "gdkkeysprivate.h"
#include "gdkdisplay.h"
#include "gdkdisplaymanagerprivate.h"
@@ -649,3 +650,129 @@ gdk_keyval_from_name (const gchar *keyval_name)
return GDK_DISPLAY_MANAGER_GET_CLASS (manager)->lookup_keyval (manager,
keyval_name);
}
void
_gdk_display_manager_real_keyval_convert_case (GdkDisplayManager *manager,
guint symbol,
guint *lower,
guint *upper)
{
guint xlower = symbol;
guint xupper = symbol;
/* Check for directly encoded 24-bit UCS characters: */
if ((symbol & 0xff000000) == 0x01000000)
{
if (lower)
*lower = gdk_unicode_to_keyval (g_unichar_tolower (symbol & 0x00ffffff));
if (upper)
*upper = gdk_unicode_to_keyval (g_unichar_toupper (symbol & 0x00ffffff));
return;
}
switch (symbol >> 8)
{
case 0: /* Latin 1 */
if ((symbol >= GDK_KEY_A) && (symbol <= GDK_KEY_Z))
xlower += (GDK_KEY_a - GDK_KEY_A);
else if ((symbol >= GDK_KEY_a) && (symbol <= GDK_KEY_z))
xupper -= (GDK_KEY_a - GDK_KEY_A);
else if ((symbol >= GDK_KEY_Agrave) && (symbol <= GDK_KEY_Odiaeresis))
xlower += (GDK_KEY_agrave - GDK_KEY_Agrave);
else if ((symbol >= GDK_KEY_agrave) && (symbol <= GDK_KEY_odiaeresis))
xupper -= (GDK_KEY_agrave - GDK_KEY_Agrave);
else if ((symbol >= GDK_KEY_Ooblique) && (symbol <= GDK_KEY_Thorn))
xlower += (GDK_KEY_oslash - GDK_KEY_Ooblique);
else if ((symbol >= GDK_KEY_oslash) && (symbol <= GDK_KEY_thorn))
xupper -= (GDK_KEY_oslash - GDK_KEY_Ooblique);
break;
case 1: /* Latin 2 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol == GDK_KEY_Aogonek)
xlower = GDK_KEY_aogonek;
else if (symbol >= GDK_KEY_Lstroke && symbol <= GDK_KEY_Sacute)
xlower += (GDK_KEY_lstroke - GDK_KEY_Lstroke);
else if (symbol >= GDK_KEY_Scaron && symbol <= GDK_KEY_Zacute)
xlower += (GDK_KEY_scaron - GDK_KEY_Scaron);
else if (symbol >= GDK_KEY_Zcaron && symbol <= GDK_KEY_Zabovedot)
xlower += (GDK_KEY_zcaron - GDK_KEY_Zcaron);
else if (symbol == GDK_KEY_aogonek)
xupper = GDK_KEY_Aogonek;
else if (symbol >= GDK_KEY_lstroke && symbol <= GDK_KEY_sacute)
xupper -= (GDK_KEY_lstroke - GDK_KEY_Lstroke);
else if (symbol >= GDK_KEY_scaron && symbol <= GDK_KEY_zacute)
xupper -= (GDK_KEY_scaron - GDK_KEY_Scaron);
else if (symbol >= GDK_KEY_zcaron && symbol <= GDK_KEY_zabovedot)
xupper -= (GDK_KEY_zcaron - GDK_KEY_Zcaron);
else if (symbol >= GDK_KEY_Racute && symbol <= GDK_KEY_Tcedilla)
xlower += (GDK_KEY_racute - GDK_KEY_Racute);
else if (symbol >= GDK_KEY_racute && symbol <= GDK_KEY_tcedilla)
xupper -= (GDK_KEY_racute - GDK_KEY_Racute);
break;
case 2: /* Latin 3 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Hstroke && symbol <= GDK_KEY_Hcircumflex)
xlower += (GDK_KEY_hstroke - GDK_KEY_Hstroke);
else if (symbol >= GDK_KEY_Gbreve && symbol <= GDK_KEY_Jcircumflex)
xlower += (GDK_KEY_gbreve - GDK_KEY_Gbreve);
else if (symbol >= GDK_KEY_hstroke && symbol <= GDK_KEY_hcircumflex)
xupper -= (GDK_KEY_hstroke - GDK_KEY_Hstroke);
else if (symbol >= GDK_KEY_gbreve && symbol <= GDK_KEY_jcircumflex)
xupper -= (GDK_KEY_gbreve - GDK_KEY_Gbreve);
else if (symbol >= GDK_KEY_Cabovedot && symbol <= GDK_KEY_Scircumflex)
xlower += (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
else if (symbol >= GDK_KEY_cabovedot && symbol <= GDK_KEY_scircumflex)
xupper -= (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
break;
case 3: /* Latin 4 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Rcedilla && symbol <= GDK_KEY_Tslash)
xlower += (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
else if (symbol >= GDK_KEY_rcedilla && symbol <= GDK_KEY_tslash)
xupper -= (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
else if (symbol == GDK_KEY_ENG)
xlower = GDK_KEY_eng;
else if (symbol == GDK_KEY_eng)
xupper = GDK_KEY_ENG;
else if (symbol >= GDK_KEY_Amacron && symbol <= GDK_KEY_Umacron)
xlower += (GDK_KEY_amacron - GDK_KEY_Amacron);
else if (symbol >= GDK_KEY_amacron && symbol <= GDK_KEY_umacron)
xupper -= (GDK_KEY_amacron - GDK_KEY_Amacron);
break;
case 6: /* Cyrillic */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Serbian_DJE && symbol <= GDK_KEY_Serbian_DZE)
xlower -= (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
else if (symbol >= GDK_KEY_Serbian_dje && symbol <= GDK_KEY_Serbian_dze)
xupper += (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
else if (symbol >= GDK_KEY_Cyrillic_YU && symbol <= GDK_KEY_Cyrillic_HARDSIGN)
xlower -= (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
else if (symbol >= GDK_KEY_Cyrillic_yu && symbol <= GDK_KEY_Cyrillic_hardsign)
xupper += (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
break;
case 7: /* Greek */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Greek_ALPHAaccent && symbol <= GDK_KEY_Greek_OMEGAaccent)
xlower += (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
else if (symbol >= GDK_KEY_Greek_alphaaccent && symbol <= GDK_KEY_Greek_omegaaccent &&
symbol != GDK_KEY_Greek_iotaaccentdieresis &&
symbol != GDK_KEY_Greek_upsilonaccentdieresis)
xupper -= (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
else if (symbol >= GDK_KEY_Greek_ALPHA && symbol <= GDK_KEY_Greek_OMEGA)
xlower += (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
else if (symbol >= GDK_KEY_Greek_alpha && symbol <= GDK_KEY_Greek_omega &&
symbol != GDK_KEY_Greek_finalsmallsigma)
xupper -= (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
break;
}
if (lower)
*lower = xlower;
if (upper)
*upper = xupper;
}

View File

@@ -106,15 +106,6 @@ gboolean gdk_keymap_get_entries_for_keycode (GdkKeymap *keymap,
guint **keyvals,
gint *n_entries);
/**
* gdk_keymap_get_direction:
* @keymap: a #GdkKeymap or %NULL to use the default keymap.
*
* Returns the direction of the keymap.
*
* Returns: the direction of the keymap, %PANGO_DIRECTION_LTR or
* %PANGO_DIRECTION_RTL.
*/
PangoDirection gdk_keymap_get_direction (GdkKeymap *keymap);
gboolean gdk_keymap_have_bidi_layouts (GdkKeymap *keymap);
gboolean gdk_keymap_get_caps_lock_state (GdkKeymap *keymap);
@@ -128,15 +119,6 @@ gboolean gdk_keymap_map_virtual_modifiers (GdkKeymap *keymap,
*/
gchar* gdk_keyval_name (guint keyval) G_GNUC_CONST;
/**
* gdk_keyval_from_name:
* @keyval_name: a key name.
*
* Converts a key name to a key value.
*
* Returns: the corresponding key value, or %GDK_VoidSymbol if the key name is
* not a valid key.
*/
guint gdk_keyval_from_name (const gchar *keyval_name);
void gdk_keyval_convert_case (guint symbol,
guint *lower,

View File

@@ -75,6 +75,11 @@ struct _GdkKeymap
GdkDisplay *display;
};
void _gdk_display_manager_real_keyval_convert_case (GdkDisplayManager *manager,
guint symbol,
guint *lower,
guint *upper);
G_END_DECLS
#endif

View File

@@ -356,12 +356,11 @@ gdk_pango_context_get_for_screen (GdkScreen *screen)
PangoContext *context;
const cairo_font_options_t *options;
double dpi;
g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
fontmap = pango_cairo_font_map_get_default ();
context = pango_cairo_font_map_create_context (PANGO_CAIRO_FONT_MAP (fontmap));
context = pango_font_map_create_context (fontmap);
options = gdk_screen_get_font_options (screen);
pango_cairo_context_set_font_options (context, options);

View File

@@ -287,13 +287,14 @@ gdk_screen_get_monitor_at_point (GdkScreen *screen,
* gdk_screen_get_monitor_at_window:
* @screen: a #GdkScreen.
* @window: a #GdkWindow
* @returns: the monitor number in which most of @window is located,
* or if @window does not intersect any monitors, a monitor,
* close to @window.
*
* Returns the number of the monitor in which the largest area of the
* Returns the number of the monitor in which the largest area of the
* bounding rectangle of @window resides.
*
* Returns: the monitor number in which most of @window is located,
* or if @window does not intersect any monitors, a monitor,
* close to @window.
*
* Since: 2.2
**/
gint

View File

@@ -2043,7 +2043,7 @@ gdk_window_destroy (GdkWindow *window)
/**
* gdk_window_set_user_data:
* @window: a #GdkWindow
* @user_data: (allow-none): user data
* @user_data: (allow-none) (type GObject.Object): user data
*
* For most purposes this function is deprecated in favor of
* g_object_set_data(). However, for historical reasons GTK+ stores

View File

@@ -1,279 +0,0 @@
#!/usr/bin/perl -w
# Information about the current enumeration
my $flags; # Is enumeration a bitmask
my $seenbitshift; # Have we seen bitshift operators?
my $prefix; # Prefix for this enumeration
my $enumname; # Name for this enumeration
my $firstenum = 1; # Is this the first enumeration in file?
my @entries; # [ $name, $val ] for each entry
sub parse_options {
my $opts = shift;
my @opts;
for $opt (split /\s*,\s*/, $opts) {
my ($key,$val) = $opt =~ /\s*(\w+)(?:=(\S+))?/;
defined $val or $val = 1;
push @opts, $key, $val;
}
@opts;
}
sub parse_entries {
my $file = shift;
while (<$file>) {
# Read lines until we have no open comments
while (m@/\*
([^*]|\*(?!/))*$
@x) {
my $new;
defined ($new = <$file>) || die "Unmatched comment";
$_ .= $new;
}
# Now strip comments
s@/\*(?!<)
([^*]+|\*(?!/))*
\*/@@gx;
s@\n@ @;
next if m@^\s*$@;
# Handle include files
if (/^\#include\s*<([^>]*)>/ ) {
my $file= "../$1";
open NEWFILE, $file or die "Cannot open include file $file: $!\n";
if (parse_entries (\*NEWFILE)) {
return 1;
} else {
next;
}
}
if (/^\s*\}\s*(\w+)/) {
$enumname = $1;
return 1;
}
if (m@^\s*
(\w+)\s* # name
(?:=( # value
(?:[^,/]|/(?!\*))*
))?,?\s*
(?:/\*< # options
(([^*]|\*(?!/))*)
>\*/)?
\s*$
@x) {
my ($name, $value, $options) = ($1,$2,$3);
if (!defined $flags && defined $value && $value =~ /<</) {
$seenbitshift = 1;
}
if (defined $options) {
my %options = parse_options($options);
if (!defined $options{skip}) {
push @entries, [ $name, $options{nick} ];
}
} else {
push @entries, [ $name ];
}
} else {
print STDERR "Can't understand: $_\n";
}
}
return 0;
}
my $gen_arrays = 0;
my $gen_defs = 0;
my $gen_includes = 0;
my $gen_cfile = 0;
# Parse arguments
if (@ARGV) {
if ($ARGV[0] eq "arrays") {
shift @ARGV;
$gen_arrays = 1;
} elsif ($ARGV[0] eq "defs") {
shift @ARGV;
$gen_defs = 1;
} elsif ($ARGV[0] eq "include") {
shift @ARGV;
$gen_includes = 1;
} elsif ($ARGV[0] eq "cfile") {
shift @ARGV;
$gen_cfile = 1;
}
}
if ($gen_defs) {
print ";; generated by makeenums.pl ; -*- scheme -*-\n\n";
} else {
print "/* Generated by makeenums.pl */\n\n";
}
if ($gen_includes) {
print "#ifndef __GDK_ENUM_TYPES_H__\n";
print "#define __GDK_ENUM_TYPES_H__\n";
}
if ($gen_cfile) {
print "#include \"gdk.h\"\n";
}
ENUMERATION:
while (<>) {
if (eof) {
close (ARGV); # reset line numbering
$firstenum = 1; # Flag to print filename at next enum
}
if (m@^\s*typedef\s+enum\s*
({)?\s*
(?:/\*<
(([^*]|\*(?!/))*)
>\*/)?
@x) {
print "\n";
if (defined $2) {
my %options = parse_options($2);
$prefix = $options{prefix};
$flags = $options{flags};
} else {
$prefix = undef;
$flags = undef;
}
# Didn't have trailing '{' look on next lines
if (!defined $1) {
while (<>) {
if (s/^\s*\{//) {
last;
}
}
}
$seenbitshift = 0;
@entries = ();
# Now parse the entries
parse_entries (\*ARGV);
# figure out if this was a flags or enums enumeration
if (!defined $flags) {
$flags = $seenbitshift;
}
# Autogenerate a prefix
if (!defined $prefix) {
for (@entries) {
my $name = $_->[0];
if (defined $prefix) {
my $tmp = ~ ($name ^ $prefix);
($tmp) = $tmp =~ /(^\xff*)/;
$prefix = $prefix & $tmp;
} else {
$prefix = $name;
}
}
# Trim so that it ends in an underscore
$prefix =~ s/_[^_]*$/_/;
}
for $entry (@entries) {
my ($name,$nick) = @{$entry};
if (!defined $nick) {
($nick = $name) =~ s/^$prefix//;
$nick =~ tr/_/-/;
$nick = lc($nick);
@{$entry} = ($name, $nick);
}
}
# Spit out the output
my $valuename = $enumname;
$valuename =~ s/([^A-Z])([A-Z])/$1_$2/g;
$valuename =~ s/([A-Z][A-Z])([A-Z][0-9a-z])/$1_$2/g;
$valuename = lc($valuename);
my $typemacro = $enumname;
$typemacro =~ s/([^A-Z])([A-Z])/$1_$2/g;
$typemacro =~ s/([A-Z][A-Z])([A-Z][0-9a-z])/$1_$2/g;
$typemacro = uc($valuename);
$typemacro =~ s/GDK_/GDK_TYPE_/g;
if ($gen_defs) {
if ($firstenum) {
print qq(\n; enumerations from "$ARGV"\n);
$firstenum = 0;
}
print "\n(define-".($flags ? "flags" : "enum")." $enumname";
for (@entries) {
my ($name,$nick) = @{$_};
print "\n ($nick $name)";
}
print ")\n";
} elsif ($gen_arrays) {
print "static const GtkEnumValue _${valuename}_values[] = {\n";
for (@entries) {
my ($name,$nick) = @{$_};
print qq( { $name, "$name", "$nick" },\n);
}
print " { 0, NULL, NULL }\n";
print "};\n";
} elsif ($gen_includes) {
print "GType ${valuename}_get_type (void);\n";
print "#define ${typemacro} ${valuename}_get_type ()\n";
} elsif ($gen_cfile) {
print (<<EOF);
GType
${valuename}_get_type (void)
{
static GType etype = 0;
if (etype == 0)
{
EOF
if ($flags) {
print " static const GFlagsValue values[] = {\n";
} else {
print " static const GEnumValue values[] = {\n";
}
for (@entries) {
my ($name,$nick) = @{$_};
print qq( { $name, "$name", "$nick" },\n);
}
print " { 0, NULL, NULL }\n";
print " };\n";
if ($flags) {
print " etype = g_flags_register_static (\"$enumname\", values);\n";
} else {
print " etype = g_enum_register_static (\"$enumname\", values);\n";
}
print (<<EOF);
}
return etype;
}
EOF
}
print "\n";
}
}
if ($gen_includes) {
print "#endif /* __GDK_ENUMS_H__ */\n";
}

View File

@@ -165,6 +165,11 @@
window->width = content_rect.size.width;
window->height = content_rect.size.height;
/* Certain resize operations (e.g. going fullscreen), also move the
* origin of the window.
*/
_gdk_quartz_window_update_position (window);
[[self contentView] setFrame:NSMakeRect (0, 0, window->width, window->height)];
_gdk_window_update_size (window);

View File

@@ -214,7 +214,8 @@ gdk_quartz_device_core_query_state_helper (GdkWindow *window,
toplevel = gdk_window_get_effective_toplevel (window);
if (mask)
*mask = _gdk_quartz_events_get_current_event_mask ();
*mask = _gdk_quartz_events_get_current_keyboard_modifiers () |
_gdk_quartz_events_get_current_mouse_modifiers ();
/* Get the y coordinate, needs to be flipped. */
if (window == _gdk_root)
@@ -267,7 +268,6 @@ gdk_quartz_device_core_query_state (GdkDevice *device,
gint *win_y,
GdkModifierType *mask)
{
GdkDisplay *display;
GdkWindow *found_window;
NSPoint point;
gint x_tmp, y_tmp;
@@ -275,10 +275,6 @@ gdk_quartz_device_core_query_state (GdkDevice *device,
found_window = gdk_quartz_device_core_query_state_helper (window, device,
win_x, win_y,
mask);
if (!found_window)
return FALSE;
display = gdk_window_get_display (window);
if (root_window)
*root_window = _gdk_root;
@@ -358,7 +354,8 @@ gdk_quartz_device_core_window_at_position (GdkDevice *device,
*win_y = found_window ? y_tmp : -1;
if (mask)
*mask = _gdk_quartz_events_get_current_event_mask ();
*mask = _gdk_quartz_events_get_current_keyboard_modifiers () |
_gdk_quartz_events_get_current_mouse_modifiers ();
return found_window;
}

View File

@@ -91,19 +91,6 @@ gdk_quartz_display_manager_lookup_keyval (GdkDisplayManager *manager,
return _gdk_keyval_from_name (name);
}
static void
gdk_quartz_display_manager_keyval_convert_case (GdkDisplayManager *manager,
guint symbol,
guint *lower,
guint *upper)
{
/* FIXME implement this */
if (lower)
*lower = symbol;
if (upper)
*upper = symbol;
}
static void
gdk_quartz_display_manager_init (GdkQuartzDisplayManager *manager)
{
@@ -144,7 +131,6 @@ gdk_quartz_display_manager_class_init (GdkQuartzDisplayManagerClass *class)
manager_class->get_atom_name = _gdk_quartz_display_manager_get_atom_name;
manager_class->lookup_keyval = gdk_quartz_display_manager_lookup_keyval;
manager_class->get_keyval_name = gdk_quartz_display_manager_get_keyval_name;
manager_class->keyval_convert_case = gdk_quartz_display_manager_keyval_convert_case;
}
void

View File

@@ -124,7 +124,7 @@ static NSAutoreleasePool *autorelease_pool;
* a run loop iteration, so we need to detect that and avoid triggering
* our "run the GLib main looop while the run loop is active machinery.
*/
static gboolean getting_events;
static gint getting_events = 0;
/************************************************************
********* Select Thread *********
@@ -207,9 +207,12 @@ signal_main_thread (void)
*/
if (!run_loop_polling_async)
CFRunLoopSourceSignal (select_main_thread_source);
if (CFRunLoopIsWaiting (main_thread_run_loop))
CFRunLoopWakeUp (main_thread_run_loop);
/* Don't check for CFRunLoopIsWaiting() here because it causes a
* race condition (the loop could go into waiting state right after
* we checked).
*/
CFRunLoopWakeUp (main_thread_run_loop);
}
static void *
@@ -632,17 +635,18 @@ gdk_event_check (GSource *source)
GDK_THREADS_ENTER ();
/* Refresh the autorelease pool if we're at the base CFRunLoop level
* (indicated by current_loop_level) and the base g_main_loop level
* (indicated by g_main_depth()). Messing with the autorelease pool at
* any level of nesting can cause access to deallocated memory because
* autorelease_pool is static and releasing a pool will cause all
* pools allocated inside of it to be released as well.
*/
/* Refresh the autorelease pool if we're at the base CFRunLoop level
* (indicated by current_loop_level) and the base g_main_loop level
* (indicated by g_main_depth()). Messing with the autorelease pool at
* any level of nesting can cause access to deallocated memory because
* autorelease_pool is static and releasing a pool will cause all pools
* allocated inside of it to be released as well.
*/
if (current_loop_level == 0 && g_main_depth() == 0)
{
if (autorelease_pool)
[autorelease_pool release];
[autorelease_pool drain];
autorelease_pool = [[NSAutoreleasePool alloc] init];
}
@@ -710,12 +714,12 @@ poll_func (GPollFD *ufds,
else
limit_date = [NSDate dateWithTimeIntervalSinceNow:timeout_/1000.0];
getting_events = TRUE;
getting_events++;
event = [NSApp nextEventMatchingMask: NSAnyEventMask
untilDate: limit_date
inMode: NSDefaultRunLoopMode
dequeue: YES];
getting_events = FALSE;
getting_events--;
if (n_ready < 0)
n_ready = select_thread_collect_poll (ufds, nfds);
@@ -776,8 +780,6 @@ query_main_context (GMainContext *context,
static void
run_loop_entry (void)
{
current_loop_level++;
if (acquired_loop_level == -1)
{
if (g_main_context_acquire (NULL))
@@ -926,16 +928,13 @@ run_loop_after_waiting (void)
static void
run_loop_exit (void)
{
g_return_if_fail (current_loop_level > 0);
if (current_loop_level == acquired_loop_level)
/* + 1 because we decrement current_loop_level separately in observer_callback() */
if ((current_loop_level + 1) == acquired_loop_level)
{
g_main_context_release (NULL);
acquired_loop_level = -1;
GDK_NOTE (EVENTLOOP, g_print ("EventLoop: Ended tracking run loop activity\n"));
}
current_loop_level--;
}
static void
@@ -943,9 +942,22 @@ run_loop_observer_callback (CFRunLoopObserverRef observer,
CFRunLoopActivity activity,
void *info)
{
if (getting_events) /* Activity we triggered */
switch (activity)
{
case kCFRunLoopEntry:
current_loop_level++;
break;
case kCFRunLoopExit:
g_return_if_fail (current_loop_level > 0);
current_loop_level--;
break;
default:
break;
}
if (getting_events > 0) /* Activity we triggered */
return;
switch (activity)
{
case kCFRunLoopEntry:

View File

@@ -33,12 +33,14 @@
#include "gdkscreen.h"
#include "gdkkeysyms.h"
#include "gdkquartz.h"
#include "gdkquartzdisplay.h"
#include "gdkprivate-quartz.h"
#include "gdkquartzdevicemanager-core.h"
#define GRIP_WIDTH 15
#define GRIP_HEIGHT 15
#define GDK_LION_RESIZE 5
#define WINDOW_IS_TOPLEVEL(window) \
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
@@ -48,9 +50,6 @@
/* This is the window corresponding to the key window */
static GdkWindow *current_keyboard_window;
/* This is the event mask and button state from the last event */
static GdkEventMask current_event_mask;
static int current_button_state;
static void append_event (GdkEvent *event,
gboolean windowing);
@@ -193,6 +192,25 @@ get_mouse_button_from_ns_event (NSEvent *event)
}
}
static GdkModifierType
get_mouse_button_modifiers_from_ns_buttons (NSUInteger nsbuttons)
{
GdkModifierType modifiers = 0;
if (nsbuttons & (1 << 0))
modifiers |= GDK_BUTTON1_MASK;
if (nsbuttons & (1 << 1))
modifiers |= GDK_BUTTON3_MASK;
if (nsbuttons & (1 << 2))
modifiers |= GDK_BUTTON2_MASK;
if (nsbuttons & (1 << 3))
modifiers |= GDK_BUTTON4_MASK;
if (nsbuttons & (1 << 4))
modifiers |= GDK_BUTTON5_MASK;
return modifiers;
}
static GdkModifierType
get_mouse_button_modifiers_from_ns_event (NSEvent *event)
{
@@ -208,25 +226,30 @@ get_mouse_button_modifiers_from_ns_event (NSEvent *event)
}
static GdkModifierType
get_keyboard_modifiers_from_ns_event (NSEvent *nsevent)
get_keyboard_modifiers_from_ns_flags (NSUInteger nsflags)
{
GdkModifierType modifiers = 0;
int nsflags;
nsflags = [nsevent modifierFlags];
if (nsflags & NSAlphaShiftKeyMask)
modifiers |= GDK_LOCK_MASK;
if (nsflags & NSShiftKeyMask)
modifiers |= GDK_SHIFT_MASK;
if (nsflags & NSControlKeyMask)
modifiers |= GDK_CONTROL_MASK;
if (nsflags & NSCommandKeyMask)
if (nsflags & NSAlternateKeyMask)
modifiers |= GDK_MOD1_MASK;
if (nsflags & NSCommandKeyMask)
modifiers |= GDK_MOD2_MASK;
return modifiers;
}
static GdkModifierType
get_keyboard_modifiers_from_ns_event (NSEvent *nsevent)
{
return get_keyboard_modifiers_from_ns_flags ([nsevent modifierFlags]);
}
/* Return an event mask from an NSEvent */
static GdkEventMask
get_event_mask_from_ns_event (NSEvent *nsevent)
@@ -357,7 +380,8 @@ generate_motion_event (GdkWindow *window)
event->motion.x_root = x_root;
event->motion.y_root = y_root;
/* FIXME event->axes */
event->motion.state = 0;
event->motion.state = _gdk_quartz_events_get_current_keyboard_modifiers () |
_gdk_quartz_events_get_current_mouse_modifiers ();
event->motion.is_hint = FALSE;
event->motion.device = _gdk_display->core_pointer;
@@ -442,7 +466,8 @@ _gdk_quartz_events_send_enter_notify_event (GdkWindow *window)
event->crossing.y_root = y_root;
event->crossing.mode = GDK_CROSSING_NORMAL;
event->crossing.detail = GDK_NOTIFY_ANCESTOR;
event->crossing.state = 0;
event->crossing.state = _gdk_quartz_events_get_current_keyboard_modifiers () |
_gdk_quartz_events_get_current_mouse_modifiers ();
gdk_event_set_device (event, _gdk_display->core_pointer);
@@ -647,30 +672,6 @@ find_toplevel_for_mouse_event (NSEvent *nsevent,
toplevel_impl = (GdkWindowImplQuartz *)toplevel->impl;
if ([toplevel_impl->toplevel showsResizeIndicator])
{
NSRect frame;
/* If the resize indicator is visible and the event
* is in the lower right 15x15 corner, we leave these
* events to Cocoa as to be handled as resize events.
* Applications may have widgets in this area. These
* will most likely be larger than 15x15 and for
* scroll bars there are also other means to move
* the scroll bar. Since the resize indicator is
* the only way of resizing windows on Mac OS, it
* is too important to not make functional.
*/
frame = [toplevel_impl->view bounds];
if (x_tmp > frame.size.width - GRIP_WIDTH
&& x_tmp < frame.size.width
&& y_tmp > frame.size.height - GRIP_HEIGHT
&& y_tmp < frame.size.height)
{
return NULL;
}
}
*x = x_tmp;
*y = y_tmp;
}
@@ -770,7 +771,8 @@ fill_crossing_event (GdkWindow *toplevel,
event->crossing.y_root = y_root;
event->crossing.mode = mode;
event->crossing.detail = detail;
event->crossing.state = get_keyboard_modifiers_from_ns_event (nsevent);
event->crossing.state = get_keyboard_modifiers_from_ns_event (nsevent) |
_gdk_quartz_events_get_current_mouse_modifiers ();
gdk_event_set_device (event, _gdk_display->core_pointer);
@@ -788,9 +790,9 @@ fill_button_event (GdkWindow *window,
{
GdkEventType type;
gint state;
gint button;
state = get_keyboard_modifiers_from_ns_event (nsevent);
state = get_keyboard_modifiers_from_ns_event (nsevent) |
_gdk_quartz_events_get_current_mouse_modifiers ();
switch ([nsevent type])
{
@@ -798,18 +800,19 @@ fill_button_event (GdkWindow *window,
case NSRightMouseDown:
case NSOtherMouseDown:
type = GDK_BUTTON_PRESS;
state &= ~get_mouse_button_modifiers_from_ns_event (nsevent);
break;
case NSLeftMouseUp:
case NSRightMouseUp:
case NSOtherMouseUp:
type = GDK_BUTTON_RELEASE;
state |= get_mouse_button_modifiers_from_ns_event (nsevent);
break;
default:
g_assert_not_reached ();
}
button = get_mouse_button_from_ns_event (nsevent);
event->any.type = type;
event->button.window = window;
@@ -820,7 +823,7 @@ fill_button_event (GdkWindow *window,
event->button.y_root = y_root;
/* FIXME event->axes */
event->button.state = state;
event->button.button = button;
event->button.button = get_mouse_button_from_ns_event (nsevent);
event->button.device = _gdk_display->core_pointer;
}
@@ -833,22 +836,6 @@ fill_motion_event (GdkWindow *window,
gint x_root,
gint y_root)
{
GdkModifierType state;
state = get_keyboard_modifiers_from_ns_event (nsevent);
switch ([nsevent type])
{
case NSLeftMouseDragged:
case NSRightMouseDragged:
case NSOtherMouseDragged:
state |= get_mouse_button_modifiers_from_ns_event (nsevent);
break;
case NSMouseMoved:
break;
}
event->any.type = GDK_MOTION_NOTIFY;
event->motion.window = window;
event->motion.time = get_time_from_ns_event (nsevent);
@@ -857,7 +844,8 @@ fill_motion_event (GdkWindow *window,
event->motion.x_root = x_root;
event->motion.y_root = y_root;
/* FIXME event->axes */
event->motion.state = state;
event->motion.state = get_keyboard_modifiers_from_ns_event (nsevent) |
_gdk_quartz_events_get_current_mouse_modifiers ();
event->motion.is_hint = FALSE;
event->motion.device = _gdk_display->core_pointer;
}
@@ -934,7 +922,7 @@ fill_key_event (GdkWindow *window,
{
case GDK_KEY_Meta_R:
case GDK_KEY_Meta_L:
mask = GDK_MOD1_MASK;
mask = GDK_MOD2_MASK;
break;
case GDK_KEY_Shift_R:
case GDK_KEY_Shift_L:
@@ -945,7 +933,7 @@ fill_key_event (GdkWindow *window,
break;
case GDK_KEY_Alt_R:
case GDK_KEY_Alt_L:
mask = GDK_MOD5_MASK;
mask = GDK_MOD1_MASK;
break;
case GDK_KEY_Control_R:
case GDK_KEY_Control_L:
@@ -961,7 +949,7 @@ fill_key_event (GdkWindow *window,
event->key.state |= mask;
}
event->key.state |= current_button_state;
event->key.state |= _gdk_quartz_events_get_current_mouse_modifiers ();
event->key.string = NULL;
@@ -1058,10 +1046,99 @@ synthesize_crossing_event (GdkWindow *window,
return FALSE;
}
GdkEventMask
_gdk_quartz_events_get_current_event_mask (void)
GdkModifierType
_gdk_quartz_events_get_current_keyboard_modifiers (void)
{
return current_event_mask;
if (gdk_quartz_osx_version () >= GDK_OSX_SNOW_LEOPARD)
{
return get_keyboard_modifiers_from_ns_flags ([NSClassFromString(@"NSEvent") modifierFlags]);
}
else
{
guint carbon_modifiers = GetCurrentKeyModifiers ();
GdkModifierType modifiers = 0;
if (carbon_modifiers & alphaLock)
modifiers |= GDK_LOCK_MASK;
if (carbon_modifiers & shiftKey)
modifiers |= GDK_SHIFT_MASK;
if (carbon_modifiers & controlKey)
modifiers |= GDK_CONTROL_MASK;
if (carbon_modifiers & optionKey)
modifiers |= GDK_MOD1_MASK;
if (carbon_modifiers & cmdKey)
modifiers |= GDK_MOD2_MASK;
return modifiers;
}
}
GdkModifierType
_gdk_quartz_events_get_current_mouse_modifiers (void)
{
if (gdk_quartz_osx_version () >= GDK_OSX_SNOW_LEOPARD)
{
return get_mouse_button_modifiers_from_ns_buttons ([NSClassFromString(@"NSEvent") pressedMouseButtons]);
}
else
{
return get_mouse_button_modifiers_from_ns_buttons (GetCurrentButtonState ());
}
}
/* Detect window resizing */
static gboolean
test_resize (NSEvent *event, GdkWindow *toplevel, gint x, gint y)
{
GdkWindowImplQuartz *toplevel_impl;
gboolean lion;
/* Resizing only begins if an NSLeftMouseButton event is received in
* the resizing area. Handle anything else.
*/
if ([event type] != NSLeftMouseDown)
return FALSE;
toplevel_impl = (GdkWindowImplQuartz *)toplevel->impl;
if ([toplevel_impl->toplevel showsResizeIndicator])
{
NSRect frame;
/* If the resize indicator is visible and the event
* is in the lower right 15x15 corner, we leave these
* events to Cocoa as to be handled as resize events.
* Applications may have widgets in this area. These
* will most likely be larger than 15x15 and for
* scroll bars there are also other means to move
* the scroll bar. Since the resize indicator is
* the only way of resizing windows on Mac OS, it
* is too important to not make functional.
*/
frame = [toplevel_impl->view bounds];
if (x > frame.size.width - GRIP_WIDTH
&& x < frame.size.width
&& y > frame.size.height - GRIP_HEIGHT
&& y < frame.size.height)
{
return TRUE;
}
}
/* If we're on Lion and within 5 pixels of an edge,
* then assume that the user wants to resize, and
* return NULL to let Quartz get on with it. We check
* the selector isRestorable to see if we're on 10.7.
* This extra check is in case the user starts
* dragging before GDK recognizes the grab.
*/
lion = gdk_quartz_osx_version() >= GDK_OSX_LION;
if (lion && (x < GDK_LION_RESIZE ||
x > toplevel->width - GDK_LION_RESIZE ||
y > toplevel->height - GDK_LION_RESIZE))
{
return TRUE;
}
return FALSE;
}
static gboolean
@@ -1093,25 +1170,6 @@ gdk_event_translate (GdkEvent *event,
return FALSE;
}
/* Keep track of button state, since we don't get that information
* for key events.
*/
switch (event_type)
{
case NSLeftMouseDown:
case NSRightMouseDown:
case NSOtherMouseDown:
current_button_state |= get_mouse_button_modifiers_from_ns_event (nsevent);
break;
case NSLeftMouseUp:
case NSRightMouseUp:
case NSOtherMouseUp:
current_button_state &= ~get_mouse_button_modifiers_from_ns_event (nsevent);
break;
default:
break;
}
if (_gdk_default_filters)
{
/* Apply global filters */
@@ -1147,6 +1205,9 @@ gdk_event_translate (GdkEvent *event,
window = find_window_for_ns_event (nsevent, &x, &y, &x_root, &y_root);
if (!window)
return FALSE;
/* Quartz handles resizing on its own, so we want to stay out of the way. */
if (test_resize(nsevent, window, x, y))
return FALSE;
/* Apply any window filters. */
if (GDK_IS_WINDOW (window))
@@ -1196,8 +1257,6 @@ gdk_event_translate (GdkEvent *event,
}
}
current_event_mask = get_event_mask_from_ns_event (nsevent);
return_val = TRUE;
switch (event_type)

View File

@@ -21,7 +21,24 @@
#include "config.h"
#include "gdktypes.h"
#include "gdkprivate.h"
#include "gdkquartz.h"
GdkDisplay *_gdk_display = NULL;
GdkScreen *_gdk_screen = NULL;
GdkWindow *_gdk_root = NULL;
GdkOSXVersion
gdk_quartz_osx_version (void)
{
gint minor;
OSErr err = Gestalt(gestaltSystemVersionMinor, &minor);
g_return_val_if_fail(err == noErr, GDK_OSX_UNSUPPORTED);
if (minor < GDK_OSX_MIN)
return GDK_OSX_UNSUPPORTED;
else if (minor > GDK_OSX_CURRENT)
return GDK_OSX_NEW;
else
return minor;
}

View File

@@ -205,7 +205,60 @@ const static struct {
{ 0x001d, GDK_KEY_Right },
{ 0x001e, GDK_KEY_Up },
{ 0x001f, GDK_KEY_Down },
{ 0x007f, GDK_KEY_Delete }
{ 0x007f, GDK_KEY_Delete },
{ 0xf027, GDK_KEY_dead_acute },
{ 0xf060, GDK_KEY_dead_grave },
{ 0xf300, GDK_KEY_dead_grave },
{ 0xf0b4, GDK_KEY_dead_acute },
{ 0xf301, GDK_KEY_dead_acute },
{ 0xf385, GDK_KEY_dead_acute },
{ 0xf05e, GDK_KEY_dead_circumflex },
{ 0xf2c6, GDK_KEY_dead_circumflex },
{ 0xf302, GDK_KEY_dead_circumflex },
{ 0xf07e, GDK_KEY_dead_tilde },
{ 0xf303, GDK_KEY_dead_tilde },
{ 0xf342, GDK_KEY_dead_perispomeni },
{ 0xf0af, GDK_KEY_dead_macron },
{ 0xf304, GDK_KEY_dead_macron },
{ 0xf2d8, GDK_KEY_dead_breve },
{ 0xf306, GDK_KEY_dead_breve },
{ 0xf2d9, GDK_KEY_dead_abovedot },
{ 0xf307, GDK_KEY_dead_abovedot },
{ 0xf0a8, GDK_KEY_dead_diaeresis },
{ 0xf308, GDK_KEY_dead_diaeresis },
{ 0xf2da, GDK_KEY_dead_abovering },
{ 0xf30A, GDK_KEY_dead_abovering },
{ 0xf022, GDK_KEY_dead_doubleacute },
{ 0xf2dd, GDK_KEY_dead_doubleacute },
{ 0xf30B, GDK_KEY_dead_doubleacute },
{ 0xf2c7, GDK_KEY_dead_caron },
{ 0xf30C, GDK_KEY_dead_caron },
{ 0xf0be, GDK_KEY_dead_cedilla },
{ 0xf327, GDK_KEY_dead_cedilla },
{ 0xf2db, GDK_KEY_dead_ogonek },
{ 0xf328, GDK_KEY_dead_ogonek },
{ 0xfe5d, GDK_KEY_dead_iota },
{ 0xf323, GDK_KEY_dead_belowdot },
{ 0xf309, GDK_KEY_dead_hook },
{ 0xf31B, GDK_KEY_dead_horn },
{ 0xf02d, GDK_KEY_dead_stroke },
{ 0xf335, GDK_KEY_dead_stroke },
{ 0xf336, GDK_KEY_dead_stroke },
{ 0xf313, GDK_KEY_dead_abovecomma },
/* { 0xf313, GDK_KEY_dead_psili }, */
{ 0xf314, GDK_KEY_dead_abovereversedcomma },
/* { 0xf314, GDK_KEY_dead_dasia }, */
{ 0xf30F, GDK_KEY_dead_doublegrave },
{ 0xf325, GDK_KEY_dead_belowring },
{ 0xf2cd, GDK_KEY_dead_belowmacron },
{ 0xf331, GDK_KEY_dead_belowmacron },
{ 0xf32D, GDK_KEY_dead_belowcircumflex },
{ 0xf330, GDK_KEY_dead_belowtilde },
{ 0xf32E, GDK_KEY_dead_belowbreve },
{ 0xf324, GDK_KEY_dead_belowdiaeresis },
{ 0xf311, GDK_KEY_dead_invertedbreve },
{ 0xf02c, GDK_KEY_dead_belowcomma },
{ 0xf326, GDK_KEY_dead_belowcomma }
};
static void
@@ -306,18 +359,10 @@ maybe_update_keymap (void)
p[j] = GDK_KEY_ISO_Left_Tab;
if (!found)
{
guint tmp;
tmp = gdk_unicode_to_keyval (uc);
if (tmp != (uc | 0x01000000))
p[j] = tmp;
else
p[j] = 0;
}
p[j] = gdk_unicode_to_keyval (uc);
}
}
if (p[3] == p[2])
p[3] = 0;
if (p[2] == p[1])
@@ -353,10 +398,10 @@ maybe_update_keymap (void)
UniChar uc;
key_code = modifiers[j] | i;
err = UCKeyTranslate (chr_data, i, kUCKeyActionDown,
err = UCKeyTranslate (chr_data, i, kUCKeyActionDisplay,
(modifiers[j] >> 8) & 0xFF,
LMGetKbdType(),
kUCKeyTranslateNoDeadKeysMask,
0,
&state, 4, &nChars, chars);
@@ -368,8 +413,22 @@ maybe_update_keymap (void)
{
int k;
gboolean found = FALSE;
uc = chars[0];
/* A few <Shift><Option>keys return two
* characters, the first of which is U+00a0,
* which isn't interesting; so we return the
* second. More sophisticated handling is the
* job of a GtkIMContext.
*
* If state isn't zero, it means that it's a
* dead key of some sort. Some of those are
* enumerated in the special_ucs_table with the
* high nibble set to f to push it into the
* private use range. Here we do the same.
*/
if (state != 0)
chars[nChars - 1] |= 0xf000;
uc = chars[nChars - 1];
for (k = 0; k < G_N_ELEMENTS (special_ucs_table); k++)
{
@@ -386,20 +445,12 @@ maybe_update_keymap (void)
*/
if (found && p[j] == GDK_KEY_Tab && modifiers[j] == shiftKey)
p[j] = GDK_KEY_ISO_Left_Tab;
if (!found)
{
guint tmp;
tmp = gdk_unicode_to_keyval (uc);
if (tmp != (uc | 0x01000000))
p[j] = tmp;
else
p[j] = 0;
}
p[j] = gdk_unicode_to_keyval (uc);
}
}
if (p[3] == p[2])
p[3] = 0;
if (p[2] == p[1])
@@ -494,8 +545,8 @@ gdk_quartz_keymap_get_entries_for_keyval (GdkKeymap *keymap,
(*n_keys)++;
key.keycode = i / KEYVALS_PER_KEYCODE;
key.group = 0;
key.level = i % KEYVALS_PER_KEYCODE;
key.group = (i % KEYVALS_PER_KEYCODE) >= 2;
key.level = i % 2;
g_array_append_val (keys_array, key);
}
@@ -550,7 +601,7 @@ gdk_quartz_keymap_get_entries_for_keycode (GdkKeymap *keymap,
GdkKeymapKey key;
key.keycode = hardware_keycode;
key.group = i / 2;
key.group = i >= 2;
key.level = i % 2;
g_array_append_val (keys_array, key);
@@ -606,6 +657,11 @@ translate_keysym (guint hardware_keycode,
tmp_keyval = upper;
}
if (effective_group)
*effective_group = group;
if (effective_level)
*effective_level = level;
return tmp_keyval;
}
@@ -636,12 +692,18 @@ gdk_quartz_keymap_translate_keyboard_state (GdkKeymap *keymap,
if (hardware_keycode < 0 || hardware_keycode >= NUM_KEYCODES)
return FALSE;
/* Check if shift or capslock modify the keyval */
for (bit = GDK_SHIFT_MASK; bit < GDK_CONTROL_MASK; bit <<= 1)
/* Check if modifiers modify the keyval */
for (bit = GDK_SHIFT_MASK; bit < GDK_BUTTON1_MASK; bit <<= 1)
{
if (translate_keysym (hardware_keycode, group, state & ~bit, NULL, NULL) !=
translate_keysym (hardware_keycode, group, state | bit, NULL, NULL))
if (translate_keysym (hardware_keycode,
(bit == GDK_MOD1_MASK) ? 0 : group,
state & ~bit,
NULL, NULL) !=
translate_keysym (hardware_keycode,
(bit == GDK_MOD1_MASK) ? 1 : group,
state | bit,
NULL, NULL))
tmp_modifiers |= bit;
}
@@ -660,14 +722,17 @@ static void
gdk_quartz_keymap_add_virtual_modifiers (GdkKeymap *keymap,
GdkModifierType *state)
{
/* FIXME: For now, we've mimiced the Windows backend. */
if (*state & GDK_MOD2_MASK)
*state |= GDK_META_MASK;
}
static gboolean
gdk_quartz_keymap_map_virtual_modifiers (GdkKeymap *keymap,
GdkModifierType *state)
{
/* FIXME: For now, we've mimiced the Windows backend. */
if (*state & GDK_META_MASK)
*state |= GDK_MOD2_MASK;
return TRUE;
}

View File

@@ -62,7 +62,9 @@ typedef enum {
void _gdk_quartz_events_update_focus_window (GdkWindow *new_window,
gboolean got_focus);
void _gdk_quartz_events_send_map_event (GdkWindow *window);
GdkEventMask _gdk_quartz_events_get_current_event_mask (void);
GdkModifierType _gdk_quartz_events_get_current_keyboard_modifiers (void);
GdkModifierType _gdk_quartz_events_get_current_mouse_modifiers (void);
void _gdk_quartz_events_send_enter_notify_event (GdkWindow *window);

View File

@@ -1,3 +1,4 @@
/* gdkquartz.h
*
* Copyright (C) 2005-2007 Imendio AB
@@ -41,6 +42,20 @@ typedef unsigned int NSUInteger;
typedef float CGFloat;
#endif
typedef enum
{
GDK_OSX_UNSUPPORTED = 0,
GDK_OSX_MIN = 4,
GDK_OSX_TIGER = 4,
GDK_OSX_LEOPARD = 5,
GDK_OSX_SNOW_LEOPARD = 6,
GDK_OSX_LION = 7,
GDK_OSX_CURRENT = 7,
GDK_OSX_NEW = 99
} GdkOSXVersion;
GdkOSXVersion gdk_quartz_osx_version (void);
G_END_DECLS
#define __GDKQUARTZ_H_INSIDE__

View File

@@ -1836,7 +1836,8 @@ gdk_window_quartz_get_device_state_helper (GdkWindow *window,
toplevel = gdk_window_get_toplevel (window);
*mask = _gdk_quartz_events_get_current_event_mask ();
*mask = _gdk_quartz_events_get_current_keyboard_modifiers () |
_gdk_quartz_events_get_current_mouse_modifiers ();
/* Get the y coordinate, needs to be flipped. */
if (window == _gdk_root)
@@ -2529,9 +2530,17 @@ gdk_quartz_window_get_frame_extents (GdkWindow *window,
rect->height = ns_rect.size.height;
}
/* Fake protocol to make gcc think that it's OK to call setStyleMask
even if it isn't. We check to make sure before actually calling
it. */
@protocol CanSetStyleMask
- (void)setStyleMask:(int)mask;
@end
static void
gdk_quartz_window_set_decorations (GdkWindow *window,
GdkWMDecoration decorations)
GdkWMDecoration decorations)
{
GdkWindowImplQuartz *impl;
NSUInteger old_mask, new_mask;
@@ -2559,10 +2568,6 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
old_mask = [impl->toplevel styleMask];
/* Note, there doesn't seem to be a way to change this without
* recreating the toplevel. There might be bad side-effects of doing
* that, but it seems alright.
*/
if (old_mask != new_mask)
{
NSRect rect;
@@ -2586,15 +2591,26 @@ gdk_quartz_window_set_decorations (GdkWindow *window,
rect = [NSWindow contentRectForFrameRect:rect styleMask:old_mask];
}
impl->toplevel = [impl->toplevel initWithContentRect:rect
styleMask:new_mask
backing:NSBackingStoreBuffered
defer:NO];
/* Note, before OS 10.6 there doesn't seem to be a way to change this without
* recreating the toplevel. There might be bad side-effects of doing
* that, but it seems alright.
*/
if ([impl->toplevel respondsToSelector:@selector(setStyleMask:)])
{
[(id<CanSetStyleMask>)impl->toplevel setStyleMask:new_mask];
}
else
{
[impl->toplevel release];
impl->toplevel = [[GdkQuartzNSWindow alloc] initWithContentRect:rect
styleMask:new_mask
backing:NSBackingStoreBuffered
defer:NO];
[impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)];
[impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)];
[impl->toplevel setContentView:old_view];
}
[impl->toplevel setHasShadow: window_type_hint_to_shadow (impl->type_hint)];
[impl->toplevel setLevel: window_type_hint_to_level (impl->type_hint)];
[impl->toplevel setContentView:old_view];
[impl->toplevel setFrame:rect display:YES];
/* Invalidate the window shadow for non-opaque views that have shadow

View File

@@ -138,132 +138,6 @@ gdk_wayland_display_manager_get_keyval_name (GdkDisplayManager *manager,
return buf;
}
static void
gdk_wayland_display_manager_keyval_convert_case (GdkDisplayManager *manager,
guint symbol,
guint *lower,
guint *upper)
{
guint xlower = symbol;
guint xupper = symbol;
/* Check for directly encoded 24-bit UCS characters: */
if ((symbol & 0xff000000) == 0x01000000)
{
if (lower)
*lower = gdk_unicode_to_keyval (g_unichar_tolower (symbol & 0x00ffffff));
if (upper)
*upper = gdk_unicode_to_keyval (g_unichar_toupper (symbol & 0x00ffffff));
return;
}
switch (symbol >> 8)
{
case 0: /* Latin 1 */
if ((symbol >= GDK_KEY_A) && (symbol <= GDK_KEY_Z))
xlower += (GDK_KEY_a - GDK_KEY_A);
else if ((symbol >= GDK_KEY_a) && (symbol <= GDK_KEY_z))
xupper -= (GDK_KEY_a - GDK_KEY_A);
else if ((symbol >= GDK_KEY_Agrave) && (symbol <= GDK_KEY_Odiaeresis))
xlower += (GDK_KEY_agrave - GDK_KEY_Agrave);
else if ((symbol >= GDK_KEY_agrave) && (symbol <= GDK_KEY_odiaeresis))
xupper -= (GDK_KEY_agrave - GDK_KEY_Agrave);
else if ((symbol >= GDK_KEY_Ooblique) && (symbol <= GDK_KEY_Thorn))
xlower += (GDK_KEY_oslash - GDK_KEY_Ooblique);
else if ((symbol >= GDK_KEY_oslash) && (symbol <= GDK_KEY_thorn))
xupper -= (GDK_KEY_oslash - GDK_KEY_Ooblique);
break;
case 1: /* Latin 2 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol == GDK_KEY_Aogonek)
xlower = GDK_KEY_aogonek;
else if (symbol >= GDK_KEY_Lstroke && symbol <= GDK_KEY_Sacute)
xlower += (GDK_KEY_lstroke - GDK_KEY_Lstroke);
else if (symbol >= GDK_KEY_Scaron && symbol <= GDK_KEY_Zacute)
xlower += (GDK_KEY_scaron - GDK_KEY_Scaron);
else if (symbol >= GDK_KEY_Zcaron && symbol <= GDK_KEY_Zabovedot)
xlower += (GDK_KEY_zcaron - GDK_KEY_Zcaron);
else if (symbol == GDK_KEY_aogonek)
xupper = GDK_KEY_Aogonek;
else if (symbol >= GDK_KEY_lstroke && symbol <= GDK_KEY_sacute)
xupper -= (GDK_KEY_lstroke - GDK_KEY_Lstroke);
else if (symbol >= GDK_KEY_scaron && symbol <= GDK_KEY_zacute)
xupper -= (GDK_KEY_scaron - GDK_KEY_Scaron);
else if (symbol >= GDK_KEY_zcaron && symbol <= GDK_KEY_zabovedot)
xupper -= (GDK_KEY_zcaron - GDK_KEY_Zcaron);
else if (symbol >= GDK_KEY_Racute && symbol <= GDK_KEY_Tcedilla)
xlower += (GDK_KEY_racute - GDK_KEY_Racute);
else if (symbol >= GDK_KEY_racute && symbol <= GDK_KEY_tcedilla)
xupper -= (GDK_KEY_racute - GDK_KEY_Racute);
break;
case 2: /* Latin 3 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Hstroke && symbol <= GDK_KEY_Hcircumflex)
xlower += (GDK_KEY_hstroke - GDK_KEY_Hstroke);
else if (symbol >= GDK_KEY_Gbreve && symbol <= GDK_KEY_Jcircumflex)
xlower += (GDK_KEY_gbreve - GDK_KEY_Gbreve);
else if (symbol >= GDK_KEY_hstroke && symbol <= GDK_KEY_hcircumflex)
xupper -= (GDK_KEY_hstroke - GDK_KEY_Hstroke);
else if (symbol >= GDK_KEY_gbreve && symbol <= GDK_KEY_jcircumflex)
xupper -= (GDK_KEY_gbreve - GDK_KEY_Gbreve);
else if (symbol >= GDK_KEY_Cabovedot && symbol <= GDK_KEY_Scircumflex)
xlower += (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
else if (symbol >= GDK_KEY_cabovedot && symbol <= GDK_KEY_scircumflex)
xupper -= (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
break;
case 3: /* Latin 4 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Rcedilla && symbol <= GDK_KEY_Tslash)
xlower += (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
else if (symbol >= GDK_KEY_rcedilla && symbol <= GDK_KEY_tslash)
xupper -= (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
else if (symbol == GDK_KEY_ENG)
xlower = GDK_KEY_eng;
else if (symbol == GDK_KEY_eng)
xupper = GDK_KEY_ENG;
else if (symbol >= GDK_KEY_Amacron && symbol <= GDK_KEY_Umacron)
xlower += (GDK_KEY_amacron - GDK_KEY_Amacron);
else if (symbol >= GDK_KEY_amacron && symbol <= GDK_KEY_umacron)
xupper -= (GDK_KEY_amacron - GDK_KEY_Amacron);
break;
case 6: /* Cyrillic */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Serbian_DJE && symbol <= GDK_KEY_Serbian_DZE)
xlower -= (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
else if (symbol >= GDK_KEY_Serbian_dje && symbol <= GDK_KEY_Serbian_dze)
xupper += (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
else if (symbol >= GDK_KEY_Cyrillic_YU && symbol <= GDK_KEY_Cyrillic_HARDSIGN)
xlower -= (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
else if (symbol >= GDK_KEY_Cyrillic_yu && symbol <= GDK_KEY_Cyrillic_hardsign)
xupper += (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
break;
case 7: /* Greek */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Greek_ALPHAaccent && symbol <= GDK_KEY_Greek_OMEGAaccent)
xlower += (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
else if (symbol >= GDK_KEY_Greek_alphaaccent && symbol <= GDK_KEY_Greek_omegaaccent &&
symbol != GDK_KEY_Greek_iotaaccentdieresis &&
symbol != GDK_KEY_Greek_upsilonaccentdieresis)
xupper -= (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
else if (symbol >= GDK_KEY_Greek_ALPHA && symbol <= GDK_KEY_Greek_OMEGA)
xlower += (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
else if (symbol >= GDK_KEY_Greek_alpha && symbol <= GDK_KEY_Greek_omega &&
symbol != GDK_KEY_Greek_finalsmallsigma)
xupper -= (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
break;
}
if (lower)
*lower = xlower;
if (upper)
*upper = xupper;
}
static void
gdk_wayland_display_manager_class_init (GdkWaylandDisplayManagerClass *class)
{
@@ -280,7 +154,6 @@ gdk_wayland_display_manager_class_init (GdkWaylandDisplayManagerClass *class)
manager_class->get_atom_name = gdk_wayland_display_manager_get_atom_name;
manager_class->lookup_keyval = gdk_wayland_display_manager_lookup_keyval;
manager_class->get_keyval_name = gdk_wayland_display_manager_get_keyval_name;
manager_class->keyval_convert_case = gdk_wayland_display_manager_keyval_convert_case;
}
static void

View File

@@ -400,9 +400,11 @@ gdk_wayland_create_cairo_surface (GdkDisplayWayland *display,
display->create_image(display->egl_display, NULL, EGL_NATIVE_PIXMAP_KHR,
(EGLClientBuffer) data->pixmap, NULL);
cairo_device_acquire(display->cairo_device);
glGenTextures(1, &data->texture);
glBindTexture(GL_TEXTURE_2D, data->texture);
display->image_target_texture_2d(GL_TEXTURE_2D, data->image);
cairo_device_release(display->cairo_device);
surface = cairo_gl_surface_create_for_texture(display->cairo_device,
CAIRO_CONTENT_COLOR_ALPHA,

View File

@@ -2,6 +2,7 @@
include $(top_srcdir)/Makefile.decl
libgdkincludedir = $(includedir)/gtk-3.0/gdk
libgdkwin32includedir = $(includedir)/gtk-3.0/gdk/win32
AM_CPPFLAGS = \
-DG_LOG_DOMAIN=\"Gdk\" \
@@ -65,4 +66,13 @@ libgdk_win32_la_SOURCES = \
libgdkinclude_HEADERS = \
gdkwin32.h
libgdkwin32include_HEADERS = \
gdkwin32cursor.h \
gdkwin32display.h \
gdkwin32displaymanager.h\
gdkwin32dnd.h \
gdkwin32keys.h \
gdkwin32screen.h \
gdkwin32window.h
-include $(top_srcdir)/git.mk

View File

@@ -82,19 +82,6 @@ gdk_win32_display_manager_lookup_keyval (GdkDisplayManager *manager,
return _gdk_keyval_from_name (name);
}
static void
gdk_win32_display_manager_keyval_convert_case (GdkDisplayManager *manager,
guint symbol,
guint *lower,
guint *upper)
{
/* FIXME implement this */
if (lower)
*lower = symbol;
if (upper)
*upper = symbol;
}
static void
gdk_win32_display_manager_init (GdkWin32DisplayManager *manager)
{
@@ -131,5 +118,4 @@ gdk_win32_display_manager_class_init (GdkWin32DisplayManagerClass *class)
manager_class->get_atom_name = _gdk_win32_display_manager_get_atom_name;
manager_class->lookup_keyval = gdk_win32_display_manager_lookup_keyval;
manager_class->get_keyval_name = gdk_win32_display_manager_get_keyval_name;
manager_class->keyval_convert_case = gdk_win32_display_manager_keyval_convert_case;
}

View File

@@ -328,13 +328,15 @@ gdk_x11_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
if (icon == NULL)
{
icon = g_app_info_get_icon (info);
g_object_ref (icon);
if (icon != NULL)
g_object_ref (icon);
}
if (icon)
icon_name = gicon_to_string (icon);
g_object_unref (icon);
if (icon != NULL)
{
icon_name = gicon_to_string (icon);
g_object_unref (icon);
}
}
binary_name = g_app_info_get_executable (info);

View File

@@ -285,12 +285,12 @@ _gdk_x11_display_get_cursor_for_type (GdkDisplay *display,
}
/**
* gdk_x11_cursor_get_xdisplay: (skip)
* @cursor: a #GdkCursor.
* gdk_x11_cursor_get_xdisplay:
* @cursor: (type GdkX11Cursor): a #GdkCursor.
*
* Returns the display of a #GdkCursor.
*
* Return value: an Xlib <type>Display*</type>.
* Return value: (transfer none): an Xlib <type>Display*</type>.
**/
Display *
gdk_x11_cursor_get_xdisplay (GdkCursor *cursor)
@@ -301,8 +301,8 @@ gdk_x11_cursor_get_xdisplay (GdkCursor *cursor)
}
/**
* gdk_x11_cursor_get_xcursor: (skip)
* @cursor: a #GdkCursor.
* gdk_x11_cursor_get_xcursor:
* @cursor: (type GdkX11Cursor): a #GdkCursor.
*
* Returns the X cursor belonging to a #GdkCursor.
*
@@ -435,7 +435,7 @@ update_cursor (gpointer data,
/**
* gdk_x11_display_set_cursor_theme:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
* @theme: the name of the cursor theme to use, or %NULL to unset
* a previously set value
* @size: the cursor size to use, or 0 to keep the previous size

View File

@@ -192,10 +192,12 @@ gdk_x11_device_xi2_get_state (GdkDevice *device,
display = gdk_device_get_display (device);
gdk_x11_display_error_trap_push (display);
info = XIQueryDevice (GDK_DISPLAY_XDISPLAY (display),
device_xi2->device_id, &ndevices);
gdk_x11_display_error_trap_pop_ignored (display);
for (i = 0, j = 0; i < info->num_classes; i++)
for (i = 0, j = 0; info && i < info->num_classes; i++)
{
XIAnyClassInfo *class_info = info->classes[i];
GdkAxisUse use;
@@ -234,7 +236,8 @@ gdk_x11_device_xi2_get_state (GdkDevice *device,
j++;
}
XIFreeDeviceInfo (info);
if (info)
XIFreeDeviceInfo (info);
}
if (mask)

View File

@@ -417,6 +417,10 @@ gdk_x11_device_manager_xi2_constructed (GObject *object)
for (i = 0; i < ndevices; i++)
{
dev = &info[i];
if (!dev->enabled)
continue;
add_device (device_manager, dev, FALSE);
if (dev->use == XIMasterPointer ||
@@ -582,9 +586,14 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
{
if (ev->info[i].flags & XIDeviceEnabled)
{
gdk_x11_display_error_trap_push (display);
info = XIQueryDevice (xdisplay, ev->info[i].deviceid, &ndevices);
add_device (device_manager, &info[0], TRUE);
XIFreeDeviceInfo (info);
gdk_x11_display_error_trap_pop_ignored (display);
if (info)
{
add_device (device_manager, &info[0], TRUE);
XIFreeDeviceInfo (info);
}
}
else if (ev->info[i].flags & XIDeviceDisabled)
remove_device (device_manager, ev->info[i].deviceid);
@@ -596,6 +605,9 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
slave = g_hash_table_lookup (device_manager->id_table,
GINT_TO_POINTER (ev->info[i].deviceid));
if (!slave)
continue;
/* Remove old master info */
master = gdk_device_get_associated_device (slave);
@@ -610,15 +622,23 @@ handle_hierarchy_changed (GdkX11DeviceManagerXI2 *device_manager,
/* Add new master if it's an attachment event */
if (ev->info[i].flags & XISlaveAttached)
{
gdk_x11_display_error_trap_push (display);
info = XIQueryDevice (xdisplay, ev->info[i].deviceid, &ndevices);
gdk_x11_display_error_trap_pop_ignored (display);
if (info)
{
master = g_hash_table_lookup (device_manager->id_table,
GINT_TO_POINTER (info->attachment));
XIFreeDeviceInfo (info);
}
master = g_hash_table_lookup (device_manager->id_table,
GINT_TO_POINTER (info->attachment));
if (master)
{
_gdk_device_set_associated_device (slave, master);
_gdk_device_add_slave (master, slave);
_gdk_device_set_associated_device (slave, master);
_gdk_device_add_slave (master, slave);
g_signal_emit_by_name (device_manager, "device-changed", master);
g_signal_emit_by_name (device_manager, "device-changed", master);
}
}
g_signal_emit_by_name (device_manager, "device-changed", slave);
@@ -637,10 +657,13 @@ handle_device_changed (GdkX11DeviceManagerXI2 *device_manager,
device = g_hash_table_lookup (device_manager->id_table,
GUINT_TO_POINTER (ev->deviceid));
_gdk_device_reset_axes (device);
translate_device_classes (display, device, ev->classes, ev->num_classes);
if (device)
{
_gdk_device_reset_axes (device);
translate_device_classes (display, device, ev->classes, ev->num_classes);
g_signal_emit_by_name (G_OBJECT (device), "changed");
g_signal_emit_by_name (G_OBJECT (device), "changed");
}
}
static GdkCrossingMode

View File

@@ -385,7 +385,6 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
GdkToplevelX11 *toplevel = NULL;
GdkX11Display *display_x11 = GDK_X11_DISPLAY (display);
gboolean return_val;
Window xwindow = None;
/* Find the GdkWindow that this event relates to.
* Basically this means substructure events
@@ -405,7 +404,6 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
x11_screen = GDK_X11_SCREEN (screen);
toplevel = _gdk_x11_window_get_toplevel (window);
window_impl = GDK_WINDOW_IMPL_X11 (window->impl);
xwindow = GDK_WINDOW_XID (window);
g_object_ref (window);
}
@@ -432,7 +430,7 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
screen = gdk_display_get_screen (display, i);
x11_screen = GDK_X11_SCREEN (screen);
if (x11_screen->wmspec_check_window == xwindow)
if (x11_screen->wmspec_check_window == xevent->xdestroywindow.window)
{
x11_screen->wmspec_check_window = None;
x11_screen->last_wmspec_check_time = 0;
@@ -1635,7 +1633,7 @@ gdk_x11_display_get_default_group (GdkDisplay *display)
/**
* gdk_x11_display_grab:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
*
* Call XGrabServer() on @display.
* To ungrab the display again, use gdk_x11_display_ungrab().
@@ -1660,7 +1658,7 @@ gdk_x11_display_grab (GdkDisplay *display)
/**
* gdk_x11_display_ungrab:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
*
* Ungrab @display after it has been grabbed with
* gdk_x11_display_grab().
@@ -1843,9 +1841,9 @@ _gdk_x11_display_screen_for_xrootwin (GdkDisplay *display,
}
/**
* gdk_x11_display_get_xdisplay: (skip)
* @display: a #GdkDisplay
* @returns: an X display.
* gdk_x11_display_get_xdisplay:
* @display: (type GdkX11Display): a #GdkDisplay
* @returns: (transfer none): an X display.
*
* Returns the X display of a #GdkDisplay.
*
@@ -1975,7 +1973,7 @@ broadcast_xmessage (GdkDisplay *display,
/**
* gdk_x11_display_broadcast_startup_message:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
* @message_type: startup notification message type ("new", "change",
* or "remove")
* @...: a list of key/value pairs (as strings), terminated by a
@@ -2148,7 +2146,7 @@ gdk_x11_display_store_clipboard (GdkDisplay *display,
/**
* gdk_x11_display_get_user_time:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
*
* Returns the timestamp of the last user interaction on
* @display. The timestamp is taken from events caused
@@ -2180,7 +2178,7 @@ gdk_x11_display_supports_input_shapes (GdkDisplay *display)
/**
* gdk_x11_display_get_startup_notification_id:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
*
* Gets the startup notification ID for a display.
*
@@ -2196,7 +2194,7 @@ gdk_x11_display_get_startup_notification_id (GdkDisplay *display)
/**
* gdk_x11_display_set_startup_notification_id:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
* @startup_id: the startup notification ID (must be valid utf8)
*
* Sets the startup notification ID for a display.
@@ -2412,7 +2410,7 @@ delete_outdated_error_traps (GdkX11Display *display_x11)
/**
* gdk_x11_display_error_trap_push:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
*
* Begins a range of X requests on @display for which X error events
* will be ignored. Unignored errors (when no trap is pushed) will abort
@@ -2517,7 +2515,7 @@ gdk_x11_display_error_trap_pop_internal (GdkDisplay *display,
/**
* gdk_x11_display_error_trap_pop:
* @display: the display
* @display: (type GdkX11Display): the display
*
* Pops the error trap pushed by gdk_x11_display_error_trap_push().
* Will XSync() if necessary and will always block until
@@ -2544,7 +2542,7 @@ gdk_x11_display_error_trap_pop (GdkDisplay *display)
/**
* gdk_x11_display_error_trap_pop_ignored:
* @display: the display
* @display: (type GdkX11Display): the display
*
* Pops the error trap pushed by gdk_x11_display_error_trap_push().
* Does not block to see if an error occurred; merely records the

View File

@@ -110,7 +110,9 @@ gdk_x11_display_manager_class_init (GdkX11DisplayManagerClass *class)
manager_class->get_atom_name = _gdk_x11_display_manager_get_atom_name;
manager_class->lookup_keyval = _gdk_x11_display_manager_lookup_keyval;
manager_class->get_keyval_name = _gdk_x11_display_manager_get_keyval_name;
#ifdef HAVE_XCONVERTCASE
manager_class->keyval_convert_case = _gdk_x11_display_manager_keyval_convert_case;
#endif
}
void

View File

@@ -1457,133 +1457,7 @@ _gdk_x11_display_manager_keyval_convert_case (GdkDisplayManager *manager,
if (upper)
*upper = xupper;
}
#else /* !HAVE_XCONVERTCASE */
void
_gdk_x11_display_manager_keyval_convert_case (GdkDisplayManager *manager,
guint symbol,
guint *lower,
guint *upper)
{
guint xlower = symbol;
guint xupper = symbol;
/* Check for directly encoded 24-bit UCS characters: */
if ((symbol & 0xff000000) == 0x01000000)
{
if (lower)
*lower = gdk_unicode_to_keyval (g_unichar_tolower (symbol & 0x00ffffff));
if (upper)
*upper = gdk_unicode_to_keyval (g_unichar_toupper (symbol & 0x00ffffff));
return;
}
switch (symbol >> 8)
{
case 0: /* Latin 1 */
if ((symbol >= GDK_KEY_A) && (symbol <= GDK_KEY_Z))
xlower += (GDK_KEY_a - GDK_KEY_A);
else if ((symbol >= GDK_KEY_a) && (symbol <= GDK_KEY_z))
xupper -= (GDK_KEY_a - GDK_KEY_A);
else if ((symbol >= GDK_KEY_Agrave) && (symbol <= GDK_KEY_Odiaeresis))
xlower += (GDK_KEY_agrave - GDK_KEY_Agrave);
else if ((symbol >= GDK_KEY_agrave) && (symbol <= GDK_KEY_odiaeresis))
xupper -= (GDK_KEY_agrave - GDK_KEY_Agrave);
else if ((symbol >= GDK_KEY_Ooblique) && (symbol <= GDK_KEY_Thorn))
xlower += (GDK_KEY_oslash - GDK_KEY_Ooblique);
else if ((symbol >= GDK_KEY_oslash) && (symbol <= GDK_KEY_thorn))
xupper -= (GDK_KEY_oslash - GDK_KEY_Ooblique);
break;
case 1: /* Latin 2 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol == GDK_KEY_Aogonek)
xlower = GDK_KEY_aogonek;
else if (symbol >= GDK_KEY_Lstroke && symbol <= GDK_KEY_Sacute)
xlower += (GDK_KEY_lstroke - GDK_KEY_Lstroke);
else if (symbol >= GDK_KEY_Scaron && symbol <= GDK_KEY_Zacute)
xlower += (GDK_KEY_scaron - GDK_KEY_Scaron);
else if (symbol >= GDK_KEY_Zcaron && symbol <= GDK_KEY_Zabovedot)
xlower += (GDK_KEY_zcaron - GDK_KEY_Zcaron);
else if (symbol == GDK_KEY_aogonek)
xupper = GDK_KEY_Aogonek;
else if (symbol >= GDK_KEY_lstroke && symbol <= GDK_KEY_sacute)
xupper -= (GDK_KEY_lstroke - GDK_KEY_Lstroke);
else if (symbol >= GDK_KEY_scaron && symbol <= GDK_KEY_zacute)
xupper -= (GDK_KEY_scaron - GDK_KEY_Scaron);
else if (symbol >= GDK_KEY_zcaron && symbol <= GDK_KEY_zabovedot)
xupper -= (GDK_KEY_zcaron - GDK_KEY_Zcaron);
else if (symbol >= GDK_KEY_Racute && symbol <= GDK_KEY_Tcedilla)
xlower += (GDK_KEY_racute - GDK_KEY_Racute);
else if (symbol >= GDK_KEY_racute && symbol <= GDK_KEY_tcedilla)
xupper -= (GDK_KEY_racute - GDK_KEY_Racute);
break;
case 2: /* Latin 3 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Hstroke && symbol <= GDK_KEY_Hcircumflex)
xlower += (GDK_KEY_hstroke - GDK_KEY_Hstroke);
else if (symbol >= GDK_KEY_Gbreve && symbol <= GDK_KEY_Jcircumflex)
xlower += (GDK_KEY_gbreve - GDK_KEY_Gbreve);
else if (symbol >= GDK_KEY_hstroke && symbol <= GDK_KEY_hcircumflex)
xupper -= (GDK_KEY_hstroke - GDK_KEY_Hstroke);
else if (symbol >= GDK_KEY_gbreve && symbol <= GDK_KEY_jcircumflex)
xupper -= (GDK_KEY_gbreve - GDK_KEY_Gbreve);
else if (symbol >= GDK_KEY_Cabovedot && symbol <= GDK_KEY_Scircumflex)
xlower += (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
else if (symbol >= GDK_KEY_cabovedot && symbol <= GDK_KEY_scircumflex)
xupper -= (GDK_KEY_cabovedot - GDK_KEY_Cabovedot);
break;
case 3: /* Latin 4 */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Rcedilla && symbol <= GDK_KEY_Tslash)
xlower += (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
else if (symbol >= GDK_KEY_rcedilla && symbol <= GDK_KEY_tslash)
xupper -= (GDK_KEY_rcedilla - GDK_KEY_Rcedilla);
else if (symbol == GDK_KEY_ENG)
xlower = GDK_KEY_eng;
else if (symbol == GDK_KEY_eng)
xupper = GDK_KEY_ENG;
else if (symbol >= GDK_KEY_Amacron && symbol <= GDK_KEY_Umacron)
xlower += (GDK_KEY_amacron - GDK_KEY_Amacron);
else if (symbol >= GDK_KEY_amacron && symbol <= GDK_KEY_umacron)
xupper -= (GDK_KEY_amacron - GDK_KEY_Amacron);
break;
case 6: /* Cyrillic */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Serbian_DJE && symbol <= GDK_KEY_Serbian_DZE)
xlower -= (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
else if (symbol >= GDK_KEY_Serbian_dje && symbol <= GDK_KEY_Serbian_dze)
xupper += (GDK_KEY_Serbian_DJE - GDK_KEY_Serbian_dje);
else if (symbol >= GDK_KEY_Cyrillic_YU && symbol <= GDK_KEY_Cyrillic_HARDSIGN)
xlower -= (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
else if (symbol >= GDK_KEY_Cyrillic_yu && symbol <= GDK_KEY_Cyrillic_hardsign)
xupper += (GDK_KEY_Cyrillic_YU - GDK_KEY_Cyrillic_yu);
break;
case 7: /* Greek */
/* Assume the KeySym is a legal value (ignore discontinuities) */
if (symbol >= GDK_KEY_Greek_ALPHAaccent && symbol <= GDK_KEY_Greek_OMEGAaccent)
xlower += (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
else if (symbol >= GDK_KEY_Greek_alphaaccent && symbol <= GDK_KEY_Greek_omegaaccent &&
symbol != GDK_KEY_Greek_iotaaccentdieresis &&
symbol != GDK_KEY_Greek_upsilonaccentdieresis)
xupper -= (GDK_KEY_Greek_alphaaccent - GDK_KEY_Greek_ALPHAaccent);
else if (symbol >= GDK_KEY_Greek_ALPHA && symbol <= GDK_KEY_Greek_OMEGA)
xlower += (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
else if (symbol >= GDK_KEY_Greek_alpha && symbol <= GDK_KEY_Greek_omega &&
symbol != GDK_KEY_Greek_finalsmallsigma)
xupper -= (GDK_KEY_Greek_alpha - GDK_KEY_Greek_ALPHA);
break;
}
if (lower)
*lower = xlower;
if (upper)
*upper = xupper;
}
#endif
#endif /* HAVE_XCONVERTCASE */
gint
_gdk_x11_get_group_for_state (GdkDisplay *display,
@@ -1615,13 +1489,12 @@ _gdk_x11_keymap_add_virt_mods (GdkKeymap *keymap,
keymap = GET_EFFECTIVE_KEYMAP (keymap);
keymap_x11 = GDK_X11_KEYMAP (keymap);
for (i = 3; i < 8; i++)
/* See comment in add_virtual_modifiers() */
for (i = 4; i < 8; i++)
{
if ((1 << i) & *modifiers)
{
if (keymap_x11->modmap[i] & GDK_MOD1_MASK)
*modifiers |= GDK_MOD1_MASK;
else if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
*modifiers |= GDK_SUPER_MASK;
else if (keymap_x11->modmap[i] & GDK_HYPER_MASK)
*modifiers |= GDK_HYPER_MASK;
@@ -1641,12 +1514,16 @@ gdk_x11_keymap_add_virtual_modifiers (GdkKeymap *keymap,
keymap = GET_EFFECTIVE_KEYMAP (keymap);
keymap_x11 = GDK_X11_KEYMAP (keymap);
for (i = 3; i < 8; i++)
/* This loop used to start at 3, which included MOD1 in the
* virtual mapping. However, all of GTK+ treats MOD1 as a
* synonym for Alt, and does not expect it to be mapped around,
* therefore it's more sane to simply treat MOD1 like SHIFT and
* CONTROL, which are not mappable either.
*/
for (i = 4; i < 8; i++)
{
if ((1 << i) & *state)
{
if (keymap_x11->modmap[i] & GDK_MOD1_MASK)
*state |= GDK_MOD1_MASK;
if (keymap_x11->modmap[i] & GDK_SUPER_MASK)
*state |= GDK_SUPER_MASK;
if (keymap_x11->modmap[i] & GDK_HYPER_MASK)
@@ -1715,7 +1592,8 @@ gdk_x11_keymap_map_virtual_modifiers (GdkKeymap *keymap,
{
if (*state & vmods[j])
{
for (i = 3; i < 8; i++)
/* See comment in add_virtual_modifiers() */
for (i = 4; i < 8; i++)
{
if (keymap_x11->modmap[i] & vmods[j])
{

View File

@@ -442,7 +442,7 @@ gdk_x11_get_default_screen (void)
}
/**
* gdk_x11_get_default_root_xwindow: (skip)
* gdk_x11_get_default_root_xwindow:
*
* Gets the root window of the default screen
* (see gdk_x11_get_default_screen()).
@@ -456,13 +456,13 @@ gdk_x11_get_default_root_xwindow (void)
}
/**
* gdk_x11_get_default_xdisplay: (skip)
* gdk_x11_get_default_xdisplay:
*
* Gets the default GTK+ display.
*
* Return value: the Xlib <type>Display*</type> for the display
* specified in the <option>--display</option> command line option
* or the <envar>DISPLAY</envar> environment variable.
* Return value: (transfer none): the Xlib <type>Display*</type> for
* the display specified in the <option>--display</option> command
* line option or the <envar>DISPLAY</envar> environment variable.
**/
Display *
gdk_x11_get_default_xdisplay (void)

View File

@@ -275,10 +275,12 @@ guint _gdk_x11_display_manager_lookup_keyval (GdkDisplayManager *manager,
const gchar *name);
gchar * _gdk_x11_display_manager_get_keyval_name (GdkDisplayManager *manager,
guint keyval);
#ifdef HAVE_XCONVERTCASE
void _gdk_x11_display_manager_keyval_convert_case (GdkDisplayManager *manager,
guint symbol,
guint *lower,
guint *upper);
#endif
GdkCursor *_gdk_x11_display_get_cursor_for_type (GdkDisplay *display,
GdkCursorType type);

View File

@@ -207,7 +207,7 @@ lookup_cached_xatom (GdkDisplay *display,
}
/**
* gdk_x11_atom_to_xatom_for_display: (skip)
* gdk_x11_atom_to_xatom_for_display:
* @display: A #GdkDisplay
* @atom: A #GdkAtom, or %GDK_NONE
*
@@ -298,7 +298,7 @@ _gdk_x11_precache_atoms (GdkDisplay *display,
}
/**
* gdk_x11_atom_to_xatom: (skip)
* gdk_x11_atom_to_xatom:
* @atom: A #GdkAtom
*
* Converts from a #GdkAtom to the X atom for the default GDK display
@@ -313,14 +313,14 @@ gdk_x11_atom_to_xatom (GdkAtom atom)
}
/**
* gdk_x11_xatom_to_atom_for_display: (skip)
* gdk_x11_xatom_to_atom_for_display:
* @display: A #GdkDisplay
* @xatom: an X atom
*
* Convert from an X atom for a #GdkDisplay to the corresponding
* #GdkAtom.
*
* Return value: the corresponding #GdkAtom.
* Return value: (transfer none): the corresponding #GdkAtom.
*
* Since: 2.2
**/
@@ -373,13 +373,13 @@ gdk_x11_xatom_to_atom_for_display (GdkDisplay *display,
}
/**
* gdk_x11_xatom_to_atom: (skip)
* gdk_x11_xatom_to_atom:
* @xatom: an X atom for the default GDK display
*
* Convert from an X atom for the default display to the corresponding
* #GdkAtom.
*
* Return value: the corresponding G#dkAtom.
* Return value: (transfer none): the corresponding G#dkAtom.
**/
GdkAtom
gdk_x11_xatom_to_atom (Atom xatom)
@@ -450,7 +450,7 @@ _gdk_x11_display_manager_get_atom_name (GdkDisplayManager *manager,
}
/**
* gdk_x11_get_xatom_by_name_for_display: (skip)
* gdk_x11_get_xatom_by_name_for_display:
* @display: a #GdkDisplay
* @atom_name: a string
*
@@ -472,7 +472,7 @@ gdk_x11_get_xatom_by_name_for_display (GdkDisplay *display,
}
/**
* gdk_x11_get_xatom_by_name: (skip)
* gdk_x11_get_xatom_by_name:
* @atom_name: a string
*
* Returns the X atom for GDK's default display corresponding to @atom_name.

View File

@@ -265,8 +265,8 @@ gdk_x11_screen_get_monitor_plug_name (GdkScreen *screen,
}
/**
* gdk_x11_screen_get_monitor_output: (skip)
* @screen: a #GdkScreen
* gdk_x11_screen_get_monitor_output:
* @screen: (type GdkX11Screen): a #GdkScreen
* @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen)
*
* Gets the XID of the specified output/monitor.
@@ -319,7 +319,7 @@ gdk_x11_screen_get_rgba_visual (GdkScreen *screen)
/**
* gdk_x11_screen_get_xscreen:
* @screen: a #GdkScreen.
* @screen: (type GdkX11Screen): a #GdkScreen.
* @returns: (transfer none): an Xlib <type>Screen*</type>
*
* Returns the screen of a #GdkScreen.
@@ -334,7 +334,7 @@ gdk_x11_screen_get_xscreen (GdkScreen *screen)
/**
* gdk_x11_screen_get_screen_number:
* @screen: a #GdkScreen.
* @screen: (type GdkX11Screen): a #GdkScreen.
* @returns: the position of @screen among the screens of
* its display.
*
@@ -1275,7 +1275,7 @@ fetch_net_wm_check_window (GdkScreen *screen)
/**
* gdk_x11_screen_supports_net_wm_hint:
* @screen: the relevant #GdkScreen.
* @screen: (type GdkX11Screen): the relevant #GdkScreen.
* @property: a property atom.
*
* This function is specific to the X11 backend of GDK, and indicates
@@ -1510,7 +1510,7 @@ _gdk_x11_screen_init_events (GdkScreen *screen)
/**
* gdk_x11_screen_get_window_manager_name:
* @screen: a #GdkScreen
* @screen: (type GdkX11Screen): a #GdkScreen
*
* Returns the name of the window manager for @screen.
*

View File

@@ -333,7 +333,7 @@ _gdk_x11_display_send_selection_notify (GdkDisplay *display,
/**
* gdk_x11_display_text_property_to_text_list:
* @display: The #GdkDisplay where the encoding is defined
* @display: (type GdkX11Display): The #GdkDisplay where the encoding is defined
* @encoding: an atom representing the encoding. The most
* common values for this are STRING, or COMPOUND_TEXT.
* This is value used as the type for the property
@@ -574,7 +574,7 @@ _gdk_x11_display_text_property_to_utf8_list (GdkDisplay *display,
/**
* gdk_x11_display_string_to_compound_text:
* @display: the #GdkDisplay where the encoding is defined
* @display: (type GdkX11Display): the #GdkDisplay where the encoding is defined
* @str: a nul-terminated string
* @encoding: (out) (transfer none): location to store the encoding atom
* (to be used as the type for the property)
@@ -695,7 +695,7 @@ _gdk_x11_display_utf8_to_string_target (GdkDisplay *display,
/**
* gdk_x11_display_utf8_to_compound_text:
* @display: a #GdkDisplay
* @display: (type GdkX11Display): a #GdkDisplay
* @str: a UTF-8 string
* @encoding: (out): location to store resulting encoding
* @format: (out): location to store format of the result

View File

@@ -80,7 +80,8 @@ static const char gdk_settings_names[] =
"Net/EnableInputFeedbackSounds\0" "gtk-enable-input-feedback-sounds\0"
"Net/EnableEventSounds\0" "gtk-enable-event-sounds\0"
"Gtk/CursorBlinkTimeout\0" "gtk-cursor-blink-timeout\0"
"Gtk/AutoMnemonics\0" "gtk-auto-mnemonics\0";
"Gtk/AutoMnemonics\0" "gtk-auto-mnemonics\0"
"Gtk/VisibleFocus\0" "gtk-visible-focus\0";
static const struct
@@ -133,5 +134,6 @@ static const struct
{ 1573, 1603 },
{ 1636, 1658 },
{ 1682, 1705 },
{ 1730, 1748 }
{ 1730, 1748 },
{ 1767, 1784 }
};

View File

@@ -457,7 +457,7 @@ _gdk_x11_screen_list_visuals (GdkScreen *screen)
/**
* gdk_x11_screen_lookup_visual:
* @screen: a #GdkScreen.
* @screen: (type GdkX11Screen): a #GdkScreen.
* @xvisualid: an X Visual ID.
*
* Looks up the #GdkVisual for a particular screen and X Visual ID.
@@ -564,12 +564,12 @@ _gdk_visual_get_x11_colormap (GdkVisual *visual)
}
/**
* gdk_x11_visual_get_xvisual: (skip)
* gdk_x11_visual_get_xvisual:
* @visual: a #GdkVisual.
*
* Returns the X visual belonging to a #GdkVisual.
*
* Return value: an Xlib <type>Visual*</type>.
* Return value: (transfer none): an Xlib <type>Visual*</type>.
**/
Visual *
gdk_x11_visual_get_xvisual (GdkVisual *visual)

View File

@@ -1699,7 +1699,7 @@ gdk_window_x11_lower (GdkWindow *window)
/**
* gdk_x11_window_move_to_current_desktop:
* @window: a #GdkWindow
* @window: (type GdkX11Window): a #GdkWindow
*
* Moves the window to the correct workspace when running under a
* window manager that supports multiple workspaces, as described
@@ -3023,7 +3023,7 @@ gdk_x11_window_set_focus_on_map (GdkWindow *window,
/**
* gdk_x11_window_set_user_time:
* @window: A toplevel #GdkWindow
* @window: (type GdkX11Window): A toplevel #GdkWindow
* @timestamp: An XServer timestamp to which the property should be set
*
* The application can use this call to update the _NET_WM_USER_TIME
@@ -3088,7 +3088,7 @@ gdk_x11_window_set_user_time (GdkWindow *window,
/**
* gdk_x11_window_set_theme_variant:
* @window: a #GdkWindow
* @window: (type GdkX11Window): a #GdkWindow
* @variant: the theme variant to export
*
* GTK+ applications can request a dark theme variant. In order to
@@ -4293,6 +4293,33 @@ _gdk_x11_moveresize_handle_event (XEvent *event)
if (event->xbutton.button == mv_resize->moveresize_button)
finish_drag (mv_resize);
break;
#ifdef HAVE_XGENERICEVENTS
case GenericEvent:
{
/* we just assume this is an XI2 event */
XIEvent *ev = (XIEvent *) event->xcookie.data;
XIDeviceEvent *xev = (XIDeviceEvent *)ev;
gint state;
switch (ev->evtype)
{
case XI_Motion:
update_pos (mv_resize, xev->root_x, xev->root_y);
state = _gdk_x11_device_xi2_translate_state (&xev->mods, &xev->buttons, &xev->group);
if ((state & button_mask) == 0)
finish_drag (mv_resize);
break;
case XI_ButtonRelease:
update_pos (mv_resize, xev->root_x, xev->root_y);
if (xev->detail == mv_resize->moveresize_button)
finish_drag (mv_resize);
break;
}
}
break;
#endif
}
return TRUE;
}
@@ -4701,9 +4728,10 @@ timestamp_predicate (Display *display,
/**
* gdk_x11_get_server_time:
* @window: a #GdkWindow, used for communication with the server.
* The window must have GDK_PROPERTY_CHANGE_MASK in its
* events mask or a hang will result.
* @window: (type GdkX11Window): a #GdkWindow, used for communication
* with the server. The window must have
* GDK_PROPERTY_CHANGE_MASK in its events mask or a hang will
* result.
*
* Routine to get the current X server time stamp.
*
@@ -4738,8 +4766,8 @@ gdk_x11_get_server_time (GdkWindow *window)
}
/**
* gdk_x11_window_get_xid: (skip)
* @window: a native #GdkWindow.
* gdk_x11_window_get_xid:
* @window: (type GdkX11Window): a native #GdkWindow.
*
* Returns the X resource (window) belonging to a #GdkWindow.
*

View File

@@ -81,7 +81,8 @@ _gdk_x11_display_remove_window (GdkDisplay *display,
/**
* gdk_x11_window_lookup_for_display:
* @display: the #GdkDisplay corresponding to the window handle
* @display: (type GdkX11Window): the #GdkDisplay corresponding to the
* window handle
* @window: an XLib <type>Window</type>
*
* Looks up the #GdkWindow that wraps the given native window handle.

View File

@@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
@@ -5,6 +6,7 @@
xmlns="http://usefulinc.com/ns/doap#">
<name xml:lang="en">Gtk+</name>
<shortname>gtk+</shortname>
<shortdesc xml:lang="en">Multi-platform toolkit</shortdesc>
<description xml:lang="en">GTK+ is a multi-platform toolkit for creating graphical user
interfaces. Offering a complete set of widgets, GTK+ is suitable for
@@ -21,6 +23,9 @@ licensing terms for GTK+, the GNU LGPL, allow it to be used by all
developers, including those developing proprietary software, without
any license fees or royalties.</description>
<homepage rdf:resource="http://www.gtk+.org/" />
<license rdf:resource="http://usefulinc.com/doap/licenses/lgpl" />
<bug-database rdf:resource="http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B" />
<download-page rdf:resource="http://download.gnome.org/sources/gtk+/" />
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-list" />
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list" />
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-devel-list" />
@@ -28,6 +33,16 @@ any license fees or royalties.</description>
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-i18n-list" />
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/gtk-perl-list" />
<mailing-list rdf:resource="http://mail.gnome.org/mailman/listinfo/language-bindings" />
<category rdf:resource="http://api.gnome.org/doap-extensions#platform" />
<programming-language>C</programming-language>
<repository>
<GitRepository>
<browse rdf:resource="http://git.gnome.org/browse/gtk+/"/>
<location rdf:resource="git://git.gnome.org/gtk+"/>
</GitRepository>
</repository>
<maintainer>
<foaf:Person>
@@ -43,4 +58,5 @@ any license fees or royalties.</description>
<gnome:userid>timj</gnome:userid>
</foaf:Person>
</maintainer>
</Project>

View File

@@ -54,7 +54,6 @@ AM_CPPFLAGS = \
-DGTK_PRINT_BACKEND_ENABLE_UNSUPPORTED \
$(GTK_DEBUG_FLAGS) \
$(GTK_DEP_CFLAGS) \
$(gtk_clipboard_dnd_c_sources_CFLAGS) \
$(INCLUDED_IMMODULE_DEFINE)
if PLATFORM_WIN32
@@ -199,6 +198,7 @@ gtk_public_h_sources = \
gtkcomboboxtext.h \
gtkcontainer.h \
gtkcssprovider.h \
gtkcsssection.h \
gtkdebug.h \
gtkdialog.h \
gtkdnd.h \
@@ -218,6 +218,9 @@ gtk_public_h_sources = \
gtkfixed.h \
gtkfontbutton.h \
gtkfontsel.h \
gtkfontchooser.h \
gtkfontchooserdialog.h \
gtkfontchooserwidget.h \
gtkframe.h \
gtkgradient.h \
gtkgrid.h \
@@ -392,6 +395,7 @@ gtk_private_h_sources = \
gtkcontainerprivate.h \
gtkcssparserprivate.h \
gtkcssproviderprivate.h \
gtkcsssectionprivate.h \
gtkcssselectorprivate.h \
gtkcsstypesprivate.h \
gtkcustompaperunixdialog.h \
@@ -404,6 +408,8 @@ gtk_private_h_sources = \
gtkfilechooserutils.h \
gtkfilesystem.h \
gtkfilesystemmodel.h \
gtkfontchooserprivate.h \
gtkfontchooserutils.h \
gtkiconcache.h \
gtkimageprivate.h \
gtkimcontextsimpleseqs.h \
@@ -524,6 +530,7 @@ gtk_base_c_sources = \
gtkcontainer.c \
gtkcssparser.c \
gtkcssprovider.c \
gtkcsssection.c \
gtkcssselector.c \
gtkcsstypes.c \
gtkdialog.c \
@@ -548,6 +555,10 @@ gtk_base_c_sources = \
gtkfixed.c \
gtkfontbutton.c \
gtkfontsel.c \
gtkfontchooser.c \
gtkfontchooserdialog.c \
gtkfontchooserutils.c \
gtkfontchooserwidget.c \
gtkframe.c \
gtkgradient.c \
gtkgrid.c \
@@ -780,7 +791,8 @@ if USE_QUARTZ
gtk_private_h_sources += \
gtksearchenginequartz.h
gtk_c_sources += $(gtk_use_quartz_c_sources)
gtk_use_quartz_c_sources_CFLAGS = "-xobjective-c"
libgtk_3_la_CFLAGS = "-xobjective-c"
else
gtk_c_sources += $(gtk_use_stub_c_sources)
endif
@@ -793,12 +805,8 @@ gtk_clipboard_dnd_c_sources = \
gtkdnd-quartz.c \
gtkquartz.c
gtk_clipboard_dnd_h_sources = gtkquartz.h
gtk_clipboard_dnd_c_sources_CFLAGS = "-xobjective-c"
else
gtk_clipboard_dnd_c_sources = \
gtkclipboard.c \
gtkdnd.c
gtk_clipboard_dnd_c_sources_CFLAGS =
gtk_clipboard_dnd_c_sources = gtkclipboard.c gtkdnd.c
endif
EXTRA_DIST += gtkquartz.h
@@ -839,12 +847,18 @@ gtk_extra_sources = \
gtkstatusicon-quartz.c \
gtk.symbols \
gtkversion.h.in \
gtkmarshalers.list
gtkmarshalers.list \
fallback-c89.c
#
# setup GTK+ sources and their dependencies
#
MAINTAINERCLEANFILES = $(gtk_built_sources) $(stamp_files) $(GENERATED_ICONS) stock-icons/icon-theme.cache
MAINTAINERCLEANFILES = \
$(gtk_built_sources) \
$(stamp_files) \
$(GENERATED_ICONS) \
stock-icons/icon-theme.cache
EXTRA_HEADERS =
EXTRA_DIST += $(gtk_private_h_sources) $(gtk_extra_sources)
EXTRA_DIST += $(gtk_built_sources)
@@ -893,7 +907,7 @@ gtktypebuiltins.c: @REBUILD@ $(gtk_public_h_sources) gtktypebuiltins.c.template
gtktypefuncs.c: @REBUILD@ stamp-gtktypebuiltins.h $(top_srcdir)/gtk/*.h $(top_srcdir)/gdk/*.h Makefile
$(AM_V_GEN) echo '#include <gtk/gtkx.h>' > xgen-gtfsrc.c && \
${CPP} $(DEFS) $(AM_CPPFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) xgen-gtfsrc.c | \
${CPP} $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) xgen-gtfsrc.c | \
$(GREP) -o '\bg[td]k_[a-zA-Z0-9_]*_get_type\b' | \
sort | uniq | \
$(SED) '{ s/^/*tp++ = /; s/$$/();/; s/^.*\(gdk_x11\|gtk_plug_\|gtk_socket_\).*$$/#ifdef GDK_WINDOWING_X11\n&\n#endif/; }' > xgen-gtf \
@@ -988,6 +1002,7 @@ uninstall-local: uninstall-ms-lib uninstall-def-file uninstall-mac-key-theme
distclean-local:
if test $(srcdir) != .; then \
rm -f $(MAINTAINERCLEANFILES); \
rm -rf stock-icons; \
fi
DEPS = libgtk-3.la $(top_builddir)/gdk/libgdk-3.la
@@ -1007,15 +1022,22 @@ introspection_files = \
gtktypebuiltins.h \
gtktypebuiltins.c
if USE_X11
introspection_files += \
gtksocket.c \
gtkplug.c
endif
Gtk-3.0.gir: $(INTROSPECTION_SCANNER) libgtk-3.la $(top_builddir)/gdk/Gdk-3.0.gir Makefile
Gtk_3_0_gir_SCANNERFLAGS = \
--add-include-path=$(top_builddir)/gdk \
--include-uninstalled=$(top_builddir)/gdk/Gdk-3.0.gir
Gtk_3_0_gir_INCLUDES = Atk-1.0
if USE_X11
Gtk_3_0_gir_SCANNERFLAGS += --add-include-path=$(top_builddir)/gdk/x11
Gtk_3_0_gir_INCLUDES += xlib-2.0
endif
Gtk_3_0_gir_SCANNERFLAGS += --c-include="gtk/gtkx.h"
Gtk_3_0_gir_INCLUDES = Atk-1.0
Gtk_3_0_gir_CFLAGS = \
$(AM_CPPFLAGS) \
-UGDK_DISABLE_DEPRECATED \

View File

@@ -1,4 +1,5 @@
/* GAIL - The GNOME Accessibility Implementation Library
* Copyright 2011, F123 Consulting & Mais Diferenças
* Copyright 2001, 2002, 2003 Sun Microsystems Inc.
*
* This library is free software; you can redistribute it and/or
@@ -80,12 +81,12 @@ add_listener (GSignalEmissionHook listener,
}
else
{
g_warning("Invalid signal type %s\n", signal_name);
g_warning ("Invalid signal type %s\n", signal_name);
}
}
else
{
g_warning("Invalid object type %s\n", object_type);
g_warning ("Invalid object type %s\n", object_type);
}
return rc;
}
@@ -270,26 +271,10 @@ gail_util_add_global_event_listener (GSignalEmissionHook listener,
split_string = g_strsplit (event_type, ":", 3);
if (split_string)
{
if (!g_strcmp0 ("window", split_string[0]))
{
static gboolean initialized = FALSE;
if (g_strv_length (split_string) == 3)
rc = add_listener (listener, split_string[1], split_string[2], event_type);
if (!initialized)
{
do_window_event_initialization ();
initialized = TRUE;
}
rc = add_listener (listener, "GtkWindowAccessible", split_string[1], event_type);
}
else
{
rc = add_listener (listener, split_string[1], split_string[2], event_type);
}
g_strfreev (split_string);
}
g_strfreev (split_string);
return rc;
}
@@ -319,19 +304,19 @@ gail_util_remove_global_event_listener (guint remove_listener)
}
else
{
g_warning("Invalid listener hook_id %ld or signal_id %d\n",
listener_info->hook_id, listener_info->signal_id);
g_warning ("Invalid listener hook_id %ld or signal_id %d\n",
listener_info->hook_id, listener_info->signal_id);
}
}
else
{
g_warning("No listener with the specified listener id %d",
remove_listener);
g_warning ("No listener with the specified listener id %d",
remove_listener);
}
}
else
{
g_warning("Invalid listener_id %d", remove_listener);
g_warning ("Invalid listener_id %d", remove_listener);
}
}
@@ -494,4 +479,5 @@ _gail_util_install (void)
atk_class->get_toolkit_version = gail_util_get_toolkit_version;
listener_list = g_hash_table_new_full (g_int_hash, g_int_equal, NULL, g_free);
do_window_event_initialization ();
}

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