Compare commits

...

701 Commits

Author SHA1 Message Date
Matthias Clasen b2ad8d2aba Dist gdk/wayland/cursor/meson.build
This file was missing from the 3.24.35 tarball.
Oops.
2022-11-23 06:24:40 -05:00
Matthias Clasen 14cf55f98d 3.24.35 2022-11-22 13:43:03 -05:00
Matthias Clasen 9bda1e9e13 Merge branch 'ebassi/app-default-flags' into 'gtk-3-24'
Do not use new G_APPLICATION_DEFAULT_FLAGS enum value

See merge request GNOME/gtk!5245
2022-11-22 18:41:17 +00:00
Emmanuele Bassi 46a43461c1 Do not use new G_APPLICATION_DEFAULT_FLAGS enum value
The merge request !5235 switched tests and examples from
G_APPLICATION_FLAGS_NONE, which has been deprecated in GLib 2.74, to
G_APPLICATION_DEFAULT_FLAGS. Sadly, it was done unconditionally, which
means we'd have to bump the required version of GLib.

To avoid that, let's just use the numeric value of the enum member.
2022-11-22 18:09:29 +00:00
Мирослав Николић 8d9d4434dc Update Serbian translation 2022-11-20 18:43:24 +00:00
Мирослав Николић f6c649b143 Update Serbian translation 2022-11-20 14:31:19 +00:00
Christian Kirbach 9b9e989ea9 Update German translation 2022-11-20 10:35:54 +00:00
Matthias Clasen 9cdeff6a18 Merge branch 'replace-deprecations' into 'gtk-3-24'
examples, tests: Replace deprecations

See merge request GNOME/gtk!5235
2022-11-19 23:25:45 +00:00
Anders Jonsson 9ac36cea3c Update Swedish translation 2022-11-19 20:10:37 +00:00
Akbarkhon Variskhanov b7a1941ab5 examples, tests: Replace deprecations
‘G_APPLICATION_FLAGS_NONE’ is deprecated: Use
'G_APPLICATION_DEFAULT_FLAGS' instead.
2022-11-19 23:23:50 +05:00
Simon McVittie 433b72fa21 Merge branch 'wip/smcv/3-24-autotools' into 'gtk-3-24'
[3.24] build: Define USE_XDG_ACTIVATION conditional when Wayland is disabled

See merge request GNOME/gtk!5226
2022-11-18 19:44:48 +00:00
Simon McVittie 20f2c13b2b build: Define USE_XDG_ACTIVATION conditional when Wayland is disabled
This fixes Autotools builds that disable Wayland, such as non-Linux
operating systems and the minimal "udeb" (micro-.deb) package used in
Debian's installer.

Signed-off-by: Simon McVittie <smcv@debian.org>
2022-11-18 11:49:49 +00:00
Matthias Clasen f8d26e2acc Merge branch 'libwayland-cursor-in-tree-gtk-3-24' into 'gtk-3-24'
Make wayland load cursors on demand

See merge request GNOME/gtk!5192
2022-11-18 03:55:52 +00:00
Emin Tufan Çetin c930d8361b Update Turkish translation 2022-11-15 18:29:44 +00:00
Emin Tufan Çetin bfddd4795b Update Turkish translation 2022-11-15 18:22:43 +00:00
Michael Catanzaro 2fcc114870 Merge branch 'gtk-3-gles' into 'gtk-3-24'
gdk_wayland_display_init_gl: use GLES API if required

See merge request GNOME/gtk!5062
2022-11-10 13:44:34 +00:00
Luca Bacci 66a199806c Make wayland load cursors on demand
Add and use a modified libwayland-cursor in-tree,
just as done in the main branch for GTK4
2022-11-04 15:16:06 +01:00
Luca Bacci 4432a03742 Revert "wayland/cursor: Sanity check cursor image size"
This reverts commit da4066774b.
2022-11-04 10:58:37 +01:00
Kjartan Maraas d3c39fb438 Update Norwegian Bokmål translation 2022-11-04 07:49:02 +00:00
Kukuh Syafaat 56eaeff89d Update Indonesian translation 2022-11-03 03:47:01 +00:00
Nathan Follens 230718c326 Update Dutch translation 2022-11-01 23:08:40 +00:00
Aleksandr Melman d0f49d9f9d Update Russian translation 2022-10-31 12:28:26 +00:00
Nart Tlisha 13cdfb7476 Update Abkhazian translation 2022-10-31 09:48:33 +00:00
Piotr Drąg e6ce24125c Update Polish translation 2022-10-30 12:37:05 +01:00
Balázs Úr ae42ed0a18 Update Hungarian translation 2022-10-30 00:00:03 +00:00
Hugo Carvalho 2d76cd4b2b Update Portuguese translation 2022-10-29 15:46:12 +00:00
Yuri Chornoivan bd736aed8c Update Ukrainian translation 2022-10-29 05:46:25 +00:00
Martin 89ea9ba600 Update Slovenian translation 2022-10-28 06:33:43 +00:00
Matthias Clasen b009366e21 Merge branch 'keypad-accels' into 'gtk-3-24'
Differentiate keypad keysyms in accelerators

See merge request GNOME/gtk!5176
2022-10-28 04:02:48 +00:00
Matthias Clasen 6cc0552ab8 Differentiate keypad keysyms in accelerators
When displaying accelerators, differentiate keypad
symbols with a 'KP' prefix. Fixing a 17 year old bug.

Backport of c58d9446f4.
2022-10-27 14:57:01 -04:00
Matthias Clasen 2703e420ae Merge branch 'wip/carlosg/xdg-activation-3-24' into 'gtk-3-24'
gdk/wayland: Support the xdg-activation wayland protocol (3.24)

See merge request GNOME/gtk!3489
2022-10-26 22:15:11 +00:00
Jonas Ådahl 0b4b9f6136 Merge branch 'tooltips-x11-scale-cursor-size' into 'gtk-3-24'
GtkTooltip: Scale the cursor size on X11

See merge request GNOME/gtk!5173
2022-10-26 15:41:23 +00:00
Luca Bacci bbce00f3a3 GtkTooltip: Scale the cursor size on X11
GtkSettings/X11 takes the values as provided by
XSettings. Unlike other backends, the values of
XSettings are in physical size (that's because
X11 doesn't support mixed-DPI setups anyway).

Take that in account when retrieving the cursor
size in gtk_tooltip_position ().

Note that this discrepancy between the X11 and
other backends has been fixed in GTK4.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/5223
2022-10-26 15:21:38 +02:00
Joan Bruguera 22c95cd1e9 gdk/wayland: Enable xdg-activation only if wayland-protocols >= 1.21
This way we can keep the same wayland-protocols requirement, so the latest GTK3
still builds on distributions shipping older versions of wayland-protocols,
such as Debian Bullseye.

Should fix CI builds as well.
2022-10-25 23:52:47 +02:00
Carlos Garnacho 3b25f9a662 gdk/wayland: Check the GdkSurface wl_surface before using it for activation
Double check the GdkSurface has a wl_surface before using it as the activation
token source, since we cannot use NULL surfaces here.

Fixes: https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1862
Backport-of: 4b41d4f78c
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:54:05 +02:00
Carlos Garnacho 7fa87abf8a gdk/wayland: Dispatch GdkAppLaunchContext activation token in its own queue
Use a separate queue to dispatch the token object exclusively, just like we
do on the GdkSurface activation paths.

Backport-of: fb68600d88
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:53:57 +02:00
Carlos Garnacho 45f0b5d052 wayland: Use xdg-activation for non-startup initiated focus requests
Currently, we have all the plumbing in place so that GTK consumes the
startup notification ID when focusing a window through the xdg-activation
protocol.

This however misses the case that a window might be requested to be
focused with no startup ID (i.e. via interaction with the application,
not through GApplication or other application launching logic).

In this case, we let the application create a token that will be
consumed by itself. The serial used is that from the last
interaction, so the compositor will still be able to do focus prevention
logic if it applies.

Since we already do have a last serial at hand, prefer xdg-activation
all the way over the now stale gtk-shell focusing support. The timestamp
argument becomes unused, but that is a weak argument to prefer the
private protocol over the standard one. The gtk-shell protocol support
is so far left for interaction with older Mutter.

Backport-of: 4dcacff312
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:53:49 +02:00
Guido Günther e80251e751 wayland: Keep startup_notification_id around long enough
When using xdg_activation we need to keep the id around until we send
the first activate to signal succesful startup.

Backport-of: 999509be61
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:53:36 +02:00
Guido Günther 54348c5270 wayland: xdg-activation: Don't assume there's a focus surface
Tools like gtk4-launch can't set surface on the activation token so
don't require it. If the compositor requires it we can't do anything
about it anyway. This avoids a critical:

   (gtk4-launch:23497): Gdk-CRITICAL **: 17:07:24.704: gdk_wayland_surface_get_wl_surface: assertion 'GDK_IS_WAYLAND_SURFACE (surface)' failed

Fixes: be4216e051 ("gdk/wayland: Support the xdg-activation wayland protocol")

Signed-off-by: Guido Günther <agx@sigxcpu.org>
Backport-of: 4d741bac98
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-10-25 15:53:26 +02:00
Carlos Garnacho a79d6972e0 gdk/wayland: Support the xdg-activation wayland protocol
This protocol implements the IPC necessary to focus application
windows across launcher/launchee. Add support for it.
2022-10-25 15:50:02 +02:00
Matthias Clasen 84a3ea5ec4 Merge branch 'gtk-cursor-wayland-hotspot' into 'gtk-3-24'
[gtk3] [wayland] Fix hotspot positioning with scaled surface.

See merge request GNOME/gtk!5159
2022-10-21 17:29:31 +00:00
Emilio Cobos Álvarez 686864a118 [gtk3] [wayland] Fix hotspot positioning with scaled surface.
Fixes !5278 to behave the same way as X11.
2022-10-21 14:22:51 +02:00
Alexander Shopov 95cb7d04c7 Update Bulgarian translation 2022-10-07 09:08:40 +00:00
Carlos Garnacho 108343b037 Merge branch 'wl-ime-lockscreen-fixes' into 'gtk-3-24'
gtk3: Backport of !4962. !5050, !5012: gtkimcontextwayland: Refactor handling of client updates

See merge request GNOME/gtk!5091
2022-10-06 10:57:35 +00:00
Carlos Garnacho 92813e52cd gtkimcontextwayland: Shuffle full resets after IM changes
Doing reset() on the text widgets after commit and delete_surrounding
is still too eager for some IMs (e.g. those that expect being able
to commit text while keeping a preedit buffer shown).

However, reset() is more of a "synchronize state" action on Wayland,
and it is still desirable to do that after changes that do come from
the IM (e.g. requesting the new surrounding text and cursor/anchor
positions). Notably here, the text_input protocol may still come up
with a preedit string after this state synchronization happens.

Shuffle the code so that the text widgets do not reset() the IM
context after text is deleted or committed, but the Wayland IM does
apply its practical effects after these actions happen. This keeps
the Wayland IM fully up-to-date wrt text widget state, while not
altering the ::commit and ::delete-surrounding-text behavior for
other IM context implementations.
2022-10-06 17:40:38 +07:00
Carlos Garnacho a88e848306 gtktextview: Also reset IM context after IM surrounding text deletion
When the IM commands the GtkText to delete text, the cursor position
would change, and so would the surrounding text. Reset the IM context
so that these updates are properly picked up by the IM.

Fixes backspace	key behavior in	the GNOME Shell OSK, since that	relies
on the surrounding text	being properly updated for the next iteration.
2022-10-06 17:29:50 +07:00
Carlos Garnacho 018083fab7 gtkentry: Also reset IM context after IM surrounding text deletion
When the IM commands the GtkText to delete text, the cursor position
would change, and so would the surrounding text. Reset the IM context
so that these updates are properly picked up by the IM.

Fixes backspace key behavior in the GNOME Shell OSK, since that relies
on the surrounding text being properly updated for the next iteration.
2022-10-06 17:29:50 +07:00
Carlos Garnacho fa6aca2925 gtkentry: Avoid early IM reset on updates
Resetting the IM on IM updates is too eager and indeed the simple
IM context doesn't like that this happens in the middle of dead
key handling.

We however want to reset the IM after actual text buffer changes
(say, a committed string) moved the cursor position, altered the
surrounding text, etc. So that the IM implementation does know to
update its state.

Since there is going to be an actual IM reset anyways, it does
no longer make sense to try to preserve the old priv->need_im_reset
status during commit handling.
2022-10-06 17:29:50 +07:00
Carlos Garnacho 7b1f9a3b08 gtkentry: Avoid early IM reset on updates
Resetting the IM on IM updates is too eager and indeed the simple
IM context doesn't like that this happens in the middle of dead
key handling.

We however want to reset the IM after actual text buffer changes
(say, a committed string) moved the cursor position, altered the
surrounding text, etc. So that the IM implementation does know to
update its state.
2022-10-06 17:29:36 +07:00
Carlos Garnacho b0c4196f98 gtkentry: Shuffle the places doing IM reset
During entry widget manipulation (inserting or deleting text via keyboard)
the IM context is reset somewhat early, before the actual change took place.
This makes IM lag behind in terms of surrounding text and cursor position.

Shuffle these IM reset calls so that they happen after the changes, and
ensure that the IM is actually reset, since that is currently toggled on
a pretty narrow set of circumstances.
2022-10-06 17:28:25 +07:00
Carlos Garnacho 0a8b0025e3 gtktextview: Shuffle the places doing IM reset
During text widget manipulation (inserting or deleting text via keyboard)
the IM context is reset somewhat early, before the actual change took place.
This makes IM lag behind in terms of surrounding text and cursor position.

Shuffle these IM reset calls so that they happen after the changes, and
ensure that the IM is actually reset, since that is currently toggled on
a pretty narrow set of circumstances.

Also, fix a bug during GtkEventControllerKey::im-update where the condition
on cursor position editability to reset the IM context was inverted.
2022-10-06 17:16:39 +07:00
Carlos Garnacho a2f579eca8 gtkimcontextwayland: Refactor handling of client updates
Currently, the wayland IM context sends zwp_text_input_v3.commit from
a number of places, and some of them with partial data. In order to
make client state updates "atomic" and complete, make the communication
happen over an unified notify_im_change() function that happens on
a narrower set of circumstances:

  - The GtkIMContext is reset
  - The GtkIMContext is just focused
  - The gesture to invoke the OSK is triggered
  - The IM context is reacting to changes coming from the compositor

Notably, setting the cursor location or the surrounding text do not try
to commit state on their own, and now will be flushed with the corresponding
IM update or reset. But also, these requests won't be prevented from
happening individually on serial mismatch, instead it will be the whole
state commit which is held off.

With these changes in place, all client-side updates are notified
atomically to the compositor under a single .commit request.
2022-10-06 17:16:33 +07:00
Matthias Clasen 293cee1724 Merge branch 'wip/carlosg/flush-uncompressed-motion' into 'gtk-3-24'
gdk: Ensure GdkFrameClock::flush-events with uncompressed motion

See merge request GNOME/gtk!5075
2022-10-03 20:48:10 +00:00
Carlos Garnacho 5ea961ed93 gdk: Ensure GdkFrameClock::flush-events with uncompressed motion
Sometimes, there may be motion events left in the queue, because at the
time of handlign these motion events the GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS
phase is not requested.

Ensure that, when finding motion events on a window that does not disable
motion compression, the events are anyways flushed, so they can be processed
early by the window/widget event handlers.

Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4946
2022-10-03 16:42:40 +02:00
Emmanuele Bassi 1ad49f238c Merge branch 'wip/carlosg/translate-string-selections' into 'gtk-3-24'
wayland: Translate STRING/UTF8_STRING selection atoms to mimetypes

See merge request GNOME/gtk!5072
2022-10-03 09:06:51 +00:00
Fabio Tomat 725ae0c878 Update Friulian translation 2022-10-03 08:39:31 +00:00
Carlos Garnacho 0c1ea92219 wayland: Translate STRING/UTF8_STRING selection atoms to mimetypes
Since the GDK API layer in 3.x is considerably tied to X11 details,
it makes sense to provide this bit of translation in case the app
uses these exclusively and does not use actual mimetype strings.
Provide this bit of translation of X11 selection atoms to mimetypes.

While at it, use the right zwp_primary_selection_source_v1 API with
primary selection data sources. From the looks of it, this just
happened to work.

Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/5217
2022-10-03 10:35:48 +02:00
Goran Vidović 67432fe3bc Update Croatian translation 2022-10-02 14:37:54 +00:00
Zurab Kargareteli 0bd5cfb1ce Update Georgian translation 2022-10-02 10:38:04 +00:00
Matthias Clasen 80d8970072 Merge branch 'wip/titlebar-gesture-gtk3' into 'gtk-3-24'
[3-24] wayland: Add support for gtk_surface1_titlebar_gesture()

See merge request GNOME/gtk!5070
2022-10-01 01:34:33 +00:00
Jonas Ådahl 45ba6e9329 wayland: Add support for gtk_surface1_titlebar_gesture()
This adds a private GDK API that GTK calls using GDK_PRIVATE_CALL(). It
is more or less a copy of the GdkSurface::titlebar_gesture() API, and
achieves the same. If the backend or compositor doesn't support titlebar
gestures, the existing path is used as a fallback.
2022-09-30 22:38:03 +02:00
Nart Tlisha 1a745a6b35 Update Abkhazian translation 2022-09-29 15:16:17 +00:00
Goran Vidović 4c77925af6 Update Croatian translation 2022-09-29 12:16:17 +00:00
Goran Vidović d388d65eb7 Update Croatian translation 2022-09-29 12:14:26 +00:00
Dominique Martinet 0e5fe45ea2 gdk_wayland_display_init_gl: use GLES API if required
gdk_wayland_gl_context_realize properly checks for GLES and uses
eglBindAPI with the proper API, but before that init is always called
with regular GL interface which is not implemented for many embedded
devices.

This was fixed in GTK 4 with commit 482845b027 ("wayland: Remove
initial GL API bind"), but that commit cannot easily be applied because
the current version queries some GL properties during init so we would
need to backport more for it to be applicable.

This patch takes the minimal approach of initializing GLES context,
allowing the gtk3 demo OpenGL test (and real applications) to work
when GDK_GL=gles is set.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3028
2022-09-28 14:34:41 +09:00
Luca Bacci 812b3930d0 Merge branch 'gdk-win32-fix-subclassing-gdk-win32-selection' into 'gtk-3-24'
GdkWin32: Fix subclassing for GdkWin32Selection

See merge request GNOME/gtk!5054
2022-09-26 12:52:32 +00:00
Luca Bacci 8f0d580cf9 GdkWin32: Fix subclassing for GdkWin32Selection 2022-09-26 14:28:03 +02:00
Carlos Garnacho 56100ab49a Merge branch 'work/zzag/kde-dnd' into 'gtk-3-24'
gdk/wayland: Update selection's offer before updating dnd targets

See merge request GNOME/gtk!5045
2022-09-23 09:09:22 +00:00
Vlad Zahorodnii 965aa2e65f gdk/wayland: Update selection's offer before updating dnd targets
gdk_wayland_drop_context_update_targets gets targets from the
selection's offer. In order to ensure that the drop context has
up-to-date targets, update the selection's offer before updating
targets.

This fixes drag-and-drop not working reliably when running Firefox in
Plasma Wayland session.
2022-09-23 11:12:41 +03:00
Matthias Clasen 4c991b8b39 Merge branch 'backport-mr-4776-to-gtk3' into 'gtk-3-24'
Recognize "stylus" devices as GDK_SOURCE_PEN

See merge request GNOME/gtk!5036
2022-09-20 10:57:20 +00:00
Sabri Ünal a533474dfe Update Turkish translation 2022-09-18 08:19:53 +00:00
Sabri Ünal 9c9920e46e Update Turkish translation 2022-09-18 08:19:45 +00:00
Nate Eldredge 8984b13d84 Recognize "stylus" devices as GDK_SOURCE_PEN
Add "stylus" to the list of substrings in a device name that cause it to be recognized
as a GDK_SOURCE_PEN device (previously "wacom", "pen" and "eraser").  Some devices
just use "stylus" in their name, and are otherwise recognized as
GDK_SOURCE_TOUCHSCREEN instead.

Fixes #4394.
2022-09-17 15:06:27 +02:00
Balázs Meskó 5f8ab17a0c Update Hungarian translation 2022-09-14 00:36:30 +00:00
Matthias Clasen cbfec14df4 Merge branch 'gtk3-fontchooser-fix' into 'gtk-3-24'
Fix a critical in GtkFontChooserWidget

See merge request GNOME/gtk!5027
2022-09-13 13:19:57 +00:00
Matthias Clasen ea9aa8ed82 Fix a critical in GtkFontChooserWidget
When the level doesn't include the style, we need
to work a bit harder to really get a face object
here.

Fixes: #5173
2022-09-13 08:54:09 -04:00
Jordi Mas 4a93875bbb Update Catalan translation 2022-09-11 14:30:21 +02:00
Cheng-Chia Tseng b425e724ee Update Chinese (Taiwan) translation 2022-09-10 09:21:40 +00:00
Matthias Clasen 9baae419f6 x11: Add a precondition
Trying to be helpful.
2022-09-09 14:50:39 -04:00
Piotr Drąg 1c375f72bc Update Polish translation 2022-08-28 23:32:39 +02:00
Goran Vidović 1df4b908a8 Update Croatian translation 2022-08-28 14:43:05 +00:00
Jordi Mas a02858a5e8 Fixes to Catalan translation 2022-08-26 20:49:42 +02:00
Nart Tlisha 12325f2e0a Update Abkhazian translation 2022-08-25 10:27:20 +00:00
John Ralls 7a56fa276b [quartz] find_toplevel_under_pointer should not return _gdk_root
The macOS WM has no root window. We fake one with a 1x1 window at the
origin that has no associated NSWindow. If the pointer is not on a
realized GdkWindow the hierarchical search will place it in the root
window even if it's nowhere near it. That's not valid, but returning it
from find_toplevel_under_pointer prevents Gdk from discovering when the
pointer is really over a GdkWindow. Return NULL instead so that the window
discovery is re-performed.
2022-08-22 08:58:08 -07:00
Matthias Clasen 784e93ba4a Merge branch 'wip/smcv/glib-2-74' into 'gtk-3-24'
[GTK 3] Avoid repeated g_log_set_writer_func in tests

See merge request GNOME/gtk!4968
2022-08-21 11:55:57 +00:00
Simon McVittie a4f45483b1 Avoid repeated g_log_set_writer_func in tests
Since GLib 2.73.0 it can only be called once per process.

Based on commit 78c153ae in GTK 4, but combining the icontheme test's
two custom log writers into one log writer that serves both purposes,
to avoid the need for a subprocess.

Co-authored-by: Matthias Clasen <mclasen@redhat.com>
Resolves: https://gitlab.gnome.org/GNOME/gtk/-/issues/5119
2022-08-20 19:34:05 +01:00
Matthias Clasen 84db04e6e1 Merge branch 'static-builds-hinstance' into 'gtk-3-24'
GdkWin32: Add support for static builds

See merge request GNOME/gtk!4538
2022-08-18 18:05:36 +00:00
Matthias Clasen 498cb3754c Merge branch 'fix_signal_blocked_on_update_relative_to' into 'gtk-3-24'
Unblock signal on update_relative_to in Gtk.Popover

See merge request GNOME/gtk!4589
2022-08-17 11:17:28 +00:00
Sergio Costas 4892c8901b Further simplification 2022-08-16 23:14:44 +02:00
Jordi Mas 187093f2a1 Update Catalan translation 2022-08-16 00:05:48 +02:00
Sergio Costas 02ea88bba2 Remove unneeded unblock
When a signal handler is disconnected, it doesn't matter if it
was blocked or not, so there's no need to unlock it before
disconnection.
2022-08-15 15:35:06 +02:00
Sergio Costas c9a3b42734 Unblock signal on update_relative_to in Gtk.Popover
When a Gtk.Popover loses the focus, it blocks the grab_notify
signal from the associated widget, and it unblocks it when it
regains the focus. To know whether the signal is or not blocked,
it uses the priv->grab_notify_blocked flag.

On the other hand, when the method update_relative_to() is
called, all the signals connected to the old associated widget
are disconnected, and connected to the new widget.

Unfortunately, the priv->grab_notify_blocked flag isn't updated,
which means that if update_relative_to() is called while the
Gtk.Popover doesn't have the focus (for example, because the
user switched into another application), when the focus is
regained, the code in window_focus_in() will see that
priv->grab_notify_blocked is TRUE and will unblock the handler;
but that handler wasn't blocked because the one that was blocked
was disconnected when update_relative_to() was called. This
shows a WARNING in the console:

GLib-GObject-WARNING **: ../../../gobject/gsignal.c:2692: handler '5146' of instance '0x556912f84f40' is not blocked

This patch fixes this.

Fix https://gitlab.gnome.org/GNOME/gtk/-/issues/4777
2022-08-15 09:31:24 +02:00
Matthias Clasen 0fd4906bf8 Merge branch 'wip/carlosg/seat-grab-pointer-hint' into 'gtk-3-24'
gdk/wayland: Drop motion hint mask from seat grab event masks

See merge request GNOME/gtk!4948
2022-08-12 16:37:03 +00:00
Carlos Garnacho 2c65884a5e gdk/wayland: Drop motion hint mask from seat grab event masks
At best, it's just an awkward event mask sitting there for a backend
that does not need it. At worst, this may result in motion events being
eaten away in the right set of circumstances.

Avoid the pointer motion hint mask, and rely on events being further
than hints.

Related: https://gitlab.gnome.org/GNOME/gimp/-/merge_requests/534#note_1526935
2022-08-12 01:54:08 +02:00
Chun-wei Fan 8137d2148c Merge branch 'more-vs-proj-updates' into 'gtk-3-24'
More imrpovements to Visual Studio projects (docs and PangoFT2 support, code generation flexibility)

See merge request GNOME/gtk!4934
2022-08-08 12:24:57 +00:00
Chun-wei Fan 5515bde10a README.win32.md: Improve Visual Studio build instructions
Make the options and variable clearer to people.  Sorry, this was
a bit long overdue.
2022-08-08 19:51:06 +08:00
Chun-wei Fan 89287d5500 win32/config-msvc.mak: Improve flexibility
Allow one to specify INCLUDEDIR and LIBDIR to locate the headers needed
for generating sources, if they are not under $(PREFIX)\include and
$(PREFIX)\lib, repsectively.
2022-08-08 19:51:00 +08:00
Chun-wei Fan 713fab7596 win32/generate-msvcprojs.mak: Simplify enabling PangoFT2
... in the gtk-3 Visual Studio project.  This will allow one who wishes to use
the font features items that uses the older PangoFT2-based APIs that is used
before Pango 1.44.0 and HarfBuzz-2.2.0 an easier way to do that, by
regenerating the gtk-3 project files with the necessary items enabled.

The font features demo still needs to be explicitly enabled, though, as
before.
2022-08-08 18:56:24 +08:00
Chun-wei Fan e567d4a33a README.win32: Convert to MarkDown
Make it easier on the eye, and put together portions that are repetitive.
2022-08-08 17:28:22 +08:00
Chun-wei Fan 88c17ea509 Merge branch 'msvcproj-git' into 'gtk-3-24'
Support building with Visual Studio projects from a GIT checkout

See merge request GNOME/gtk!4928
2022-08-05 12:01:37 +00:00
Chun-wei Fan bc3770f108 README.win32: Mention about (re-)generating project files
This adds instructions to aid one to build with the Visual Studio projects
directly from a GIT checkout, or to re-generate the project files with
various options and features enabled (which are not enabled by default
in the release tarballs).
2022-08-05 19:25:32 +08:00
Chun-wei Fan 6dc2710a70 README_FEATURES_MSVC.md: Mention about enabling EGL
...in a more automated way, since the NMake Makefiles now support doing so.
2022-08-05 19:08:30 +08:00
Chun-wei Fan 8a999cad56 Visual Studio build instructions: Use MarkDown
Make the documentation for enabling features us MarkDown to make it easier on
the eye.
2022-08-05 19:02:39 +08:00
Chun-wei Fan 1b22c554f5 win32: Add NMake Makefile to bootstrap projects
This adds a NMake Makefile to generate the needed items that are normally
generated during `./configure`, as well as to generate the full Visual Studio
projects and property sheets, so that one can use the Visual Studio projects
to build GTK directly from a GIT checkout.  A 'clean' target is also provided
to remove these generated artifacts.  This also generates the headers that are
needed to build broadwayd, since they are currently dist'ed with the tarballs
but are not in the GIT repo.

This will not be dist'ed, as this is primarily meant for GIT checkouts only.
2022-08-05 18:40:00 +08:00
Chun-wei Fan aa90717c3d win32/gen-version-items.py: Retrieve version info from configure.ac
...and use that info if no version and/or interface age was specified.  This
way, we can use this script to help bootstrap builds from Visual Studio
projects directly from a GIT checkout.
2022-08-05 18:40:00 +08:00
Chun-wei Fan e767a03051 win32: Split out MSVC project generating
...into a NMake Makefile snippet of its own, to make things clearer and easier
to maintain.  The regenerating target should still be invoked using
generate-msvc.mak.
2022-08-05 18:40:00 +08:00
Chun-wei Fan a84e604bda win32/generate-msvc.mak: Clean up a bit again
Reduce some more repetitions.
2022-08-05 18:38:41 +08:00
Chun-wei Fan 36f1cd24d2 generate-msvc.mak: Support generating libgtk/gailutil projects
This adds rules to allow (re-)generating the libgtk and libgail-util Visual
Studio projects, which needed some tinkering since we don't want to fall into
the nasty U1095 error.
2022-08-05 18:38:41 +08:00
Chun-wei Fan 07e01fdae7 config-msvc.mak.in: Regroup items
Improve readability
2022-08-05 18:37:14 +08:00
Chun-wei Fan d21115cb90 generate-msvc.mak: Add rules to copy the static VS2010 projects
... for VS2012~2022, so that they can be ready for use to build with later
Visual Studio versions.
2022-08-05 18:37:14 +08:00
Chun-wei Fan b28f2094ce win32/generate-msvc.mak: Support generating all GDK projects
This extends the support to generate all the GDK Visual Studio projects, which
include GDK, GDK-Broadway and broadwayd, in addition to GDK-Win32.  The rule
to regenerate the GDK-Win32 project is now changed to regenerate all GDK
projects, with or without EGL support in GDK-Win32.

Also, remove extraneous blank spaces in win32/vs10/broadwayd.vcxprojin to avoid
errors when generating the full VS2010+ broadwayd Visual Studio projects with
this update.

Use inference rules and re-group things a bit, to make things cleaner and
clearer.
2022-08-05 18:37:14 +08:00
Chun-wei Fan 91985e6dfa win32/generate-msvc.mak: Add rules to create GDK-Win32 MSVC projects
This will allow one to quickly re-generate the Gdk-Win32 Visual Studio
projects with or without EGL/libANGLE support.  Since some rules are shared
with the ones that we use to generate the gtk3-demo projects, clean things
up a bit.
2022-08-05 18:34:14 +08:00
Chun-wei Fan 156ae72ed7 Visual Studio: Add .gitignore's
We don't need to track the project files and property sheets that are generated
from their templates, and we don't want to track the demos.h(.win32) that are
mainly used for the Visual Studio builds, which are also generated.
2022-08-05 18:32:55 +08:00
Chun-wei Fan 7f5ebd2878 Merge branch 'msvc-broadway-improvements' into 'gtk-3-24'
GDK-Broadway build improvements for Visual Studio

See merge request GNOME/gtk!4927
2022-08-05 10:30:01 +00:00
Chun-wei Fan 8954c60e89 Merge branch 'msvc-build-pot' into 'gtk-3-24'
win32/generate-msvc.mak: Add rules for gtk30[-properties].pot

See merge request GNOME/gtk!4926
2022-08-05 10:24:20 +00:00
Chun-wei Fan adf62ea491 Merge branch 'improve-demos-h-msg' into 'gtk-3-24'
generate-msvc.mak: Improve gtk-demo config message

See merge request GNOME/gtk!4925
2022-08-05 10:20:58 +00:00
Chun-wei Fan 8e7200f956 generate-msvc.mak: Improve gtk-demo config message
Make the messages to show the configuration when we (re-)generate the
demos.h.win32 and Visual Studio projects show at the beginning, and make the
messages clearer.
2022-08-05 17:56:25 +08:00
Chun-wei Fan 8289b18b4b win32/generate-msvc.mak: Add rules for gtk30[-properties].pot
This adds rules using xgettext to generate gtk30.pot and
gtk30-properties.pot.

Currently, the XGETTEXT=... must be supplied, since it will likely come
from a MSYS2 or Cygwin installation on Windows.

This will help us get closer to support building more directly from a
GIT checkout with the Visual Studio projects
2022-08-05 17:08:18 +08:00
Chun-wei Fan a27bacc1fe win32/generate-msvc.mak: Add rules to generate broadway headers
This allows one to (re-)generate clienthtml.h and broadwayjs.h that is needed
to build broadwayd with the NMake Makefiles.  Currently, since these headers
are currently dist'ed, the rules added here are mainly of use to build from a
GIT checkout.
2022-08-05 16:51:08 +08:00
Chun-wei Fan 3bd0e8ff2e gdk/broadway/Makefile.am: Correct build variable
They should be enclosed by $() not ${}.
2022-08-05 16:50:48 +08:00
Matthias Clasen 5da57e7631 Merge branch 'win32-nahimic-nv-notes-3' into 'gtk-3-24'
README.win32: Add note on using OpenGL on Windows

See merge request GNOME/gtk!4916
2022-08-02 11:10:04 +00:00
Chun-wei Fan 489f2190be README.win32: Add note on using OpenGL on Windows
...when running on a system with nVidia graphics with Nahimic installed, since
a known issue within the graphics drivers and/or Nahimic can cause random
crashes and issues when OpenGL (G[t|d]kGLArea) is being used.

This will close issue #4113--sadly, this issue is an issue that is beyond our
reach to try fixing within GTK.
2022-08-02 13:53:06 +08:00
Jordi Mas 2cb920a51b Update Catalan translation 2022-08-01 20:46:05 +02:00
Nart Tlisha 56314b46ea Update Abkhazian translation 2022-07-28 19:16:33 +00:00
Quentin PAGÈS d71549942b Update Occitan translation 2022-07-26 19:24:15 +00:00
Nart Tlisha 974f3141cd Add Abkhazian translation 2022-07-26 11:14:42 +00:00
Zurab Kargareteli 9d3addf2aa Update Georgian translation 2022-07-25 07:41:00 +00:00
Quentin PAGÈS f5b78522a1 Update Occitan translation 2022-07-22 22:23:11 +00:00
Matthias Clasen 75906cb8c3 Merge branch 'buffer-func-annotation' into 'gtk-3-24'
Fix annotation of serialize and deserialize function

See merge request GNOME/gtk!4893
2022-07-22 12:41:46 +00:00
Cédric Krier 31490df2b1 Remove annotation for GError 2022-07-20 09:52:40 +02:00
Cédric Krier 3d406fc446 Fix annotation of serialize and deserialize function 2022-07-20 00:02:42 +02:00
Matthias Clasen 8bbc24c165 Merge branch 'wip/swilmet/improve-style-context-docs' into 'gtk-3-24'
docs: improve doc of gtk_style_context_get()

See merge request GNOME/gtk!4867
2022-07-13 15:48:25 +00:00
Sébastien Wilmet fea466c13c docs: improve doc of gtk_style_context_get()
When using this function in GtkSourceView (for GTK 3), there was a
mistake for retrieving a GdkRGBA value.

So, better document the function to avoid further mistakes.
2022-07-13 17:12:42 +02:00
Danial Behzadi 5c02deb893 Update Persian translation 2022-07-09 02:10:39 +04:30
John Ralls 09dd73feeb [quartz] Remove extra reference on layer's cairo_surface. 2022-06-30 15:27:03 -07:00
John Ralls f48bed22db [quartz] shouldInheritContentsScale from 10.7+ instead of 10.14+. 2022-06-30 15:25:50 -07:00
Matthias Clasen 739aaa7add Merge branch 'gtk-3-24' into 'gtk-3-24'
gtkmodifierstyle.c: Release symbolic color memory

See merge request GNOME/gtk!4830
2022-06-24 19:28:14 +00:00
Xu Shaohua 13174cd70d gtkmodifierstyle.c: Release symbolic color memory 2022-06-24 10:05:07 +08:00
Matthias Clasen ab68cee090 Merge branch 'symbolic-hc-3' into 'gtk-3-24'
Wayland/screen: Don't force HighContrast icon theme

See merge request GNOME/gtk!4803
2022-06-23 18:19:00 +00:00
Florian Müllner b19269c9c1 wayland/screen: Don't force HighContrast icon theme
The theme is considered deprecated in favor of symbolic icons from
the regular theme.
2022-06-23 15:49:03 +02:00
Matthias Clasen f08173c5cf Merge branch 'matthiasc/gtk-bump-fedora' into 'gtk-3-24'
ci: Bump Fedora base image

See merge request GNOME/gtk!4826
2022-06-23 13:39:22 +00:00
Matthias Clasen 26ef6917c8 Merge branch 'bad-popup-extents-gtk3' into 'gtk-3-24'
[gtk3] [x11] Fix coordinate space of rect in gdk_x11_window_get_frame_extents when called on popups.

See merge request GNOME/gtk!4821
2022-06-23 12:00:11 +00:00
Matthias Clasen f5890c9151 Keep version numbers sequential
Our ci image versions don't correspond to Fedora
release numbers. Changing that just for one branch
would be more confusing than helpful, I think.
2022-06-23 07:44:39 -04:00
John Ralls 56d9dc95d9 [quartz] Fix build on macOS versions before 10.14.
shouldInheritContentScale was introduced in 10.14.
2022-06-20 17:15:49 -07:00
Emilio Cobos Álvarez c43e3c4339 [gtk3] [x11] Fix coordinate space of rect in gdk_x11_window_get_frame_extents when called on popups.
This is the same fix as !4820, but applied to the gtk 3 branch.
2022-06-20 10:43:06 +02:00
Matthias Clasen a108de6f61 Merge branch 'gtk3-adwaita-maximized-ssd-no-border' into 'gtk-3-24'
Adwaita: Hide SSD box-shadow border on maximized windows

See merge request GNOME/gtk!4819
2022-06-19 17:05:07 +00:00
Sebastian Keller 4873f63c07 Adwaita: Hide SSD box-shadow border on maximized windows
The 1px shadow was showing up on adjacent monitors when a SSD window was
maximized. Additionally this was causing mutter to skip direct scanout
of these windows, because they extend beyond the screen.

Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2304
2022-06-19 16:24:59 +02:00
Florian Müllner fa8135d58a ci: Bump Fedora base image
F31 is EOL and no longer satisfies our ATK dependency. Bump it to
F35 to get gtk3's CI into a working state again.
2022-06-17 19:31:16 +02:00
Luca Bacci 04fe1c8e4e Merge branch 'gdk-win32-gtk-overlay-scrolling-gtk3' into 'gtk-3-24'
GdkWin32: Add code for gtk-overlay-scrolling setting

See merge request GNOME/gtk!4817
2022-06-17 09:49:39 +00:00
Luca Bacci b121fe8d51 GdkWin32: Add code for gtk-overlay-scrolling setting
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/4899
2022-06-17 11:04:54 +02:00
Chun-wei Fan 65f3fb7d89 Merge branch 'msvc-proj-more-data' into 'gtk-3-24'
Visual Studio projects: Make installed data files better match the autotools/Meson builds

See merge request GNOME/gtk!4814
2022-06-16 11:39:23 +00:00
Chun-wei Fan 4af19d4350 Visual Studio builds: Add optional rules to generate translations
Add a target in the install-msvc.mak file that enables one to generate
the translations (.mo) files using msgfmt from the .po catalog files.

Add an entry in config-msvc.mak[.in] so that one can use it to configure
a custom location for the msgfmt.exe program, since it is harder to
install with Visual Studio, so that one can use a prebuilt copy from
Cygwin or MSYS2, for instance.
2022-06-16 18:42:16 +08:00
Chun-wei Fan 52d01d63db MSVC projects: Generate and install Emoji GResource data
Generate the full GResource XML files for the Emoji data, and generate
the binary GResource data from them and copy them as appropriate.

At this point, the installed data files are in-line with what the Meson
builds install, sans the processed translation files.
2022-06-16 17:42:42 +08:00
Chun-wei Fan 857da46098 MSVC projects: Also copy the build auxiliary files
This does what the Meson build files also do, so that people can have
the m4 module, the ITS files as RelaxNG files if they choose to use them
anyways.
2022-06-16 17:42:42 +08:00
Chun-wei Fan a4f685c2db MSVC projects: Also "install" the gtk3-demo symbolic icon
Follows what is done in the Meson/autotools builds.
2022-06-16 17:42:42 +08:00
Jordi Mas 29386e22bf Update Catalan translation 2022-06-14 19:45:46 +02:00
John Ralls a2c54c739e [quartz] Ensure valid GdkWindowImplQuartz references.
In case of an offscreen window find its onscreen embedder, and NULL
any GdkWindowImpl that's not quartz, checking all return values.

This replaces 16ded683, removing its unnecessary search_for_nearest
functions.

Any unchecked cast of a GdkWindowImpl to GdkWindowImplQuartz risks at
least getting an invalid member reference, not just the ones in
gdk_quartz_window_get_foo, and all calls to gdk_quartz_window_get_foo need
to be checked, not just Gtk's internal calls. The motivation was that
transient_for was getting set on a Gimp offscreen window and that caused a
crash in raise_transient.
2022-06-09 13:22:59 -07:00
John Ralls 749c863073 [quartz] Ensure GdkWindowQuartz members are either valid or NULL. 2022-06-09 13:22:59 -07:00
John Ralls a5ad547b8b [quartz] ensure that the copy region is fully enclosed by the drawn surface. 2022-06-09 13:22:59 -07:00
John Ralls 8d4c4cdca4 [quartz] Handle scale changes using NSView::shouldInheritContentsScale.
Includes creating the CVPixelBuffer to supply the layer contents when
creating the cairo_image_surface, which reduces the number of them created
at the wrong scale.
2022-06-09 13:22:59 -07:00
Zurab Kargareteli b6c76028d6 Update Georgian translation 2022-06-05 17:13:20 +00:00
Chun-wei Fan 73ba8ce128 Merge branch 'msvcproj-demos' into 'gtk-3-24'
Visual Studio projects: Improve demos build process

See merge request GNOME/gtk!4781
2022-05-31 09:00:44 +00:00
Chun-wei Fan b9a3d3ef05 MSVC Projects: Build widget factory demo
Build the widget factory demo in the Visual Studio projects, and install
the icon files that it needs.
2022-05-31 15:32:44 +08:00
Chun-wei Fan e7efafcae7 MSVC Projects: Generate widget factory GResource sources
Add rules in the helper NMake Makefiles to generate the GResource
sources for gtk3-widget-factory.  This prepares for us to add project
files to build that demo program.
2022-05-31 15:32:31 +08:00
Chun-wei Fan 3c3b7e183a build: Don't generate icon browser MSVC project
The source listing is not likely to change for this one, so clean up the
build files a bit, and make the gtk3-icon-browser MSVC project a
complete one instead of a template.
2022-05-31 15:32:13 +08:00
Chun-wei Fan 67a3208d58 build: Do not generate gtk3-demo-application MSVC project
Clean up build files a bit, as there is not much point using a
'dist-hook' to generate the Visual Studio project file for this program.
2022-05-31 15:32:13 +08:00
Chun-wei Fan 6f7e3cb3f6 MSVC projects: Generate demo sources in IntDir
This is to reduce the pollution in the souce directories.  Update the
include paths accordingly.
2022-05-31 15:32:13 +08:00
Chun-wei Fan b58ba13a9e win32/generate-msvc.mak: Split up rule to regenerate demos.h.win32
This way, we can re-use items when we want to support generating project
files from the templates, such as building with project files directly
from a GIT checkout, or when we add sources and want to quickly add them
into the project files.
2022-05-31 15:32:13 +08:00
Chun-wei Fan 3292e9d67b MSVC Projects: Rename Makefile variable
Use VS1X instead of VS10 in the variable names in the NMake Makefiles,
since the VS2010 MSBuild Visual Studio project files really apply to all Visual
Studio versions at or after VS2010.

Also use variable substitution here to ease future maintenance.
2022-05-31 15:32:13 +08:00
Chun-wei Fan c8db9e1690 Merge branch 'msvcproj-nmake-robust' into 'gtk-3-24'
MSVC projects: Make helper NMake Makefiles more robust and faster

See merge request GNOME/gtk!4780
2022-05-31 07:28:16 +00:00
Chun-wei Fan 8d4c2708a0 Visual Studio projects: Speed up build
...for the sources and header generating phase, so that we can reduce
the number of times that we generate the source file lists that we need.
2022-05-31 14:56:31 +08:00
Chun-wei Fan 1f5bfb40ff Merge branch 'msvcproj-py3-req' into 'gtk-3-24'
Visual Studio projects: Make it clear that Python 3.x is now recommended

See merge request GNOME/gtk!4779
2022-05-31 06:28:43 +00:00
Chun-wei Fan 896a420da4 README.win32: Mention the possibility of using Python-2.7.x
It is probably still possible with older GLib and GObject-Introspection
versions, but it is certainly not recommended with the advent of Meson.

One will not be able to re-generate demos.h.win32 (for
enabling/disabling the Font Features Demo) with Python 2.7.x-Python 3.x
or PERL must be used.
2022-05-31 14:13:23 +08:00
Chun-wei Fan 86270ec423 MSVC projects: Make helper NMake Makefiles more robust
Append the detected Visual Studio version and target arch to the various
NMake Makefile snippets we generate on the fly, so that if multiple
items access the helper NMake Makefiles at the same time, we will be
much less prone to trouble.

This is not 100% fool-proof, but should make things much more robust when
attempting to build via different Visual Studio versions and configs at
the same time.
2022-05-31 10:46:36 +08:00
Chun-wei Fan a61ed05e32 Visual Studio projects: Make it clear Python 3.x is now required
The scripts that are used during the build to generate the sources now
do require Python 3.x to work, so make this clear to people.

In the Visual Studio projects, update the default Python installation to
correspond with Python 3.7.x or later, which is the lowest supported
version series of Python at this point.
2022-05-31 10:46:10 +08:00
Matthias Clasen 2152e76ec4 Merge branch 'gtk-3-24-fix-gimp' into 'gtk-3-24'
macos: Fix to offscreen window selections in Gimp 2.99

See merge request GNOME/gtk!4305
2022-05-27 21:26:51 +00:00
Lukas Oberhuber 16ded6835c macos: Fix to offscreen window selections in Gimp 2.99 2022-05-27 21:26:50 +00:00
Matthias Clasen 75d3095a6b Merge branch 'wayland-cursor-size' into 'gtk-3-24'
wayland/cursor: Sanity check cursor image size

See merge request GNOME/gtk!4381
2022-05-27 11:02:22 +00:00
Emmanuele Bassi 1cf58407be Merge branch 'dont-dist-gresource-srcs' into 'gtk-3-24'
Don't dist some generated sources

See merge request GNOME/gtk!4738
2022-05-25 13:22:23 +00:00
Luca Bacci 02b40fd64d Merge branch 'msvcproj-nmake-install' into 'gtk-3-24'
Cleanup Visual Studio project files a bit

See merge request GNOME/gtk!4734
2022-05-25 08:23:58 +00:00
Matthias Clasen eb4d736a4d Merge branch 'quartz-redraw-pixbuf' into 'gtk-3-24'
quartz: Use CALayer to back GdkQuartzView

See merge request GNOME/gtk!4728
2022-05-21 13:15:21 +00:00
John Ralls b94ed34f9c [quartz] Manage implementation surface lifetime.
To prevent leaking cairo surfaces while persisting the parts that
don't need to be redrawn.
2022-05-19 17:02:55 -07:00
John Ralls df94d0168d Use a CVPixelBuffer instead of a CGImage. 2022-05-19 16:58:39 -07:00
John Ralls be60902805 Draw window to image_surface and apply to CALayer. 2022-05-19 16:52:59 -07:00
John Ralls 2d3eb0c6a7 [quartz] Draw needs_display_region if available 2022-05-19 16:46:35 -07:00
John Ralls 8182c978db quartz: add CVDisplayLink based frame clock
This uses CVDisplayLink to drive the GdkFrameClock. A GdkWindow
can register a frame callback to thaw their frame clock as necessary
based on the next notification from CVDisplayLink.

CVDisplayLink notifies us on a high-priority thread. We use the same
NSEventas gdkeventloop-quartz.c to wakeup the main loop. This is done
so that we don’t pathologically wake up the select thread to then
continue notifying the main loop.

We use an embedded GList node in the GdkWindowImplQuartz so that we
can avoid allocating any lists or arrays for pending frame callbacks.
Compare this to the same design in GdkWindow for children.
2022-05-19 16:29:01 -07:00
Chun-wei Fan ff847c43ad Drop win32/Makefile.msvc-introspection
We no longer use the autotools 'dist-hook' to generate the items that we
need to build introspection with the Visual Studio projects, so drop the
autotools files and bits that we had to support this.  So, for
introspection on Visual Studio via the project files, it is purely via
NMake at this point.
2022-05-19 11:33:25 +08:00
Chun-wei Fan fe548537f9 build: Write introspection rules directly in NMake Makefiles
By doing so, we can drop the autotools rules that we use to generate the
file lists and rules for building introspection via NMake Makefiles for
Visual Studio builds via the project files.
2022-05-19 11:22:12 +08:00
Chun-wei Fan c05d21c9af gtk: Build: Prefix deprecated source listings
...with gtk_, so that they are distinguished from other names and is
more clear to people.
2022-05-19 10:58:01 +08:00
Chun-wei Fan 574bd57f72 gtk-sources.inc: Split base sources in two parts
Otherwise, NMake will choke when creating a filelist from it.  This
U1095 error is nasty! :|
2022-05-19 10:58:01 +08:00
Chun-wei Fan 7c2e4fa3b2 gdk: Move source listings to gdk-sources.inc
We want to share those listings with other non-autools build systems.
2022-05-19 10:57:55 +08:00
Chun-wei Fan f324c650a7 gdk/: Rename gdk-pub-headers.h to gdk-sources.inc
We want to make the sources listings for libgdk shared as well.
2022-05-19 09:41:48 +08:00
Chun-wei Fan 6e193eb141 win32/vs10/*.vcxproj: Consolidate project configs
Like what was done in the *.vcxprojin templates, consolidate project configs
that are repetitive, and use the 'Condition=' directive to distinguish between
configuration and/or target platform differences.
2022-05-19 09:41:48 +08:00
Chun-wei Fan 3bd1ed8c31 win32/vs10/*.vcxprojin: Consolidate project configs
We can use MSBuild "Condition" items to consolidate the configs, so that we can
clean up the project files a bit.
2022-05-19 09:41:48 +08:00
Chun-wei Fan 4c2cd5910f Visual Studio projects: Make property sheets shared
...for Visual Studio 2010 and later, since we used to copy them and
merely update the value of $(VSVer) during 'make dist' as needed.

Instead of doing that, move the property sheets for Visual Studio 2010,
which is the base version that we use, into a directory of its own, and
make the Visual Studio 2010~2022 projects look for them in that
directory, and set VSVer according to the toolset version identified by
each of the project files.

The ARM64-specific property sheet needed for VS2017 and the VS2008
property sheets will remain as they are.
2022-05-19 09:41:48 +08:00
Chun-wei Fan ac25eeb34a Visual Studio projects: Drop another property sheet
We can again use MSBuild trickery to do what was done in the dropped
property sheet.

Unfortunately, like the last commit, I couldn't figure out a way do to
something similar in the VS2008 project files... :|
2022-05-19 09:41:48 +08:00
Chun-wei Fan c50cd6f95c Visual Studio projects: Drop unneeded property sheet
We can use MSBuild trickery to do what the property sheet intends to
cover
2022-05-19 09:41:48 +08:00
Chun-wei Fan f4811ea1f1 build: Drop gtk3-install.[vsprops|props]
They are not used anymore, and are removed at this point.
2022-05-19 09:41:48 +08:00
Chun-wei Fan 455686a57f Visual Studio Projects: Use NMake Makefile to copy build results
... and so stop using gtk3-install.[vsprops|props], and remove that
property sheet from the dist and dist the NMake Makefile for the
purpose.

Also remove win32/vs10/gtk3-install.vcxproj.filters as well, as it is
no longer needed.

We will remove the gtk3-install.[vsprops|[props][.in] in a subsequent
commit.
2022-05-19 09:41:48 +08:00
Chun-wei Fan 3b5b8bbebe win32/: Add install-msvc.mak
This is an NMake Makefile that will replace the property sheets in the
Visual Studio project files so that we can call it from the project
files to "install" the binaries and introspection files that were built,
along with the header files and other data files, which aims to be
easier to maintain for the current approach.

This will also be expanded upon to optionally build the translation
files and make the installed files more in-line with what are done in
the Meson build files, where there could be compatibility problems with
older Visual Studio toolchains.
2022-05-19 09:41:48 +08:00
Chun-wei Fan 331090c148 win32/create-lists-msvc.mak: Pull in the newly-split source listings
We are going to use them to help us to use an NMake Makefile to copy the
built files and headers in our "install" directory.
2022-05-19 09:41:48 +08:00
Chun-wei Fan 8477c0e765 win32/create-lists-msvc.mak: Clean up a bit
We now have the theme CSS source listings in gtk/gtk-sources.inc, so
make use of it.  No need to repeat items from there.
2022-05-19 09:41:48 +08:00
Chun-wei Fan ea3b599d7f libgail-util: Split out sources listings
We want to share the listings with other non-autotools build systems.
2022-05-19 09:41:48 +08:00
Chun-wei Fan aa83f9fb42 gtk/Makefile.am: Split out more items
... to gtk-sources.inc, since we will want to share the items in the lists that
were split out.
2022-05-19 09:41:48 +08:00
Chun-wei Fan e21a578cb1 gtk: Rename gtk-mkenums-headers.mak to gtk-sources.inc
We want to reuse more sources listings in other non-autotools build
systems.
2022-05-19 09:41:48 +08:00
Chun-wei Fan def4b6c95f gdk/broadway: Split out sources listing
This way, we can reuse these lists in other non-autotools Makefile-based
build systems.
2022-05-19 09:41:47 +08:00
Chun-wei Fan cb494e0ad8 gdk/win32: Split out sources listing
This way, we can reuse this list in other non-autotools Makefile-based
build systems.
2022-05-19 09:41:47 +08:00
Matthias Clasen 4e3a3f0553 3.24.34 2022-05-18 14:52:03 -04:00
Chun-wei Fan 0264e2d6a6 demos: Fix distcheck
Make sure that we remove the files generated by glib-compile-resources
during distclean.
2022-05-18 17:48:16 +08:00
Chun-wei Fan bac9ff22f5 gtk/Makefile.am: Fix distcheck
Apparently distcheck expects the generated gtk.gresource.xml to be
there.
2022-05-18 15:32:21 +08:00
Chun-wei Fan dc9d60fc9a win32: Update Visual Studio projects
This is a follow-up commit so that the generated GResources sources for
the demos are included in the project files.

As a result, don't include demo_resources.c when regenerating
gtk3-demo.vc[x]proj for toggling on or off the font features demo, as it
would have been there.
2022-05-17 23:50:24 +08:00
Chun-wei Fan 472c40fd3f demos: Don't dist the generated GResource sources
The Visual Studio projects have support for generating these, especially
that the encoded string that result from them may become too big for the
Visual Studio compiler to handle (such as for gtk3-demo) and we are normally
supposed to generate the GResources sources for all builds, as the
generated code depends on the compiler being used).
2022-05-17 18:44:58 +08:00
Chun-wei Fan 39940e0892 gtk/: Don't distribute the generated sources
We already generate some of the sources for all builds, so extend this
to the other generated sources as well, since the Visual Studio projects
added support for generating these sources too.
2022-05-17 18:43:36 +08:00
Chun-wei Fan abbf7a3497 gdk/: Don't distribute the built sources
The Visual Studio projects have support for generating these items, so
we don't really need to distribute them with the sources.
2022-05-17 18:42:37 +08:00
John Ralls 3c721c5a80 quartz: drop beam sync penalty code
Now that we have a frame clock in place, we should be able to drop
the beam-sync penalty prevention code as we should be aligning our
draws with CVDisplayLink.
Originally by Christian Hergert <chergert@redhat.com>, flushWindow
corrections and improvements by John Ralls.
2022-05-05 16:19:02 -07:00
Christian Hergert 0c439e4b83 quartz: squash compiler warning about enums
We don’t care about the other enums, fine to squash the warning.
2022-05-05 16:08:54 -07:00
John Ralls b72e4437a2 quartz: Clean up two macOS deprecation warnings. 2022-05-05 16:07:47 -07:00
John Ralls acc1eb917b Quartz: Don't crash trying to release a NULL CGContext. 2022-05-05 16:04:42 -07:00
Matthias Clasen 01edbfb976 Merge branch '3-24-build-with-array-bounds' into 'gtk-3-24'
gtkimagedefinition: Check array bounds

See merge request GNOME/gtk!4677
2022-05-03 17:47:43 +00:00
Matthias Clasen 75beff2e13 Merge branch 'wip/carlosg/im-wayland-backports-3.24' into 'gtk-3-24'
gtk/imwayland: Use serial to control outbound messages

See merge request GNOME/gtk!4682
2022-05-03 16:36:10 +00:00
Matthias Clasen 3e4c9b1f04 Merge branch 'wip/another-randr-error-trap' into 'gtk-3-24'
[3.24] x11: Trap errors happening when getting output properties

See merge request GNOME/gtk!4680
2022-05-03 00:46:32 +00:00
Carlos Garnacho 5321fa25a5 imcontextwayland: Ignore preedit updates from NULL to NULL
If we get consecutive preedit string updates that announce a NULL
string, we still do end up issuing ::preedit-changed with those.
Ignore changes from NULL to NULL, it is the other combinations which
must issue this signal.
2022-05-02 23:34:09 +02:00
Carlos Garnacho 49b6410c26 imwayland: Do not defer commit() after set_surrounding_text()
For reasons that only apply to the old serial handling, asking for
the surrounding after IM changes resulted in lazy handling of
commit() afterwards.

With the recent interpretation of serials, this problem became more
apparent, since it is in fact very likely that the last interaction
step after an IM change is notifying of the changed surrounding
text after the IM change was applied.

Make handling of surrounding text similar to caret position changes,
always commit() after the state change, but skip through non-changes.

This makes the compositor state fully up-to-date after an IM change.

(cherry-picked from commit eb7c78aa48)
2022-05-02 23:34:09 +02:00
Carlos Garnacho 802a748e5b gtk/imwayland: Use serial to control outbound messages
Following the text-input protocol changes at
https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/115,
use the serial number to have the client push changes to the
zwp_text_input_v3 object only after compositor/client states match.

This specifically is more lenient to compositors pushing multiple
.done events ahead of the client replying to them.

(cherry-picked from commit f108f053d4)

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4853
2022-05-02 23:33:37 +02:00
Jonas Ådahl 9addb14a83 x11: Trap errors happening when getting output properties
This is to avoid getting X11 errors (thus aborting/exiting with a
failure) during rapid hotplugs, which may happen during e.g. CI testing.
2022-05-02 16:49:23 +02:00
Peter Bloomfield 54d319bc32 gtkimagedefinition: Extend commit b38266c0
Similarly, uses casts in `gtk_image_definition_unref()`. Compilation
succeeds without them, unlike in `gtk_image_definition_ref()`, because
`gtk_image_definition_unref()` is not called internally, unlike
`gtk_image_definition_ref()`. But the build would fail if some function
defined in the module were changed in the future to call
`gtk_image_definition_unref()`, and we can future-proof it now. This
also removes an inconsistency in how we access the members of the union.
2022-04-30 13:09:04 -04:00
Peter Bloomfield a5d208adaf gtkimagedefinition: Check array bounds
`jhbuild build gtk+-3` with GCC 12 fails with:
```
In function ‘gtk_image_definition_ref’,
    inlined from ‘gtk_image_definition_new_empty’
    at ../../../../jhbuild/checkout/gtk+-3/gtk/gtkimagedefinition.c:107:10:
../../../../jhbuild/checkout/gtk+-3/gtk/gtkimagedefinition.c:241:13: error:
    array subscript ‘GtkImageDefinition {aka union _GtkImageDefinition}[0]’
    is partly outside array bounds of ‘GtkImageDefinitionEmpty[1]’
    {aka ‘struct _GtkImageDefinitionEmpty[1]’} [-Werror=array-bounds]
  241 |   def->empty.ref_count++;
      |   ~~~~~~~~~~^~~~~~~~~~
../../../../jhbuild/checkout/gtk+-3/gtk/gtkimagedefinition.c:
    In function ‘gtk_image_definition_new_empty’:
../../../../jhbuild/checkout/gtk+-3/gtk/gtkimagedefinition.c:105:34: note:
object ‘empty’ of size 8
  105 |   static GtkImageDefinitionEmpty empty = { GTK_IMAGE_EMPTY, 1 };
      |                                  ^~~~~
```
and many similar errors.

Fix it by casting `GtkImageDefinition` to `GtkImageDefinitionEmpty` or
similar, as appropriate.

Essentially backports 4dcd02e853 from main to gtk-3-24.
2022-04-30 13:08:32 -04:00
Charles Monzat a47f81804d Update French translation 2022-04-08 09:19:43 +00:00
Charles Monzat f52ceba88c Update French translation 2022-04-08 09:15:30 +00:00
Matthias Clasen 5ce7a4ab00 Merge branch 'mcatanzaro/set-current-folder-file' into 'gtk-3-24'
gtkfilechooser: add missing nullable annotation

See merge request GNOME/gtk!4610
2022-04-02 19:56:11 +00:00
Michael Catanzaro 56ada2f01f gtkfilechooser: add missing nullable annotation 2022-04-01 13:14:00 -05:00
Anders Jonsson 21eb3b2a6c Update Swedish translation 2022-03-27 09:57:22 +00:00
Nathan Follens 42e4c7f058 Update Dutch translation 2022-03-25 11:01:14 +00:00
Rūdolfs Mazurs 7c6a55c686 Update Latvian translation 2022-03-24 20:18:44 +00:00
Cheng-Chia Tseng 9accec627f Update Chinese (Taiwan) translation 2022-03-22 14:30:27 +00:00
John Ralls 8445653213 [quartz] Restore setting QUARTZ_RELOCATION in meson build.
This seems to have gotten lost in the migration from autotools.

Closes https://gitlab.gnome.org/GNOME/gtk/-/issues/4769
2022-03-18 11:13:34 -07:00
Kjartan Maraas ce02673b8b Update Norwegian Bokmål translation 2022-03-15 15:15:02 +00:00
Milo Casagrande 90a856a31f Update Italian translation 2022-03-14 14:46:06 +00:00
Christian Kirbach b833a05583 Update German translation 2022-03-14 01:08:30 +00:00
Baurzhan Muftakhidinov e003d4c506 Update Kazakh translation 2022-03-12 11:59:29 +00:00
Matthias Clasen 9d1d2f0a66 Merge branch 'wip/jimmac/legacy-icons-gtk3' into 'gtk-3-24'
icons: add legacy icons

See merge request GNOME/gtk!4562
2022-03-11 18:41:44 +00:00
Jakub Steiner 5a0ffbbb45 icons: add legacy icons
- add legacy hicolor icons relied on in testsuite

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/4754
2022-03-11 19:16:28 +01:00
Balázs Úr 6ebbdaddaf Update Hungarian translation 2022-03-11 01:16:17 +00:00
Christian Kirbach 044beca50b Update German translation 2022-03-08 21:03:01 +00:00
Ask Hjorth Larsen 166ec3f10b Updated Danish translation 2022-03-08 20:54:36 +01:00
Aurimas Černius adf486c26e Updated Lithuanian translation 2022-03-07 18:04:28 +02:00
Matthias Clasen 8ff9b2f83f 3.24.33 2022-03-04 21:53:36 -07:00
Matthias Clasen 57fb729c0e 3.24.32 2022-03-03 21:42:12 -07:00
Luca Bacci d53b6b858f GDK: Avoid using constructors on Win32
The constructors in GDK only have a meaning for UNIX, on Windows
they are useless.
2022-03-03 21:44:38 +01:00
Luca Bacci ef4e1c473c Define DLL_EXPORT and _GDK_EXTERN depending on whether we are building a shared or a static library
Static builds on Windows are only supported in the Meson build
2022-03-03 21:44:31 +01:00
Changwoo Ryu af22c3beae Update Korean translation 2022-03-03 12:42:48 +00:00
Luca Bacci 7644d7da27 Merge branch 'fix_missing_printer_libs_win32' into 'gtk-3-24'
Add missing Windows libs for printing during cross-compiling (GTK3)

See merge request GNOME/gtk!4526
2022-03-03 08:52:02 +00:00
Мирослав Николић 3a6dfa6808 Update Serbian translation 2022-03-03 04:23:19 +00:00
Luca Bacci d5ce63508f GdkWin32: Retrieve module HINSTANCE in static builds 2022-03-02 16:25:09 +01:00
Goran Vidović 90ceb6fecc Update Croatian translation 2022-03-01 12:41:57 +00:00
Luca Bacci a17a0c5452 Merge branch 'fix_dllMain_win32' into 'gtk-3-24'
Fix dllMain win32

See merge request GNOME/gtk!4524
2022-03-01 06:03:37 +00:00
Melroy van den Berg d13e05be93 Fix dllMain win32 2022-03-01 06:03:36 +00:00
John Ralls 07d847d174 [quartz] Fix use-before-init.
Thanks to Lukas Oberhuber for the patch.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/4726
2022-02-28 10:05:47 -08:00
Luca Bacci c94837759e Merge branch 'win32-fix-4724-gtk3' into 'gtk-3-24'
gdkkeys-win32: Only perform substitution as last-resort [GTK3]

See merge request GNOME/gtk!4530
2022-02-28 08:44:44 +00:00
Philip Zander b85e60524f gdkkeys-win32: Only perform substitution as last-resort
Instead of performing keyboard layout substitution whenever we find a matching
entry in the registry, first try to load the original layout and only attempt
substitution when that fails.

See #4724
2022-02-27 16:32:59 +01:00
Asier Sarasua Garmendia f2f04ddd17 Update Basque translation 2022-02-27 08:04:17 +00:00
Melroy van den Berg d3ffdd59f8 Add missing Windows libs for printing - win32. During cross-compiling 2022-02-26 17:24:30 +01:00
Luca Bacci cf6627e11f Merge branch 'gdk-win32-fix-issue-1402' into 'gtk-3-24'
Fix last error reporting when calling GetClipboardOwner

See merge request GNOME/gtk!4520
2022-02-25 16:50:59 +00:00
Luca Bacci f19897e71f Fix last error reporting when calling GetClipboardOwner
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/1402
2022-02-25 17:02:26 +01:00
Luming Zh a238488966 Update Chinese (China) translation 2022-02-25 00:08:34 +00:00
Fran Dieguez e13ebcd7b3 Update Galician translation 2022-02-24 12:55:37 +00:00
Daniel Mustieles d72f3e9ec9 Updated Spanish translation 2022-02-24 12:53:52 +01:00
Yosef Or Boczko 3ae4467297 Update Hebrew translation 2022-02-22 20:50:54 +00:00
Matthias Clasen 0eec64aacc Merge branch 'fix_derefence_fault_gdk_x11_device_xi2_window_at_position' into 'gtk-3-24'
fix(dereference NULL ptr): Also tests "impl" in gdk_x11_device_xi2_window_at_position

See merge request GNOME/gtk!4408
2022-02-22 19:43:54 +00:00
Emmanuele Bassi 887c9dea94 Merge branch 'meson-use-gnome-post-install' into 'gtk-3-24'
Meson: Use gnome.post_install

See merge request GNOME/gtk!4379
2022-02-22 10:08:16 +00:00
Matej Urbančič d6e544bc02 Update Slovenian translation 2022-02-21 19:59:33 +00:00
Luca Bacci a4e482437f Merge branch 'gdk-win32-fix-ime-popup-position' into 'gtk-3-24'
Win32 IME: Use CFS_EXCLUDE to specify cursor position

See merge request GNOME/gtk!4497
2022-02-21 13:36:21 +00:00
Marek Černocký 186a85bdaa Updated Czech translation 2022-02-21 10:46:34 +01:00
Kukuh Syafaat 7abb4c6e01 Update Indonesian translation 2022-02-21 06:53:27 +00:00
Emin Tufan Çetin 1038e679fb Update Turkish translation 2022-02-20 15:02:09 +00:00
Piotr Drąg 9e668be546 Update Polish translation 2022-02-20 13:56:31 +01:00
Danial Behzadi 2196ee9867 Update Persian translation 2022-02-20 11:17:07 +00:00
Carlos Garnacho ed08a4e929 Win32 IME: Use CFS_EXCLUDE to specify cursor position
That mode of operation requires an exclude rectangle, which maps
better to the info provided on gtk_im_context_set_cursor_location(),
coincidentally also fixes the offset seen on the IME preedit window.

https://gitlab.gnome.org/GNOME/gtk/-/issues/374
https://bugzilla.gnome.org/show_bug.cgi?id=663096
2022-02-19 18:42:07 +01:00
Daniel Șerbănescu 45d265c851 Update Romanian translation 2022-02-19 13:38:52 +00:00
Claude Paroz a2e44d343e Updated French translation 2022-02-19 11:31:50 +01:00
Thibaud CANALE 0081dfc51d fix(dereference NULL ptr): Also tests "impl" in gdk_x11_device_xi2_window_at_position
Signed-off-by: Thibaud CANALE <thican@thican.net>
2022-02-18 21:10:41 +01:00
Aleksandr Melman b064bbd1e0 Update Russian translation 2022-02-18 19:34:13 +00:00
Jordi Mas 155bb07a4e Update Catalan translation 2022-02-18 07:33:17 +01:00
Rafael Fontenelle b10db12e49 Update Brazilian Portuguese translation 2022-02-18 00:05:36 +00:00
Anders Jonsson 1de15f8f38 Update Swedish translation 2022-02-17 22:10:05 +00:00
Hugo Carvalho bd2ae42d57 Update Portuguese translation 2022-02-17 21:28:19 +00:00
Yuri Chornoivan d75793b5af Update Ukrainian translation 2022-02-17 15:38:44 +00:00
Matthias Clasen 89b20b63cd Merge branch 'wip/hadess/app-id-inspector' into 'gtk-3-24'
inspector: Show app ID and resource path in the General tab

See merge request GNOME/gtk!4492
2022-02-17 13:37:23 +00:00
Bastien Nocera 5c92e6ddc6 inspector: Show app ID and resource path in the General tab
This makes it easier to figure out those values (which are mentioned in
the GtkApplication documentation) rather than working that out from the
way they're generated (or documented as being generated).
2022-02-17 12:27:19 +01:00
Luca Bacci 7394f6c720 Merge branch 'fix-issue-3690' into 'gtk-3-24'
Fix gdk_win32_window_get_frame_extents

See merge request GNOME/gtk!4478
2022-02-14 20:22:10 +00:00
Luca Bacci 4a8d96b95b GdkWin32: Fix gdk_win32_window_get_frame_extents
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/4690
2022-02-14 16:16:47 +01:00
Emmanuele Bassi 160ef56de4 Merge branch 'fix-cell-accessible-leak' into 'gtk-3-24'
Fix a leak of cell accessibles

See merge request GNOME/gtk!4471
2022-02-12 00:56:20 +00:00
Matthias Clasen cc977be580 Fix a leak of cell accessibles
gtk_container_cell_accessible_add_child is transfer none,
so we need to drop the reference we hold, otherwise it
leaks.
2022-02-11 18:39:55 -05:00
Luca Bacci e6a028bfca Merge branch 'win32-fix-ctrl-shift' into 'gtk-3-24'
gdkkeys-win32: Also ignore Ctrl + Shift (etc.)

See merge request GNOME/gtk!4456
2022-02-08 22:40:37 +00:00
Philip Zander a40f9261e9 gdkkeys-win32: Also ignore Ctrl + Shift (etc.)
Some Windows keymaps have bogus mappings for the Ctrl modifier. !4423 attempted
to fix this by ignoring the Ctrl layer, but that was not enough. We also need to
ignore combinations of Ctrl with other modifiers, i.e. Ctrl + Shift. For example,
Ctrl + Shift + 6 is mapped to the character 0x1E on a US keyboard (but it should
be treated as Ctrl + ^). Basically, always ignore Ctrl unless it is used in
conjunction with Alt, i.e. as part of AltGr.

Related issue: #4667
2022-02-08 20:44:35 +01:00
Matthias Clasen 38a1a23a53 Merge branch '3-24-30-api-additions-since-marker' into 'gtk-3-24'
Add `Since` markers for new API between 3.24.11 and 3.24.30

See merge request GNOME/gtk!4425
2022-02-08 00:15:10 +00:00
Matthias Clasen 5cdb9548d9 Merge branch 'tiled-border-fix-3-24' into 'gtk-3-24'
theme: Fix incorrect border color for tiled windows for 3.24

See merge request GNOME/gtk!4437
2022-02-08 00:13:27 +00:00
Matthias Clasen 08f47e0b01 Merge branch 'gtkcellrendererprogress-tabular' into 'gtk-3-24'
GtkCellRendererProgress: use tabular figures

See merge request GNOME/gtk!4444
2022-02-07 23:53:50 +00:00
Matthias Clasen 4621008326 Merge branch 'improve-gdk-screen-docs' into 'gtk-3-24'
gdkapplaunchcontext: Improve set_screen() docs

See merge request GNOME/gtk!4435
2022-02-07 23:37:33 +00:00
Benjamin Otte 807ae5cba8 Merge branch 'wip/hadess/inspector-search-by-pointer' into 'gtk-3-24'
inspector: Search by pointer address

See merge request GNOME/gtk!4441
2022-02-04 17:51:05 +00:00
Bastien Nocera 95e9d85716 inspector: Search by pointer address
Useful to find a widget that corresponds to a pointer address in gdb.
2022-02-04 18:16:50 +01:00
Joonas Henriksson 1b78ed4488 theme: Fix incorrect border color for tiled windows 2022-02-02 06:50:52 +02:00
Phaedrus Leeds c5c76ad327 gdkapplaunchcontext: Improve set_screen() docs 2022-02-01 11:24:04 -08:00
Boyuan Yang 3dc44becf0 Update Chinese (China) translation 2022-01-31 04:02:27 +00:00
Sebastian Dröge 133ff7687a Add Since marker for GtkHeaderBarAccessible
It was added in 3.24.11.
2022-01-30 19:09:50 +02:00
Sebastian Dröge a47bb16cff Add Since marker for gdk_wayland_window_set_application_id()
It was added in 3.24.22.
2022-01-30 19:07:42 +02:00
Sebastian Dröge 990d298720 Add Since marker to new accessibility API from 3.24.30
- GtkFileChooserWidgetAccessible
 - GtkPlugAccessible
 - GtkSocketAccessible
2022-01-30 18:56:55 +02:00
Luca Bacci 3ebf21c579 Merge branch 'win32-keys-ignore-ctrl' into 'gtk-3-24'
gdkkeys-win32: Ignore CTRL bit for key translation

See merge request GNOME/gtk!4423
2022-01-30 10:45:44 +00:00
Philip Zander cfc6d6ddb7 gdkkeys-win32: Ignore CTRL bit for key translation
Some keymaps on Windows contain bogus mappings for Ctrl+key for certain
keys, e.g. Ctrl+Backspace = Delete, or Ctrl+[ = 0x1B. These are never
used on Windows, so we should ignore them.

Fixes #4667
2022-01-29 22:36:40 +01:00
Lukas K 503e8f40b9 GtkCellRendererProgress: use tabular figures
yields more visually stable appearance
2022-01-28 19:52:47 +01:00
John Ralls 1b77a4dba9 Merge Lukas Oberhuber's 'fix-retina-cursors' into gtk-3-24. 2022-01-26 21:41:45 -08:00
Anders Jonsson f49bb510c7 Update Swedish translation 2022-01-22 14:18:12 +00:00
Matthias Clasen a106160251 Merge branch 'fix-warning' into 'gtk-3-24'
gdk/display-wayland: Don't bypass portal for theme entries

See merge request GNOME/gtk!4400
2022-01-19 13:48:23 +00:00
Florian Müllner de360b3745 gdk/display-wayland: Don't bypass portal for theme entries
When commit 49589e1da added support for the new high-contrast key,
it missed that the getter should only use the setting directly when
not going through the portal.

https://gitlab.gnome.org/GNOME/gtk/-/issues/4651
2022-01-19 02:17:43 +01:00
Matthias Clasen 248783c202 Merge branch 'fix-places-crash' into 'gtk-3-24'
gtkplacessidebar.c: add bookmark null checking

See merge request GNOME/gtk!4399
2022-01-18 23:50:47 +00:00
Geyslan G. Bem c7f9c80eb5 gtkplacessidebar.c: add bookmark null checking
This fixes nautilus crash and perhaps other callers issues.
Nautilus (and sometimes glib) crashes with malformed URI inside of the
bookmarks file .config/gtk-3.0/bookmarks when it has no LABEL.

This is result from the closed glib MR #2065 analysis and agreement.
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2065#note_1091979

Signed-off-by: Geyslan G. Bem <geyslan@gmail.com>

Fixes: #4643
2022-01-18 18:21:22 -05:00
Luca Bacci 2f00ceb492 Merge branch 'revert-fd6ce997' into 'gtk-3-24'
Revert "Bug 676077: Fix handling of Keyboard Input on Windows"

See merge request GNOME/gtk!4384
2022-01-17 09:43:21 +00:00
Chun-wei Fan 58e038f32e Revert "Bug 676077: Fix handling of Keyboard Input on Windows"
The actual code that does the IM context code handling on Windows now uses the
native Windows APIs to handle keystrokes, so this patch is no longer needed, as
it was found that it instead caused issues.

Pointed out in issue #2865.

This reverts commit fd6ce9975e.
2022-01-17 11:31:28 +08:00
Robert Mader da4066774b wayland/cursor: Sanity check cursor image size
On Wayland it is a protocol violation to upload buffers with
dimensions that are not an integer multiple of the buffer scale.

Until recently, Mutter did not enforce this. When it started
doing so, some users started seeing crashes in GTK apps because the
cursor theme ended up with e.g. a 15x16 pixel image at scale of 2.

Add a small sanity check for this case.
2022-01-14 20:49:28 +01:00
Luca Bacci b5d0c44a87 Meson: Use gnome.post_install
Only available on Meson 0.57.0 and later
2022-01-14 17:30:35 +01:00
Lukas Oberhuber 021cdf382d macos: correctly handle retina cursors
This change correctly sizes HiDPI curors on macOS.

Before this, the cursors would appear double the size of normal cursors
on non HiDPI screens.
Based in part on this comment:
https://gitlab.gnome.org/GNOME/gtk/-/issues/613#note_687914
2022-01-14 00:10:15 +00:00
Luca Bacci 8252f99e08 Merge branch 'win32-fix-altgr-gtk3' into 'gtk-3-24'
IMContextSimple: Fix AltGr not working on Win32 [GTK3]

See merge request GNOME/gtk!4374
2022-01-13 19:46:26 +00:00
Philip Zander f03bf55688 IMContextSimple: Fix AltGr not working on Win32
The old code assumed that any key press containing Ctrl or Alt cannot be
regular text input. This is not correct on Win32 as AltGr = Ctrl + Alt.
2022-01-13 13:43:23 +01:00
Matthias Clasen dac9baf3b1 Merge branch 'wip/keep-scale-3-24' into 'gtk-3-24'
wayland/window: Only update the scale if on any outputs

See merge request GNOME/gtk!4353
2022-01-12 19:45:50 +00:00
Matthias Clasen 7a35c5bd4e Merge branch '4627-printing-Unref-old-spool_io-before-setting-new-one-gtk3' into 'gtk-3-24'
printing: Unref old spool_io before setting new one

See merge request GNOME/gtk!4369
2022-01-12 19:37:38 +00:00
Marek Kasik 0387486407 printing: Unref old spool_io before setting new one
Unref private spool_io of GtkPrintJob before setting it to a new one
in gtk_print_job_set_source_file() and gtk_print_job_set_source_fd()
to prevent a leak.

Fixes: #4627
2022-01-12 12:46:27 +01:00
Matthias Clasen 8fc2af7bb3 Merge branch 'fontchooser-fix-3' into 'gtk-3-24'
docs: Fix gtk_tree_selection_get_selected_rows()

See merge request GNOME/gtk!4354
2022-01-12 02:49:27 +00:00
Luca Bacci 7e9935e381 Merge branch 'file-chooser-native-win32-grab-only-when-modal' into 'gtk-3-24'
GtkFileChooserNativeWin32: add GTK grab only when modal

See merge request GNOME/gtk!4364
2022-01-11 13:49:45 +00:00
Luca Bacci 0b26e8b8a3 GtkFileChooserNativeWin32: add GTK grab only when modal 2022-01-11 14:23:10 +01:00
Luca Bacci 84386c6466 Merge branch 'win32-keymap-fixes' into 'gtk-3-24'
GdkWin32Keymap bugfixes

See merge request GNOME/gtk!4359
2022-01-11 09:56:48 +00:00
David Hogan cc47262ccb gdkkeys-win32: Perform keyboard layout substitution
For some users, GetKeyboardLayoutNameA() returns an alias instead of the
fully resolved keyboard layout identifier. In that case, we have to
query the registry to resolve the alias before we can look up the DLL
path.

See comments under #4610
2022-01-10 03:34:59 +01:00
Philip Zander 4e9ddaf086 gdkkeys-win32: Fix handling of SGCAPS
Contrary to what you can read on the internet, SGCAPS keys don't work
by having capslock toggle the KBDCTRL bit, they actually have two
consecutive table entries, the first of which is for the normal
version and the second of which is for the capslocked version.

Background: SGCAPS is short for Swiss German caps because Swiss German
was the first layout to use this feature. For keys with the SGCAPS flag,
capslock has a different effect than pressing shift. For example:
Shift + ü = è,  CapsLock + ü = Ü,  CapsLock + Shift + ü = È
2022-01-09 12:36:47 +01:00
Philip Zander 8b1c334c4a gdkkeys-win32: Fix crash when keyboard DLL failed to load
DLL loading failures should not happen under normal circumstances, but
we should at least try not to crash and and print better diagnostic
messages if they do happen.

See #4610
2022-01-09 12:36:47 +01:00
Philip Zander 404229ad75 gdkkeys-win32: Add keysym mapping for capslock key
Add missing mapping between VK_CAPITAL and GDK_KEY_Caps_Lock, so
applications get a meaningful keyval rather than ffffff.
2022-01-09 12:36:47 +01:00
Philip Zander acf5db32f1 gdkkeys-win32: Fix capslock handling
Previously, we treated CapsLock and KanaLock as part of the global
keyboard state, much like NumLock and ScrollLock, rather than using
the supplied modifier mask. This was because GDK does not have a
modifier mask for KanaLock, only for CapsLock, so it would not have been
possible to properly support it.

However, this approach ended up causing problems, with certain keyboard
shortcuts not registering when capslock was active. This was first
observed in Inkscape [0] and appears to affect shortcuts consisting of a
single key (like 'a') with no additional modifiers (wheareas shortcuts
like 'ctrl+a' work).

So now we are using the supplied GDK_LOCK_MASK instead, and dropped
support for KanaLock, which we probably don't need anyway (since regular
text input should be handled by the IME input module -- the keymap is
mainly for shortcuts and keybindings, where you don't really want
KanaLock).

[0] https://gitlab.com/inkscape/inkscape/-/issues/3082
2022-01-09 12:36:32 +01:00
Luca Bacci 99c7cb11e5 Merge branch 'fix-4610' into 'gtk-3-24'
gdkkeys-win32: Fix uninitialized value (#4610)

See merge request GNOME/gtk!4355
2022-01-07 20:53:28 +00:00
Luca Bacci ed67e424f2 Merge branch 'win32-theme-flat-button-fix' into 'gtk-3-24'
GTK WIn32 theme - make buttons with .flat class appear flat and buttons in toolbar non-flat if they don't have said class

See merge request GNOME/gtk!4350
2022-01-07 19:58:47 +00:00
Philip Zander f81da43b00 gdkkeys-win32: Fix uninitialized value
gdk_win32_keymap_get_entries_for_keycode() did not initialize n_entries,
which led to a wrong number of items being returned in some cases.

/fixes #4610
2022-01-07 20:48:50 +01:00
Matthias Clasen b4eeada025 fontchooser: Fix axis name handling
This code was just broken.

Fixes: #4603
2022-01-07 14:27:17 -05:00
Jonas Ådahl b86e6bc38a wayland/window: Only update the scale if on any outputs
If we ended up on no output at all, keep the HiDPI scale as is, as it
likely means we were on a workspace that was switched away from. By
keeping the same scale, we avoid unnecessary scale changes that would
otherwise take place if the scale when on monitors would end up being
more than 1.
2022-01-07 19:33:33 +01:00
KrIr17 e9370d1dc8 make flat buttons look flat (and allow non-flat button in toolbars) 2022-01-07 16:59:24 +00:00
Luca Bacci 0e09bb75b5 Merge branch 'improve-font-features-msvc' into 'gtk-3-24'
Visual Studio projects: Simplify building font features demo

See merge request GNOME/gtk!4336
2022-01-06 05:11:53 +00:00
Luca Bacci 185f82c2ad Merge branch 'msvc-project-improvements' into 'gtk-3-24'
Improve Visual Studio projects (for gtk-3-24)

See merge request GNOME/gtk!4324
2022-01-05 14:12:57 +00:00
Chun-wei Fan eebc70bf27 Visual Studio projects: Simplify building font features demo
Improve the NMake Makefiles that is used to re-generate demos.h(.win32)
by re-generating the gtk3-demo Visual Studio projects, so that one would
no longer need to do that manually.

Update the build instructions accordingly.
2022-01-05 17:16:00 +08:00
Chun-wei Fan cef3293184 Visual Studio projects: Generate versioned sources
Instead of relying on the ones that are currently shipped with the tarballs,
generate them from their .in counterparts prior to the build.  This includes
the Resource Scripts (.rc) for libgdk/libgtk, as well as gtkversion.h, in
addition to gdkversionmacros.h which can now be generated during prebuild.
2022-01-04 14:17:38 +08:00
Chun-wei Fan 089cccc929 Visual Studio: Make gen-gdkversionmacros-h.py generic
Rename the script as gen-version-items.py, and so make things more generic and
usable by other items in the build.  We want to eventually to be able to
generate the .rc files and the *version*.h files from their *.in counterparts
using this script.
2022-01-04 11:14:49 +08:00
Chun-wei Fan fc8b70cbdf config-msvc.mak.in: Record the interface age
We want to make use of this so that we can generate the various versioned
sources easily, such as the Windows .rc scripts and the [gdk|gtk]version*.h.
2022-01-04 11:14:49 +08:00
Chun-wei Fan 6789ff7443 Visual Studio projects: Improve generating libgtk sources
This improves the source generating process by:

*  Generating the sources in the libgtk build directory, so that we do not
   pollute the source tree.
*  Support generating gtk[private]typebuiltins.[c|h] in the Visual Studio
   projects by using NMake internally.
*  Update the projects and the introspection build files so that the generated
   sources and headers can be found.
2022-01-04 11:14:41 +08:00
Chun-wei Fan 8eaddde310 gtk/build: Split out part of headers listings
This will enable us to share this list with the NMake Makefiles that will be
used to generate the gtk[private]typebuiltins.[c|h] in the Visual Studio
projects.
2022-01-04 11:07:28 +08:00
Chun-wei Fan 67f27409e0 GDK/build: Rename deprecated_h_sources to gdk_deprecated_h_sources
This will enable us to not confuse with the deprecated headers in
gtk/deprecated as those headers are also listed under deprecated_h_sources in
gtk/deprecated/Makefile.inc, when we include the makefile snippets in both
gdk/ and gtk/.
2022-01-04 11:07:28 +08:00
Chun-wei Fan 334333f779 Visual Studio projects: Improve generating GDK sources
This makes the rest of the sources that are generated being put in GDK's build
directory for the Visual Studio projects, instead of being placed in GDK's
source subdir, so that:

*  We can avoid polluting GDK's source tree.
*  The Visual Studio builds won't interfere with the Meson builds.

Update the project files to look for the generated sources and headers in the
right places, as well as making the introspection builds look for the generated
sources as well.

Also remove the gtk3-gen-srcs property sheets and put the relevant parts in the
corresponding gtk3-build-defines property sheets, to clean things up a bit.
2022-01-04 11:07:28 +08:00
Chun-wei Fan 74d43defc5 win32: Support (re-)generating gdkenumtypes.[c|h]
Add support in the NMake Makefiles used by the Visual Studio builds to generate
the enumeration sources in gdk/ in its own build directory.
2022-01-04 11:07:27 +08:00
Chun-wei Fan caa1c0e4e5 gdk: Split out public headers listing
This is so that we can share the list with other Makefile-based build systems
to generate the enumeration sources.
2022-01-04 11:07:27 +08:00
Chun-wei Fan 61dd680b02 win32: Re-organize NMake Makefiles a bit
This way, we can have the introspection NMake Makefiles share more items
with the source generating bits.

Update the Visual Studio projects accordingly
2022-01-04 11:07:27 +08:00
Luca Bacci 6671c20632 Merge branch 'winpointer-fix-key-state' into 'gtk-3-24'
Winpointer: Fix keyboard state

See merge request GNOME/gtk!4327
2022-01-03 18:49:13 +00:00
Luca Bacci 0603dbb466 Merge branch 'filechoosernative-win32-invisible' into 'gtk-3-24'
GTK grab for GtkFileChooserNativeWin32

See merge request GNOME/gtk!4326
2022-01-03 16:12:43 +00:00
Luca Bacci 46c12b2c92 Winpointer: Fix keyboard state
The dwKeyStates field of the POINTER_INFO structure is
always set to 0 no matter what.

Use GetKeyState instead.

Fixes https://gitlab.com/inkscape/inbox/-/issues/5946
2022-01-03 15:08:58 +01:00
Luca Bacci d3f46bcb16 Add GTK grab when opening GtkFileChooserNativeWin32
Implementation copied from gtkfilechoosernativeportal.c

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/4582
2022-01-03 14:51:57 +01:00
Luca Bacci 728f0e13a8 Merge branch 'fix_windows_build' into 'gtk-3-24'
Fix Windows build in gtk 3.24.31

See merge request GNOME/gtk!4292
2022-01-02 16:27:33 +00:00
Luca Bacci 23f49038e3 Merge branch 'fix-4565' into 'gtk-3-24'
Font features: Fix building with Pango before 1.44.0

See merge request GNOME/gtk!4302
2022-01-02 15:51:51 +00:00
Luca Bacci f6fe5d37a5 Merge branch 'more-vs2022-fixes' into 'gtk-3-24'
Some further Visual Studio 2022 build improvements (for gtk-3-24 only)

See merge request GNOME/gtk!4276
2022-01-02 15:50:25 +00:00
Luca Bacci 6ba7c50a7a Add hid.lib to GDK .pc file 2022-01-02 16:11:03 +01:00
Chun-wei Fan bec88ded5f demos/gtk-demo/font_features.c: Fix build on Pango < 1.44.x
The Pango headers prior to 1.44.0 do not include the HarfBuzz headers, so we
need to re-structure how we check for HarfBuzz 2.2.0 or later if we have Pango
1.44.x or later.

Fixes issue #4565.
2021-12-30 15:33:14 +08:00
Chun-wei Fan b0e3d03831 gtkfontchooserwidget.c: Fix build with pre-1.44.x Pango
Pango headers after 1.44.0 include hb.h automatically, but not before, so
re-structure the #if/#elif/#else checks for the availability of HarfBuzz 2.2.0
or later.

Pointed out in issue #4565.
2021-12-30 15:26:44 +08:00
Matthias Clasen cae257c9dc Merge branch 'meson-reftests' into 'gtk-3-24'
meson: Do not install reftests

See merge request GNOME/gtk!4280
2021-12-29 14:42:35 +00:00
Matthias Clasen 8fe3e09cfc Merge branch 'gtk-3-24-macos-dock-quit' into 'gtk-3-24'
macOS: Dock "Quit" invokes "app.quit" action

See merge request GNOME/gtk!4299
2021-12-29 14:28:47 +00:00
Matthias Clasen 8352dee082 Merge branch 'gtk-3-24-issue-4573' into 'gtk-3-24'
macOS: Fix QuartzCore linking and compiling with 10.11

See merge request GNOME/gtk!4298
2021-12-29 13:55:43 +00:00
Thomas Holder cbd9715c3c macOS: Dock "Quit" invokes "app.quit" action
Allows the application to handle "Dock icon > Quit" the same as
"Application menu > Quit".

Requires GtkApplication's `register-session` property.

Suitable replacement for gtk-mac-integration's
`NSApplicationBlockTermination` signal.
2021-12-29 13:51:01 +01:00
Thomas Holder 0ac6144369 macOS: Fix QuartzCore linking and compiling with 10.11
Follow-up on 10b5f8a0d6

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/4573
2021-12-29 11:33:50 +01:00
Melroy van den Berg 37f9af5805 Add define for GC_ALLGESTURES, in-case WINVER is not set. 2021-12-28 00:50:17 +01:00
Melroy van den Berg 4090306fd7 Lowercaps Windows.h -> windows.h 2021-12-28 00:47:28 +01:00
Luca Bacci e6e4f9e630 Merge branch 'fix_gtk_switch_cleanup' into 'gtk-3-24'
Fix: GTK Switch crash under Windows, on exit.

See merge request GNOME/gtk!4291
2021-12-27 20:39:05 +00:00
Melroy van den Berg 1ce49e48b2 Fix: GTK Switch crash under Windows, on exit. 2021-12-27 20:39:04 +00:00
David King 7f295eeb32 meson: Do not install reftests
Match the testsuite in the main branch.
2021-12-23 10:57:58 +00:00
Chun-wei Fan 04496cc535 win32/detectenv-msvc.mak: Add section on VS2022
This will make introspection builds via the Visual Studio 2022 projects work as
the NMake Makefiles were looking for VS2019 builds, which most probably did not
exist
2021-12-22 10:12:22 +08:00
Chun-wei Fan 92a8e10789 meson: Make VS2022 builds distinct from VS2019
Make sure that we append the 'vs17' suffix to the DLL filenames rather than
appending 'vs16', so that VS2022 builds are distinct from the VS2019 ones.
2021-12-22 10:12:12 +08:00
Matthias Clasen aa89959942 Merge branch 'fix-dist' into 'gtk-3-24'
gdk/win32/Makefile.am: Dist gdkkeys-win32.h

See merge request GNOME/gtk!4270
2021-12-21 19:25:50 +00:00
Matthias Clasen bae1a43710 Merge branch 'high-contrast-3' into 'gtk-3-24'
gdk/wayland: Support new `high-contrast` key

See merge request GNOME/gtk!4272
2021-12-21 19:25:32 +00:00
Matthias Clasen a4b522f6d7 Merge branch 'meson-fixes' into 'gtk-3-24'
Meson fixes

See merge request GNOME/gtk!4273
2021-12-21 19:25:16 +00:00
Matthias Clasen 01cb9b5ae6 Update meson build for recent changes
Adapt the meson build to the changes in
commit 93e1f7f1ec.
2021-12-21 14:22:45 -05:00
David King 208e115368 Revert "meson: simplify builtin_immodules build option"
This reverts commit 749a58ab26.

This maintains feature parity with the autotools build. To achieve the
equivalent of --with-included-immodules=wayland,
-Dbuiltin_immodules=wayland,waylandgtk can be used instead.
2021-12-21 14:36:16 +00:00
David King 2b566f0633 meson: Install example schema XML 2021-12-21 13:31:35 +00:00
Florian Müllner da8f634b25 gdk/wayland: Support new high-contrast key
We now have a boolean setting that determines whether the high-contrast
theme should be used. Support it by automatically setting the existing
`gtk-theme-name` and `gtk-icon-theme-name` properties when enabled.

With that, it is no longer necessary to change the regular theme settings
for high-contrast, so toggling between high-contrast and a non-default
theme finally works reliably.
2021-12-21 14:01:10 +01:00
David King 9bad0a2d5e meson: Remove missing reftests
Removed from autotools build in commit
93e1f7f1ec.
2021-12-21 10:09:29 +00:00
Chun-wei Fan 1a73728e04 gdk/win32/Makefile.am: Dist gdkkeys-win32.h
This was missing from the tarball.
2021-12-21 16:38:17 +08:00
Matthias Clasen ab45bde94c 3.24.31 2021-12-20 23:01:49 -05:00
Matthias Clasen 93e1f7f1ec Remove a bunch of failing reftests
Still not enough to make distcheck pass.
Giving up on it :(
2021-12-20 23:01:34 -05:00
Matthias Clasen 62768629f2 Fix distcheck 2021-12-20 17:18:55 -05:00
Matthias Clasen 7521de1d61 NEWS: Updates 2021-12-20 13:29:09 -05:00
Matthias Clasen 292be6c4bb Merge branch 'gtk-3-24-bigsur-perf' into 'gtk-3-24'
macOS: Big Sur performance patch

See merge request GNOME/gtk!4265
2021-12-20 15:42:52 +00:00
Lukas Oberhuber 10b5f8a0d6 macOS: Big Sur performance patch
One of 4 that were applied on Gimp 2.99. Original authorship
@DesMcGuiness and adapted to Gtk3 by @lukaso
2021-12-18 22:59:58 +00:00
Matthias Clasen c3b3f4711d Merge branch 'gtk-3-24' into 'gtk-3-24'
gdkquartz: fix crash on uninitialized attribute

See merge request GNOME/gtk!4257
2021-12-16 13:43:32 +00:00
Lukas Oberhuber 71e2821578 gdkquartz: fix crash on uninitialized attribute
`gdk_quartz_display_get_monitor_at_window` crashes when it tries to access the NSWindow on
an offscreen window. The attribute `toplevel` of `impl` is uninitialized and
causes a segfault.

This partially fixes: https://gitlab.gnome.org/GNOME/gimp/-/issues/7608
2021-12-16 13:00:02 +00:00
Sveinn í Felli fde4431559 Update Icelandic translation 2021-12-15 19:52:29 +00:00
Sveinn í Felli d45b11e8ea Update Icelandic translation 2021-12-15 19:48:09 +00:00
Luca Bacci ff06d5d59f Merge branch 'win32-rewrite-keymap-v2' into 'gtk-3-24'
Rewrite GdkWin32Keymap (V2)

See merge request GNOME/gtk!1051
2021-12-15 11:15:27 +00:00
Matthias Clasen ef95b58500 Merge branch 'gtk-3-24' into 'gtk-3-24'
textview: Add CSS letter spacing [GTK3]

See merge request GNOME/gtk!4254
2021-12-14 18:30:45 +00:00
Melroy van den Berg 70ef77a4c2 Add CSS letter spacing to textview 2021-12-14 17:04:38 +01:00
Carlos Garnacho 2800dc356b Merge branch 'gtk-3-24-x11-xi2.4-gestures' into 'gtk-3-24'
[GTK3] Touchpad gestures for X11 (XInput 2.4, X Server 21.1)

See merge request GNOME/gtk!4212
2021-12-13 13:21:09 +00:00
Philip Zander e658e3c449 gdk/win32: Fix modifiers sometimes being consumed for special keys
Windows keymaps contain some bogus mappings, e.g. Ctrl+Backspace=Delete.
Previously, we correctly identified the key as Backspace, but the Ctrl
was still consumed, so the Ctrl+Backspace keybinding did not work.
2021-12-10 01:14:47 +01:00
Philip Zander b3fcfa4bbc gdk/win32: Fix group parameter not being used by translate_keyboard_state
gdk_win32_keymap_translate_keyboard_state erroneously used the active
group rather than the specified group, which caused shortcuts not to
work in Inkscape when using a Cyrillic layout.
2021-12-09 12:29:19 +01:00
Philip Zander 4601d3aee4 gdk/win32: Add licensing boilerplate to gdkkeys-win32 2021-12-09 12:29:15 +01:00
Philip Zander 64eedbfaf4 gdk/win32: Remove unneeded struct _GdkWin32KernelCPUFuncs
It only had a single member and was only used internally by one
function.
2021-12-08 22:46:52 +01:00
Chun-wei Fan 4a55c527d7 gdk/win32: Consolidate CPU detection in one place
This consolidates the check for the running CPU in one single location,
to make things a bit cleaner, as:

* We can make use of IsWow64Process2(), if available, to check both
  whether we are running on an ARM64 CPU, and whether we are running as
  a WOW64 process.  This is also the function to use to properly check
  whether we are running as a WOW64 process on ARM64 systems, as
  IsWow64Process() does not work as we want on ARM64 systems.

* If we don't have IsWow64Process2() (which is absent from Windows prior
  to Windows 10 1511, where ARM64 Windows is introduced), we can fall
  back to  IsWow64Process(), which will tell us whether we are running
  as an WOW64 process (but clearly not on an ARM64 system).

Also clean up things a bit so that we can reduce reliance on global
variables.
2021-12-08 22:46:49 +01:00
Philip Zander aa3e6bb0a3 GdkWin32Keymap: Be more robust against DLL loading failures
Fixes failure on the CI servers when generating GIR files
2021-12-08 22:44:20 +01:00
Philip Zander 4039153ca7 Rewrite GdkWin32Keymap (load table directly from layout DLL)
The old code used repeated calls to `ToUnicodeEx` to populate
the translation table, which is slow and buggy. The new code
directly loads the layout driver DLLs from Windows.

Associated issues: #2055 #1033
Merge request: !1051

GdkWin32Keymap cleanup

Conform to C89, improve comments, whitespace
2021-12-08 22:44:17 +01:00
Carlos Garnacho 068df4874a Merge branch 'wayland-clipboard-fix' into 'gtk-3-24'
wayland: Ensure clipboard handling doesn't lock up in certain corner cases

See merge request GNOME/gtk!4058
2021-12-06 11:16:54 +00:00
msizanoen1 e23b4dd21b wayland: Ensure clipboard handling doesn't lock up in certain corner cases
When a selection request fails to be converted to the requested format in the
GTK layers, the wayland backend would miss bumping the machinery to handle
further pending selection requests. Fix this by reacting to
GdkDisplay::send_selection_notify with target=GDK_NONE (i.e. a failed
conversion as hinted from the upper layers) to do that.

This ensures the clipboard handling doesn't lock up in the following
scenarios:
  - GTK returned with a mismatching type to the one requested
  - GTK fails to convert to the requested type

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4340
2021-12-06 11:30:11 +01:00
Povilas Kanapickas a94baf4c3d gdk/x11: Report XI2 version on the server 2021-12-03 00:04:10 +02:00
Povilas Kanapickas a1a2f8ab56 gdk/x11: Implement XI2.4 touchpad gesture support 2021-12-03 00:04:10 +02:00
Quentin PAGÈS 2db8f64ca7 Update Occitan translation 2021-12-02 15:48:19 +00:00
Matthias Clasen 15d9b3c7d6 Merge branch 'backport-font-feature-pango-hb' into 'gtk-3-24'
Backport font features code utilizing Pango with HarfBuzz integration (1.44.x) for gtk-3-24

See merge request GNOME/gtk!4206
2021-12-01 15:47:30 +00:00
Matthias Clasen 1b789197e5 fontchooser: Avoid setting variations needlessly
Setting variations to their default value causes
them to show up in the serialization of the font
description - a font description has no idea about
the default values, so can't filter them out.

Avoid that.
2021-11-29 13:05:02 +08:00
Chun-wei Fan 28337d68a3 Visual Studio projects: Update README for additional features
Rename README_EGL_MSVC.txt to README_FEATURES_MSVC.txt, as we now have
more features that can be included in the builds using the Visual
Studio projects, which require additional depedencies and manual
enabling.

Specifically, this outlines how the font tweaking feature in libgtk can
be enabled and for people who wish to do so, how to enable the Font
Features demo in gtk3-demo.exe.
2021-11-29 12:25:53 +08:00
Chun-wei Fan f82eb198f2 Meson: Enable font features demo on later Pango versions
...even if PangoFT2 is not present, provided that Pango 1.44.0+ and
HarfBuzz 2.2.0+ are installed.  The demo now has added support for later
Pango versions that use HarfBuzz for shaping on all supported platforms.
2021-11-29 12:25:53 +08:00
Chun-wei Fan 720e335246 configure.ac: Check for Pango 1.44.0 or later
...and HarfBuzz 2.2.0 or later so that we can enable the font feature
demo even if we do not have PangoFT2.
2021-11-29 12:25:53 +08:00
Chun-wei Fan b8e78f83ce Font features demo: Port to newer Pango
...if Pango 1.44.0+ and HarfBuzz 2.2.0+ are available, otherwise we
stick on to the current code path.

This way, we can have people build and run the demo even without
PangoFT2 if Pango 1.44.0 or later and HarfBuzz 2.2.0 or later is
installed.
2021-11-29 12:25:53 +08:00
Chun-wei Fan 079ee4e31e win32/generate-msvc.mak: Add rule to regenerate demos.h.win32
We can regenerate demos.h.win32 with or without the font features demo
by using the regenerate-demos-h-win32 target with or without secifying
the FONT_FEATURES_DEMO=1 flag on the NMake command line.
2021-11-29 12:25:53 +08:00
Chun-wei Fan f8200470da gtk-demo: Split out demo sources from Makefile.am
This way, we can share the demo listing to be used in other build
Makefile-based build systems, such as the auxiliary NMake Makefiles used
to generate the various sources.
2021-11-29 12:25:52 +08:00
Chun-wei Fan c3c759cbdd Visual Studio projects: Define __MSVC_PROJECTS__
...in the libgtk3 project, so that we can automatically link to
harfbuzz.lib if we have a sufficiently-new version of Pango and HarfBuzz
installed, so that the code to enable font features can be linked
properly, even if we don't explicitly put harfbuzz.lib in the list of
libraries that we feed into the linker in the project files.

If one is using pre-Pango-1.44.x and/or pre-HarfBuzz-2.2.0 and intends
to enable font features support, one still must update config.h.win32 to
make sure HAVE_PANGOFT2 and HAVE_HARFBUZZ is defined, and put
pangoft2-1.0.lib, harfbuzz.lib and freetype.lib (or so) in the
"Additional Libraries" under the linker settings in the projects
manually, as required before.
2021-11-29 12:25:52 +08:00
Chun-wei Fan e1422d73b1 gtkfontchooserwidget.c: Always enable font features with later Pango
This is a backport of the code in GTK4 where we can use the font
features that is given to us via HarfBuzz if we have Pango 1.44.x and
HarfBuzz 2.2.0 or later installed, even if we do not have PangoFT2
aavilable.

Since Pango 1.44.x depends on HarfBuzz for all platforms after 1.44.0,
we could take advantage of that and build the support in
GtkFontChooserWidget.

Add a directive that is to be used by Visual Studio compilers via the
Visual Studio projects to link to harfbuzz.lib automatically, so that
this support can be linked properly if we have the required Pango and
HarfBuzz headers and lib's installed.  Meson builds via Visual Studio
should handle this automatically, since pkg-config is being used there.

Since HAVE_PANGOFT2 and HAVE_HARFBUZZ is not defined by default in the
Visaul Studio projects, we will leave it up to the user to enable them
themselves and put in pangoft2-1.0.lib and harfbuzz.lib in the project
settings by themselves, or they could use Meson, as we did before.
2021-11-29 12:25:52 +08:00
Quentin PAGÈS 6c4cc93121 Update Occitan translation 2021-11-28 13:24:15 +00:00
Luca Bacci ee79334a52 Merge branch 'fix-printoperation-win32' into 'gtk-3-24'
gtkprintoperation-win32.c: Fix build on Visual Studio

See merge request GNOME/gtk!4193
2021-11-25 11:33:38 +00:00
Chun-wei Fan dfbcc0849b gtkprintoperation-win32.c: Fix build on Visual Studio
Cast the result of GetWindowLongPtrW() to void * so that we won't get
the C4047 warnings, which are considered an error in building the GTK
stack.
2021-11-25 19:00:22 +08:00
Emmanuele Bassi 34038aaf7d Merge branch 'wip/fix-randr-race-3-24' into 'gtk-3-24'
x11: Trap error when getting CRTC info [3.24]

See merge request GNOME/gtk!4168
2021-11-24 16:48:39 +00:00
Luca Bacci 0e48d8d7e3 Merge branch 'quartz-fix-keyboard-layout-notification' into 'gtk-3-24'
Quartz: Fix race for keyboard layout change notifications

See merge request GNOME/gtk!4190
2021-11-24 15:56:00 +00:00
Luca Bacci 78a0cdde83 Quartz: Fix keyboard layout notification
Register for notifications before initializing keymaps
2021-11-24 16:20:02 +01:00
Luca Bacci c2e6fcc92d Merge branch 'win32-theme-fixes' into 'gtk-3-24'
Win32 theme fixes

See merge request GNOME/gtk!4189
2021-11-23 13:25:08 +00:00
Jaime Velasco Juan 466619f7c1 win32 theme: Draw expander arrow
Better than nothing.
2021-11-23 12:42:41 +01:00
Jaime Velasco Juan 2f30e12de7 win32 theme: Fix unfocused window buttons 2021-11-23 12:35:39 +01:00
Jaime Velasco Juan bfe7a57b76 win32 theme: fix disabled GtkEntry style 2021-11-23 12:27:47 +01:00
Jaime Velasco Juan f9d82e965e win32 theme: Fix levelbar and tweak progressbar
Both have a similar look now
2021-11-23 12:05:51 +01:00
Luca Bacci 8d654527ab Merge branch 'ole2-dnd-ipc-window-follows-the-cursor-monitor' into 'gtk-3-24'
GdkWin32: Make OLE2 DND work on monitors with different OS scales

See merge request GNOME/gtk!4155
2021-11-18 21:57:36 +00:00
Luca Bacci 661f23d337 Merge branch 'gdk-win32-custom-print-dialog-widget-measurement' into 'gtk-3-24'
Fix measurement of custom widget in win32 print dialog

See merge request GNOME/gtk!4159
2021-11-18 19:02:58 +00:00
Luca Bacci 1650b4b205 Win32: Fix print dialog custom widget measurement 2021-11-17 15:41:13 +01:00
Jonas Ådahl 102341ae9f x11: Trap error when getting CRTC info
This should fix a race happening when RANDR changes quickly, e.g. during
unit testing where tests change monitor configurations rapidly.
2021-11-17 11:14:00 +01:00
Aleksandr Melman 2d67c74ea2 Update Russian translation 2021-11-16 21:52:25 +00:00
Matthias Clasen 7f8efb6b8d Merge branch 'gtk-3-24_inkscape2932' into 'gtk-3-24'
Backport css: Avoid a crash while parsing radial gradients

See merge request GNOME/gtk!4161
2021-11-16 21:30:10 +00:00
Matthias Clasen bac491b0b5 Merge branch 'compose-cache-symlinks' into 'gtk-3-24'
[GTK3 backport] composetable: invalidate cache based on symlink mtime too

See merge request GNOME/gtk!4165
2021-11-16 21:29:38 +00:00
Naïm Favier 1284a804f1 composetable: invalidate cache based on symlink mtime too
When the compose file is a symbolic link, take the link itself's
modification time into account (in addition to its target's) in
determining whether to invalidate the compose cache.

This is useful e.g. on NixOS systems where the compose file might point
to a store path with an irrelevant modification time, and we want the
cache to expire when the symlink itself changes.

(cherry picked from commit 22f5236943)
2021-11-16 18:30:02 +01:00
Matthias Clasen 60ec8dbd69 css: Avoid a crash while parsing radial gradients
has_size does not imply that sizes[0] is != NULL.

(cherry picked from commit aceba7484f)
2021-11-16 12:04:54 +11:00
Luca Bacci 4d40300d8a GdkWin32: Make OLE2 DND work in monitors with different OS scales
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3734
2021-11-13 19:41:58 +01:00
Luca Bacci a174568ef9 Merge branch 'gtk3-dnd-find-dest-window-fix' into 'gtk-3-24'
GdkWin32: Fix DND destination window search

See merge request GNOME/gtk!3885
2021-11-13 14:51:49 +00:00
Quentin PAGÈS 7520524aed Update Occitan translation 2021-11-10 18:17:30 +00:00
Milo Casagrande 02381e49d7 Update Italian translation 2021-11-09 08:43:19 +00:00
Luca Bacci ae8fde9630 Merge branch 'win32-gl-reorg-3' into 'gtk-3-24'
GDK-Win32: Reorganize backend GL code and add fallback mode

See merge request GNOME/gtk!3859
2021-11-06 11:21:43 +00:00
Matthias Clasen 3c83854962 Merge branch 'wip/carlosg/no-ping-serials-for-input-3-24' into 'gtk-3-24'
[3.24] gdk/wayland: Do not use xdg_wm_base.ping serials as "user input" serials

See merge request GNOME/gtk!4123
2021-11-06 02:20:12 +00:00
Luca Bacci 4067e46e20 Merge branch 'vs2022-vcproj' into 'gtk-3-24'
Visual Studio projects: "Add" Visual Studio 2022 projects

See merge request GNOME/gtk!4064
2021-11-05 17:38:08 +00:00
Carlos Garnacho d81f58bc09 gdk/wayland: Do not use xdg_wm_base.ping serials as "user input" serials
Ping/pong serials are not meant to be interpreted as user input serials
(e.g. those given back later to the compositor on grabs). As a matter
of fact, Mutter uses a different count (i.e. timestamps) in these, so
using these serials may confuse the compositor into denying certain
operations like DnD.
2021-11-05 14:43:23 +01:00
Goran Vidović 6b980e5ce8 Update Croatian translation 2021-10-29 15:24:44 +00:00
Matthias Clasen 660cbee51e Merge branch 'fix-win11-sdk-3' into 'gtk-3-24'
Fix building against the Windows 11 SDK (GTK+-3.x)

See merge request GNOME/gtk!4062
2021-10-28 16:47:15 +00:00
Matthias Clasen a12769a2c4 Merge branch 'fix-recent-filter-uri' into 'gtk-3-24'
GtkRecentFilter: Do not unset the uri if it is needed

See merge request GNOME/gtk!4080
2021-10-27 15:03:40 +00:00
Rūdolfs Mazurs 20be04f7ac Update Latvian translation 2021-10-25 16:50:04 +00:00
Goran Vidović cdab711ec2 Update Croatian translation 2021-10-21 10:38:42 +00:00
Goran Vidović 595531eba5 Update Croatian translation 2021-10-21 10:37:02 +00:00
Gaël Bonithon 90ca7fb3c9 GtkRecentFilter: Do not unset the uri if it is needed 2021-10-19 20:28:06 +02:00
Matthias Clasen 1e72dac839 Merge branch 'wip/hadess/quiet-broadway-gtk3' into 'gtk-3-24'
broadway: Quiet initialisation failures

See merge request GNOME/gtk!4052
2021-10-19 02:45:56 +00:00
Matthias Clasen 25d01b7610 Merge branch 'wip/fix-remap-up-left-popup' into 'gtk-3-24'
window/wayland: Reset position when hiding popup

See merge request GNOME/gtk!3913
2021-10-18 22:34:39 +00:00
Jonas Ådahl 0f871584fc Merge branch 'surfaceloop' into 'gtk-3-24'
Check if size changed before hiding a surface

See merge request GNOME/gtk!3944
2021-10-18 14:20:44 +00:00
Luca Bacci d34f4416bd Merge branch 'gdk-win32-ensure-correct-order-of-operations-when-handling-dpi-scale-and-gdk-screen-offset' into 'gtk-3-24'
GdkWin32: Ensure consistent order of operations when handling DPI scale and GDK screen offset

See merge request GNOME/gtk!3931
2021-10-18 11:36:47 +00:00
John Ralls 36315cbe2b [quartz]Use the absolute value of Scale values for CGContextScaleSCM
In macOS-12.sdk CGContextConverSizeToDeviceSpace returns a negative
height and passing that to CGContextScaleCTM in turn causes the cairo
surface to draw outside the window where it can't be seen. Passing the
absolute values of the scale factors fixes the display on macOS 12 without
affecting earlier macOS versions.
2021-10-14 12:45:48 -07:00
Chun-wei Fan 1234b46d3b Visual Studio projects: "Add" Visual Studio 2022 projects
Like the Visual Studio 2012+ projects, copy the Visual Studio 2010
projects and replace the items in there as needed, so that we can
obtain Visual Studio 2022 project files, since they are all in the
MSBuild format.
2021-10-14 10:53:18 +08:00
Chun-wei Fan c4d8575c30 gtk: Fix building version resource on Windows 11 SDK
The rc.exe that comes with the Windows 11 SDK does not allow one to include
winuser.h directly in the .rc scripts, so make sure that we do not try to
generate the final gtk.rc with it, but instead include windows.h with
WIN32_LEAN_AND_MEAN defined.
2021-10-14 10:30:58 +08:00
Chun-wei Fan dceed915e8 gtk/generate-uac-manifest.py: Fix UAC manifest .rc
The resource compiler in the Windows 11 SDK does not allow one to include
winuser.h directly in resource scripts (.rc) with a rather cryptic error
message, so fix generating the .rc file to embed the UAC manifest by including
windows.h with WIN32_LEAN_AND_MEAN instead.
2021-10-13 11:38:26 +08:00
Sveinn í Felli 49374551e8 Update Icelandic translation 2021-10-12 22:45:33 +00:00
Rafael Fontenelle 888fe92051 Update Brazilian Portuguese translation 2021-10-12 17:37:09 +00:00
Bastien Nocera e7679635b0 broadway: Quiet initialisation failures
Broadway is the only GTK+ backend that throws an error on stderr for a
"display server" connection failure.

This causes problems when gtk_init_check() is used and unexpected error
output is generated such as with hotdoc, which fails when generating a
GTK plugin's documentation instead of overlooking the issue.

"Unable to init server: Could not connect: Connection refused"
2021-10-11 20:29:40 +02:00
Ting-Wei Lan d90efbd9be Merge branch 'wip/lantw/GDK-Win32-Fix-MinGW-autotools-build' into 'gtk-3-24'
GDK/Win32: Fix MinGW autotools build

See merge request GNOME/gtk!3991
2021-10-10 10:33:42 +00:00
Emmanuele Bassi 0d0c9c918e Merge branch 'filesearch3' into 'gtk-3-24'
searchenginemodel: finalize search results

See merge request GNOME/gtk!4030
2021-10-04 14:07:13 +00:00
Pierre Ossman aca83684ed searchenginemodel: finalize search results
It is necessary to signal the search engine that we are finished and
that we found something for it to reliably show the results. It would
sometimes work anyway since it is sufficient if any backend signals
completion. However if GtkSearchEngineModel was the only backend
returning results then things would break.
2021-10-04 15:41:42 +02:00
Emmanuele Bassi d4376ec0db Merge branch 'gtk3-debian-ci' into 'gtk-3-24'
ci: Update Debian image to current stable

See merge request GNOME/gtk!4031
2021-10-04 12:50:35 +00:00
Emmanuele Bassi 41a2f5cdc0 ci: Update the Debian CI image 2021-10-04 13:24:32 +01:00
Emmanuele Bassi 7e2917e19c ci: Update Debian image to current stable
This is required by a change in the certificates that makes it
impossible to run `git clone` on a GNOME GitLab repository in a CI
pipeline.
2021-10-04 13:23:32 +01:00
Emmanuele Bassi 3935a4a44a Merge branch 'gtk3-selection-docs' into 'gtk-3-24'
docs: Fix gtk_tree_selection_get_selected()

See merge request GNOME/gtk!4012
2021-09-30 00:12:20 +00:00
Emmanuele Bassi 1900fc2f80 docs: Fix gtk_tree_selection_get_selected_rows()
Reword the description and return value so that they look better on
docs.gtk.org.
2021-09-30 00:38:17 +01:00
Emmanuele Bassi 4f54fcd288 docs: Fix gtk_tree_selection_get_selected()
Use the proper sigils for enumeration values and constants. The
description is also barely intelligible.
2021-09-30 00:35:11 +01:00
Sveinn í Felli d5657e2c55 Update Icelandic translation 2021-09-29 12:08:08 +00:00
Danial Behzadi d1b90752ca Update Persian translation 2021-09-25 10:48:05 +00:00
Ting-Wei Lan 26d61e2abc GDK/Win32: Fix MinGW autotools build
MinGW-w64 CRT provides no 'hid.lib' file. Instead, it has 'libhid.a'
which can be linked with '-lhid' linker argument.

Also, we have to declare the '_LIBADD' variable and add 'LDADDS' to it,
or 'LDADDS' won't do anything for the build.
2021-09-24 00:06:51 +08:00
Luca Bacci 378ed797a4 GdkWin32: Initialize _gdk_offset_x / _gdk_offset_x to unscaled values
Note that gdk_monitor_get_geometry () returns DPI-scaled values,
while the screen offset should be unscaled, as scales are properties
of indivdual monitors.
2021-09-23 17:37:54 +02:00
Luca Bacci 876a2e6225 GdkWin32: Ensure a consistent order of operations when handling DPI scale and GDK screen offset 2021-09-23 17:37:45 +02:00
Luca Bacci cac1c7cd22 GdkWin32: Use a signed integral type for the DPI scale
An arithmetic operation involving a signed and an unsigned operand
of the same rank will have both operands converted to *unsigned*.
That's an issue if the signed operand actually has a negative value.

That was causing issues with the handling of monitor geometries that
had negative x / y positions.
2021-09-23 15:28:42 +02:00
Matthias Clasen 8d04980f38 Merge branch 'gtk-3-24' into 'gtk-3-24'
Do not require wayland-protocols as dependency in the .pc files

See merge request GNOME/gtk!3961
2021-09-16 18:37:36 +00:00
muradm 6efcbf4634 Do not require wayland-protocols as dependency in the .pc file
Basically, I was building some packages on Guix. I figured out that
wayland-protocols was listed among propagated-inputs for gtk+ package
(gtk-3-24). propagated-inputs holds a list of runtime dependencies,
that should be available to any other package that depends on gtk+.
While discussing we clarified that wayland-protocols is not runtime
dependency. So I moved it to native-inputs of gtk+ package, which
means that, this dependency will be available only to gtk+ package and
only at build time. Once moved, building of other applications that
depening on gtk+ started to fail.

Investigation showed that, all .pc (pkg-config) files prepared by gtk+
package, was including:

Requires.private: ... wayland-protocols ...

Since it becomes requirement, other applications was failing with
missing dependency wayland-protocols of dependency gtk+, for instance:

-- Checking for module 'gtk+-3.0'
--   Package 'wayland-protocols', required by 'gdk-3.0', not found

While actually wayland-protocols is not even a build time dependency
of application that depends on gtk+. Advertisement of such
requirement, is a bit misleading, because one does not need it at
runtime, especially applications based on gtk.
2021-09-16 20:44:39 +03:00
Fabio Tomat 5cccc2d975 Update Friulian translation 2021-09-16 12:15:24 +00:00
Matthias Clasen 36b4cd11b6 Merge branch 'reset-source-id' into 'gtk-3-24'
GtkClipboard: Reset a source id to prevent double free

See merge request GNOME/gtk!3954
2021-09-15 12:23:15 +00:00
Daniel Mustieles df1e6dc45d Updated Spanish translation 2021-09-15 08:29:52 +02:00
Gaël Bonithon 599ab80c63 GtkClipboard: Reset a source id to prevent double free
Fixes #4253.
2021-09-15 07:37:46 +02:00
Ronan Pigott 23c7e6e13b Check if size changed before hiding a surface
Commit 68188fc948 introduces a workaround for clients that try to
change the size of a popup after it is created, but inadvertently
introduces an infinite loop of surface creation when the popup enters
two or more wl_outputs with different scales on creation.

This commit checks if the size actually changed before applying the
workaround and avoids the loop.
2021-09-13 17:14:14 -07:00
Alan Mortensen 1382e54ef6 Updated Danish translation of gtk-properties 2021-09-13 20:48:53 +02:00
Alan Mortensen 53fc584988 Updated Danish translation 2021-09-13 20:48:50 +02:00
Matthias Clasen 3567a74dd8 Merge branch 'ownoutput' into 'gtk-3-24'
Ignore wl_output globals not bound by us

See merge request GNOME/gtk!3941
2021-09-13 16:48:40 +00:00
Ronan Pigott 9a4e328928 Ignore wl_output globals not bound by us
Gdk doesn't know the scale of output globals it didn't bind. This
keeps them from entering the output list and triggering erroneous
changes in surface scales.
2021-09-13 03:08:49 -07:00
Luca Bacci c71dca236c Use WindowFromPoint to find DND target window 2021-09-10 13:59:27 +02:00
John Ralls a752e33838 Update Quartz version detection for macOS 12. 2021-09-08 18:01:50 -07:00
Luna Jernberg b5a2d29538 Update Swedish translation 2021-09-08 19:53:47 +00:00
John Ralls e9d4b0dda0 Move includes of gdkinternal-quartz.h from headers to impl files.
gdkinternal-quartz.h isn't installed but the headers that included
it are, which which would cause the build to fail if an external
project included one of them.

Also changed the includes in gdkinteral-quartz.h to local for
faster loading.
2021-09-07 11:08:11 -07:00
John Ralls 7e732caa1e Let gdkquartz-cocoa-access.h find gdkquartz.h during build.
gdkquartz.h is installed in $PREFIX/include/gdk but is in gdk/quartz
in the source tree. Use "gdkquartz.h" to find it in both places.
2021-09-07 10:39:37 -07:00
Chun-wei Fan bcdbb93296 GDK-Win32: Add fallback mode to GLES
...if GLES (libANGLE) support was enabled in the build.  This way, we can
check whether the GL driver is capable enough to support the OpenGL
features that we use in GTK.  If the driver is not capable enough, and
GLES support is enabled, we can try to create the GdkGLContext again as a
GLES context.
2021-09-06 19:36:14 +08:00
Chun-wei Fan 97d3024701 gdk/win32: Some further small GL-related cleanup
Remove from gdkglcontext-win32.h items that aren't really necessary, and
just include gdkglcontext-win32.h where applicable.
2021-09-06 19:36:13 +08:00
Chun-wei Fan 9e949209a1 GDK-Win32: Reorganize gdkgdlcontext-win32.c
Group the WGL-specific code and GLES-specific code together, so that we
can reduce the number of #ifdef ... in the code, to make the code more
readable and easily maintained.  This will pave the way to add a
fallback mode to use libANGLE (OpenGL/ES) in case the Desktop OpenGL
support is inadequte, if OpenGL/ES support is enabled in the build.

This is somewhat based on the updates that were done in GTK master, so
we are using one subclass for WGL-based GdkGLContexts, and another for
GLES-based GdkGLContexts.

Also remove the underscores in many of the functions in
gdkglcontext-win32.*.

Clean up the code a bit as a result.
2021-09-06 19:36:13 +08:00
Goran Vidović 543b7defec Update Croatian translation 2021-09-04 17:15:55 +00:00
Boyuan Yang f7713bde1a Update Chinese (China) translation 2021-09-04 16:20:22 +00:00
Dz Chen 499af07d2c Update Chinese (China) translation 2021-09-04 15:50:14 +00:00
Changwoo Ryu b4acfaee1c Update Korean translation 2021-09-04 14:54:31 +00:00
Jiri Grönroos c6d2d97774 Update Finnish translation 2021-09-02 16:18:44 +00:00
Jonas Ådahl d74b01636b window/wayland: Reset position when hiding popup
When a popup is remapped, if the GdkWindow::x/y position is negative,
some best-effort hueristics used to ignore internal X11-style hackery
windows incorrectly scooped up remapped popup windows.

Avoid these hueristics by resetting the x and y fields of GdkWindow to 0
whe hiding a popup. It'll then appear as if it was newly initialized,
and escape the mentioned hueristics.

Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4071
2021-09-02 10:24:38 +02:00
Nathan Follens 9ff2a9ab9b Update Dutch translation 2021-08-31 15:30:14 +00:00
eshagh shahidani 7691c94a37 Update Persian translation 2021-08-31 14:41:54 +00:00
Baurzhan Muftakhidinov 659292f9ba Update Kazakh translation 2021-08-29 07:38:36 +00:00
Claude Paroz e2218cbb4d Updated French translation 2021-08-28 09:13:25 +02:00
Marek Černocký 93c4359ec0 Updated Czech translation 2021-08-26 14:33:08 +02:00
Fran Dieguez 82c199db00 Update Galician translation 2021-08-25 06:04:44 +00:00
Balázs Meskó 79fc2631c5 Update Hungarian translation 2021-08-23 05:54:19 +00:00
Matthias Clasen f6a82cb658 Merge branch 'cherry-pick-5044031b' into 'gtk-3-24'
Merge branch 'wip/kalev/gcc-11' into 'master'

See merge request GNOME/gtk!3870
2021-08-22 19:53:16 +00:00
Matthias Clasen 26e9919bf6 Merge branch 'gtk3-docs-fixes' into 'gtk-3-24'
docs: Escape the XML tags in the Widget class description

See merge request GNOME/gtk!3869
2021-08-22 19:13:57 +00:00
Matthias Clasen b4e110920a Merge branch 'wip/kalev/gcc-11' into 'master'
Avoid diagnostics for gcc-11 false positive out of bounds accesses

See merge request GNOME/gtk!3064

(cherry picked from commit 5044031b53)

c514c41d Avoid diagnostics for gcc-11 false positive out of bounds accesses
2021-08-22 19:03:23 +00:00
Emmanuele Bassi ff46ea64c4 docs: Escape the XML tags in the Widget class description
While gtk-doc doesn't care, this isn't really valid Markdown as the
GtkBuilder custom XML tags will be considered valid markup and embedded
as they are, breaking the HTML output.
2021-08-22 19:38:44 +01:00
Asier Sarasua Garmendia 4868656ebb Update Basque translation 2021-08-21 08:43:24 +00:00
Matthias Clasen 2dee749632 Merge branch 'accepts_dnd_from_finder' into 'gtk-3-24'
accepts NSPasteboardTypeFileURL as "text/uri-list".

See merge request GNOME/gtk!3846
2021-08-20 13:23:07 +00:00
Hiroyuki Ito ec4d27a4fc accepts NSPasteboardTypeFileURL as "text/uri-list". 2021-08-14 09:38:36 +09:00
Danial Behzadi fe19b20492 Update Persian translation 2021-08-07 14:42:26 +00:00
Мирослав Николић 94f86a2fb6 Update Serbian translation 2021-08-04 17:26:12 +00:00
Matthias Clasen 3a8fab6879 Merge branch 'luizfls-gtk-3-24-patch-58754' into 'gtk-3-24'
gtkwindow.c: Fix typo in `gtk_window_unstick` documentation

See merge request GNOME/gtk!3798
2021-07-29 21:27:41 +00:00
Luiz Silva b04bd31718 Fix typo in gtk_window_unstick documentation 2021-07-29 15:03:34 +00:00
Matthias Clasen d450cbe517 Merge branch 'opengl.win32.fixes' into 'gtk-3-24'
GDK/Win32: Fix up OpenGL a bit (part of !3767 for GTK3)

See merge request GNOME/gtk!3792
2021-07-28 17:55:51 +00:00
Matthias Clasen d86ce85267 Merge branch 'fix-cxo-system-build' into 'gtk-3-24'
gdkdevicemanager-win32.c: Fix build

See merge request GNOME/gtk!3791
2021-07-28 17:55:01 +00:00
Chun-wei Fan a4066188a2 Merge branch 'msvc-prototype' into 'gtk-3-24'
config.h.win32.in: Define HAVE_SETUP_DI_GET_DEVICE_PROPERTY_W

See merge request GNOME/gtk!3793
2021-07-28 07:22:22 +00:00
Chun-wei Fan b81b9311f6 config.h.win32.in: Define HAVE_SETUP_DI_GET_DEVICE_PROPERTY_W
... on Visual Studio, so that we will not have warnings from defining
the prototype SetupDiGetDevicePropertyW() unnessarily.
2021-07-28 15:00:38 +08:00
Chun-wei Fan 15817973d7 GDK/Win32: Fix up OpenGL a bit
Like the recent updates in GTK4, the HWND that we use to obtain the HDC
that we need for OpenGL/GLES operations should really be tied to
GdkWindow, not GdkDisplay, as that is where the Win32 HWND where we
originate from is located, so stop storing the GL HWND in
GdkWin32Display, but just grab them from the GdkWindow that is bound to
the GdkGLContext.

We are more conservative about freeing up GL resources in GTK3, so we
will continue to call ReleaseDC() as we did before.
2021-07-28 11:28:17 +08:00
Chun-wei Fan 71aa479d16 gdkdevicemanager-win32.c: Fix build
Fix the call to p_WTSetA, as we should be passing in a HCTX, not a
HCTX*.  Also clean up things a bit.
2021-07-28 09:58:06 +08:00
Matthias Clasen 998f4f32cc Merge branch 'wip/carlosg/sequence-accepted-in-group-3-24' into 'gtk-3-24'
gtkgesture: Apply gesture group state after setting up sequence

See merge request GNOME/gtk!3774
2021-07-21 12:49:22 +00:00
Carlos Garnacho 944a75659c gtkgesture: Apply gesture group state after setting up sequence
When a new sequence is added to a GtkGesture, its state is looked
in other gestures in the same group, and made to match in this
gesture. This however happened a bit too early, before the
gesture touchpoint was fully set up. As this may result in signal
emission and whatnot, it's a good idea to make it happen with a
fully set up touchpoint.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3946

(Cherry-picked from commit 53df32e6cf)
2021-07-21 14:27:28 +02:00
Matthias Clasen bc1ab236bd Merge branch 'BUG_filechooserbutton_remote_GTK3' into 'gtk-3-24'
FileChooserButton: query 'display name' also for unbookmarked files

See merge request GNOME/gtk!1724
2021-07-20 18:39:44 +00:00
Benjamin Otte adf9578e9c Merge branch 'ci-default-settings' into 'gtk-3-24'
reftests: Enforce default settings

See merge request GNOME/gtk!3768
2021-07-19 17:30:57 +00:00
Matthias Clasen b541ad48d1 reftests: Enforce default settings
Set all settings to their default values, so we
are less dependent on the environment to be set
up just right. In particular, this fixes animations
being disabled when we happen to run in a vm.
2021-07-19 13:10:31 -04:00
Matthias Clasen 557c3d1d62 Merge branch 'pango-main-for-3' into 'gtk-3-24'
Use pango from the main branch

See merge request GNOME/gtk!3761
2021-07-17 13:05:13 +00:00
Philipp Kiemle da4769ec81 Update German translation 2021-07-16 22:17:16 +00:00
Matthias Clasen fe14b9d311 Use pango from the main branch
Change the Pango subproject to use the main branch.

This depends on
https://gitlab.gnome.org/GNOME/pango/-/merge_requests/379
2021-07-16 13:21:09 -04:00
Chun-wei Fan 71d7054ff7 Merge branch 'wintab-set-cxo-system-option' into 'gtk-3-24'
Wintab: Set the CXO_SYSTEM option

See merge request GNOME/gtk!3644
2021-07-12 01:52:57 +00:00
John Ralls 6128492cc0 [quartz] Fix incorrect include path for gdkquartz.h 2021-07-10 13:57:11 -07:00
Chao-Hsiung Liao 7912714337 Update Chinese (Taiwan) translation 2021-07-10 08:40:51 +00:00
Chao-Hsiung Liao 0c4a627199 Update Chinese (Taiwan) translation 2021-07-10 08:36:42 +00:00
Matthias Clasen a8c83fe3bc Merge branch 'gdkkeys' into 'gtk-3-24'
gdkkeys-win32.c: fix initialisation of key_state in update_keymap

See merge request GNOME/gtk!3741
2021-07-09 10:58:09 +00:00
Chun-wei Fan 2f176b566e Merge branch 'fix-winpointer-h-make-dist' into 'gtk-3-24'
Add winpointer.h to Makefile.am sources list

See merge request GNOME/gtk!3743
2021-07-09 09:37:24 +00:00
Luca Bacci de31fdcc68 Add winpointer.h to Makefile.am sources list 2021-07-09 09:00:36 +02:00
Jeremy Tan 7303854310 gdkkeys-win32.c: fix initialisation of key_state in update_keymap
It apparently worked by chance in the past, but now causes e.g.
alphanumeric characters to be interpreted as half-width katakana
when using the Japanese IME.
2021-07-09 12:35:44 +08:00
Matthias Clasen d4e2d05cd9 3.24.30 2021-07-08 10:02:44 -04:00
Źmicier Turok 2169161312 Update Belarusian translation 2021-07-06 06:21:07 +00:00
Matthias Clasen 635591c4d6 Merge branch 'pgriffis/remove-cloudprint-gtk3' into 'gtk-3-24'
Remove Google Cloud Print backend (GTK3)

See merge request GNOME/gtk!3730
2021-07-05 20:21:40 +00:00
Patrick Griffis c77ea5101e Remove Google Cloud Print backend
This service was shut down at the start of 2021
2021-07-05 10:52:31 -05:00
Robert Mader 3e1214bda4 Merge branch 'gtk-3-24-pointer-gestures-version' into 'gtk-3-24'
gdk/wayland: Fix pointer-gestures version selection

See merge request GNOME/gtk!3696
2021-07-05 13:16:18 +00:00
Vlad Zahorodnii 92ba4bf396 gdk/wayland: Fix pointer-gestures version selection
version == GDK_ZWP_POINTER_GESTURES_V1_VERSION will fail if the
compositor implements version 2 of pointer-gestures-v1.
2021-07-05 14:50:59 +02:00
Matthias Clasen 1fa2969a05 Merge branch 'add-support-for-windows-pointer-input-stack-apis' into 'gtk-3-24'
Add support for Windows Pointer Input Stack

See merge request GNOME/gtk!1563
2021-07-03 16:22:33 +00:00
Luca Bacci 712721b60a Add support for Windows Pointer Input Stack
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/1563
2021-07-03 16:04:28 +02:00
Alexey Rubtsov 01eb5d41cf Update Russian translation 2021-06-28 11:10:59 +00:00
Chun-wei Fan 88730e81c1 Merge branch 'fix-issue-2019' into 'gtk-3-24'
[Gtk3] GdkWin32: Remove klassTEMPSHADOW

See merge request GNOME/gtk!2749
2021-06-22 06:51:56 +00:00
Matthias Clasen a9c8b879a4 Merge branch 'wip/otte/for-3-24' into 'gtk-3-24'
cellarea: Don't shrink area too much

See merge request GNOME/gtk!3671
2021-06-16 00:13:43 +00:00
Benjamin Otte 4ba89f25b8 cellarea: Don't shrink area too much
Do not compute rectangles with negative width/height. This avoids
assertion failures further down when those rectangles were actually
checked.

https://bugzilla.redhat.com/show_bug.cgi?id=1962215
2021-06-15 19:34:37 +02:00
Matthias Clasen 447ab4ad0e Merge branch 'quartz-fixes' into 'gtk-3-24'
quartz: fix compilation on macOS 10.10

See merge request GNOME/gtk!3654
2021-06-15 11:11:57 +00:00
Emin Tufan Çetin 47959b5b4a Update Turkish translation 2021-06-15 08:59:44 +00:00
Tom Schoonjans 66b533408d quartz: fix compilation on macOS 10.10 2021-06-12 06:10:54 +01:00
Luca Bacci f67bf8d892 Wintab: Set the CXO_SYSTEM option
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3860
2021-06-11 19:52:44 +02:00
Luca Bacci af747315d7 Wintab: set the right device field in the event structure
Even when sends_core is FALSE

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3860
2021-06-11 19:52:43 +02:00
Emmanuele Bassi 90e8d7ff1a Merge branch 'gtk3-a11y-leak' into 'gtk-3-24'
a11y: Fix ref counting in tree views

See merge request GNOME/gtk!3660
2021-06-11 14:12:10 +00:00
Matthias Clasen 21f8098261 a11y: Plug a memory leak with treeviews
We need to explicitly remove the children from
a GtkContainerCellAccessible, since they otherwise
keep the parent alive.

Fixes: #3981
2021-06-11 08:55:48 -04:00
Matthias Clasen d4f62b44d4 a11y: Fix ref counting in tree views
GtkContainerCellAccessible wasn't unsetting accessible
parents. Fix that.

By itself, this doesn't help for freeing a memory leak,
since AtkObject keeps a ref on its parent, so we never
free the GtkContainerCellAccessible as long as it has children.
2021-06-11 08:53:46 -04:00
Matthias Clasen 6d6d76ecbb Merge branch 'arb_fbo' into 'gtk-3-24'
Switch to GL_ARB_framebuffer_object

See merge request GNOME/gtk!2076
2021-06-08 14:59:05 +00:00
Emmanuele Bassi 43a8655ad0 Merge branch 'glib-main-gtk-3-24' into 'gtk-3-24'
subprojects: Use GLib main branch (3.24)

See merge request GNOME/gtk!3643
2021-06-07 15:06:48 +00:00
Philip Withnall df9fe56264 subprojects: Use GLib main branch
GLib upstream has renamed its `master` branch to `main`.

See https://gitlab.gnome.org/GNOME/glib/-/issues/2348.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2021-06-07 14:59:09 +01:00
Aurimas Černius bfa763a24a Updated Lithuanian translation 2021-06-06 22:52:49 +03:00
Matthias Clasen c70d23b61f Merge branch 'backport-mr2884-to-gtk-3-24' into 'gtk-3-24'
Backport !2884 to GTK3

See merge request GNOME/gtk!3632
2021-06-06 12:33:08 +00:00
Matthias Clasen 7773c423aa Merge branch 'provide-built-dlls-as-gitlab-ci-artifacts' into 'gtk-3-24'
Provide built DLLs as Gitlab CI artifacts

See merge request GNOME/gtk!3633
2021-06-06 12:32:33 +00:00
Rafael Fontenelle 0ba8d3f87e Update Brazilian Portuguese translation 2021-06-06 08:48:49 +00:00
Matthias Clasen 906eba7288 Merge branch 'imcontext-ignore-more-3' into 'gtk-3-24'
imcontext: Ignore more keysyms

See merge request GNOME/gtk!3636
2021-06-05 02:08:18 +00:00
Matthias Clasen d7196e5ea8 imcontext: Ignore more keysyms
It finally dawned on my that #3673 is just another
case of unexpected keysyms getting sent our way via
fringe XKB features.

Ignore them all!
2021-06-04 21:30:36 -04:00
Luca Bacci a14e5778ff Provide built DLLs as Gitlab CI artifacts 2021-06-04 22:42:13 +02:00
Luca Bacci 547ea8b073 Backport 'fix integer overflow in monitor refresh rate calculation' to GTK3
Original MR by Volker Rümelin.

See https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/2884
2021-06-04 17:44:49 +02:00
Daniel Șerbănescu 5aa878d8e5 Update Romanian translation 2021-06-02 10:03:45 +00:00
Matthias Clasen 854343f8aa Merge branch 'screensaver-async-3' into 'gtk-3-24'
gtkapplication-dbus: Fetch inital screen saver state async

See merge request GNOME/gtk!3614
2021-06-01 19:10:59 +00:00
Guido Günther 72ab4c46ed gtkapplication-dbus: Fetch inital screen saver state async
Avoid a sync call that can make the application block for no good
reason.

Fixes 6f6b5faaa2
2021-06-01 14:32:58 +02:00
Bruce Cowan 1308bc6131 Update British English translation 2021-05-30 11:05:08 +00:00
Piotr Drąg aeecafc11e Update Polish translation 2021-05-30 13:00:23 +02:00
Jordi Mas 5b8eca222c Update Catalan translation 2021-05-28 22:29:32 +02:00
Daniel Mustieles e6676432cd Updated Spanish translation 2021-05-27 12:16:11 +02:00
Kukuh Syafaat 1e72ea5a92 Update Indonesian translation 2021-05-27 02:52:04 +00:00
Hugo Carvalho 8c97f0832c Update Portuguese translation 2021-05-26 16:53:18 +00:00
Matej Urbančič f9fe28cece Update Slovenian translation 2021-05-25 19:45:00 +00:00
Matthias Clasen f64f335bd6 Merge branch 'ignore-nosymbol-press-3-24' into 'gtk-3-24'
imcontext: Ignore NoSymbol key events

See merge request GNOME/gtk!3593
2021-05-25 18:22:04 +00:00
Matthias Clasen 6baf287c5f imcontext: Ignore NoSymbol key events
These can happen with some XKB options.

Fixes: #3973
2021-05-25 13:42:06 -04:00
Yuri Chornoivan 6930749ad5 Update Ukrainian translation 2021-05-25 16:20:44 +00:00
Piotr Drąg 98e5fc81ed Update POTFILES.in 2021-05-25 16:33:30 +02:00
Yuri Chornoivan d2ae457378 Update Ukrainian translation 2021-05-25 13:08:17 +00:00
Emmanuele Bassi 26119e5fc0 Merge branch 'filechooser-a11y' into 'gtk-3-24'
Improve FileChooser a11y

See merge request GNOME/gtk!2721
2021-05-25 12:57:12 +00:00
Matthias Clasen 37477a1210 Merge branch 'fix-im-reset-3-24' into 'gtk-3-24'
imcontextsimple: Fix a possible problem

See merge request GNOME/gtk!3586
2021-05-25 12:40:02 +00:00
Matthias Clasen 0952c11bec imcontextsimple: Fix a possible problem
We were forgetting to handle the compose sequence
case in reset().
2021-05-25 08:07:26 -04:00
Matthias Clasen eff4d45c09 Merge branch 'gtk-3-24+emoji-data-update' into 'gtk-3-24'
Backport Emoji changes to share the same (and newer) emojibase data

See merge request GNOME/gtk!3521
2021-05-14 00:42:04 +00:00
Kjartan Maraas dc5fcd28fd Update Norwegian Bokmål translation 2021-05-12 13:10:23 +00:00
Kjartan Maraas 49a14a25b3 Update Norwegian Bokmål translation 2021-05-12 12:52:53 +00:00
Yann Dirson 50889d7629 GtkFileChooserDialog: give a accessible name the GtkFileChooserWidget
Using pyatspi.utils.findDescendant() on the GtkFileChooserDialog using
just a role would return the Dialog, as they have the same "file
chooser" role.  So we have to give it a name to distinguish between
them.
2021-05-11 19:34:00 +02:00
Yann Dirson 9673b5a749 GtkFileChooserWidget: give accessible names to GtkStack children
Now that an AT can request apparition of the Location field, this
allows to locate it in the a11y tree.
2021-05-11 19:34:00 +02:00
Yann Dirson 50cbb8f9a2 GtkFileChooserWidget: export a11y action "show_location"
Note that this changes the accessible role of the widget to "file
chooser" instead of "filler".
2021-05-11 19:34:00 +02:00
Yann Dirson 813965fbc5 GtkFileChooserWidget: add a couple of accessible names in .ui file 2021-05-11 19:34:00 +02:00
Quentin PAGÈS 42a69cce2a Update Occitan translation 2021-05-10 19:56:15 +00:00
Emmanuele Bassi 51198cb1e9 Merge branch 'mg/iterator' into 'gtk-3-24'
Hoist iterator variable definition outside of for loop

See merge request GNOME/gtk!3527
2021-05-07 12:27:07 +00:00
Mosè Giordano fa68804a5b Hoist iterator variable definition outside of for loop
This is compliant with pre-C99 standard.
2021-05-07 12:47:05 +01:00
Emmanuele Bassi ae0c559c21 Merge branch 'mg/macosx-version-max-allowed' into 'gtk-3-24'
Fix value of `MAC_OS_X_VERSION_MAX_ALLOWED`

See merge request GNOME/gtk!3526
2021-05-07 11:14:18 +00:00
Mosè Giordano 0e14822a22 Fix value of MAC_OS_X_VERSION_MAX_ALLOWED 2021-05-07 11:46:47 +01:00
Marco Trevisan (Treviño) 3177a3b42b emoji: Update data to CLRD v39
This is based on version 6.2.0 of emojibase, containing CLRD 39

http://cldr.unicode.org/index/downloads/cldr-39
https://github.com/milesj/emojibase/blob/b3c9a78/packages/data/CHANGELOG.md
2021-05-06 16:04:25 +02:00
Marco Trevisan (Treviño) 247ed3d14a gtkemojichooser: Use retrocompatible format for saving recent-emoji
Given that the format changed, not to break current user history we can
keep using the old format for saving and reading the emoji-recent
gsettings key, by converting the new data to the old one at save time.

We loose information about the short name (not really relevant), even it
could be saved using the first keyword, but this isn't really relevant.
2021-05-06 16:04:25 +02:00
Marco Trevisan (Treviño) a1aecd26d5 gtk: Include emoji data when using autotools and msvc build systems
Differently from the meson case, here we just include the emoji data
files into the global gresources file, get_emoji_data() supports this
and it's just easier to handle in these build systems.
2021-05-06 16:03:11 +02:00
Marco Trevisan (Treviño) accb8e3173 emoji: Use a portable and configuration-dependent path to load the data
Load the emojis data in all the platforms, respecting the configured
GTK_DATA_PREFIX
2021-05-06 15:57:50 +02:00
Matthias Clasen 1a4e368c7e Redo the handling of Emoji data
Use the data files from https://github.com/milesj/emojibase.git
as source for our Emoji data. Slightly change our data format by
adding a group to each item, in both the Emoji data and in the
setting for recent-emoji.

Install translated versions of the data as separate resource
bundles in $prefix/gtk-4.0/emoji, and load them when appropriate.

Currently, we have data for de, en, es, fr, zh, with data taken
from Unicode 13 and CLDR 13.

Fixes: #950 #1511
2021-05-06 15:36:27 +02:00
Matthias Clasen 100ee4ce16 Emoji: Drop the shortname field from emoji.data
Match the name for Emoji completion, and display
it too. 'man worker' looks a lot more natural in
the UI than ':man_worker:'.
2021-05-06 05:22:27 +02:00
Matthias Clasen 32e972e95b Do case-folding and tokenization when creating emoji.data
We can avoid doing the extra work of case-folding and
tokenization whenever we filter in the Emoji chooser.
2021-05-06 05:22:27 +02:00
Matthias Clasen 78cc9113c1 emoji: Add keywords to the data
And use them for matching in the Emoji chooser.
2021-05-06 05:22:26 +02:00
Matthias Clasen cb32ff5b18 emoji: Some work on the conversion tool
Document the variant format, and write out json
format if asked to.
2021-05-06 05:22:26 +02:00
Matthias Clasen bfad7693bf emojichooser: Allow inserting multiple Emoji
Don't close the Emoji chooser when the Control
key is held while clicking. So you can insert
multiple Emoji without having to reopen the
chooser every time.

Fixes: #1002
2021-05-06 05:22:26 +02:00
Matthias Clasen 71bcecbc8d emoji chooser: Fix handling of no recent Emoji
If the recent section is empty, we want to hide
it, make its button insensitive, and select the
next section, initially. This was not working
properly, since nothing was ever setting the
section box to invisible.
2021-05-06 05:22:26 +02:00
Marco Trevisan (Treviño) 30835d7a86 gtkemojichooser: Do not leak the data loaded from resources
This was part of commit 67e6d1087 but not of gtk3 branch in commit
9cde2186.
2021-05-06 05:22:26 +02:00
Matthias Clasen 0fc99afa25 Merge branch 'wl-phys-transform-3-24' into 'gtk-3-24'
gdk/wayland: Take transform into account when setting physical size

See merge request GNOME/gtk!3517
2021-05-05 18:38:34 +00:00
Guido Günther 8c0b11998d gdk/wayland: Take transform into account when setting physical size
Width and height of a GdkMonitor are derived via wl_output which
talks about physical dimensions of a device and compositors usually
implement this as the untransformed values (e.g. weston, wlroots).

Since the GTK client has no way to figure out if a monitor was rotated,
transform the physical dimensions according to the applied wayland
transform to have the physical dimensions match the logical ones.

Mutter flips the physical dimensions itself but doesn't announce the
transform so this shouldn't break anything there.
2021-05-05 18:09:07 +02:00
Matthias Clasen fa70d08387 Merge branch 'quartz-drag-crash' into 'gtk-3-24'
Ensure gdk_quartz_drag_source freed on all paths.

See merge request GNOME/gtk!3498
2021-05-04 16:17:13 +00:00
John Ralls a6c3887736 Ensure gdk_quartz_drag_source freed on all paths.
New release function _gdk_quartz_drag_source_context_destroy_gtk_only
gets called when drag fails to start or is cancelled as well as
when it successfully completes.
2021-05-04 08:33:56 -07:00
Matthias Clasen 414cd74d20 Merge branch 'mesa.win32-3.24' into 'gtk-3-24'
gdkglcontext-win32.c: Fix running with Mesa drivers

See merge request GNOME/gtk!3482
2021-05-02 22:43:30 +00:00
Мирослав Николић 27dad4b90a Update Serbian translation 2021-05-01 14:37:55 +00:00
Pawan Chitrakar c721959d31 Update Nepali translation 2021-04-30 04:56:42 +00:00
Timm Bäder bf4290a330 Merge branch 'wip/hadess/box-guards' into 'gtk-3-24'
box: Fix guards not working

See merge request GNOME/gtk!3485
2021-04-29 15:03:02 +00:00
Chun-wei Fan 1b1dee86a5 gdkglcontext-win32.c: Fix running with Mesa drivers
Some GL drivers such as Mesa-D3D12 do not allow one to call SetPixelFormat() on
a given HDC if one pixel format has been already set for it, so first check the
HDC with GetPixelFormat() to see whether a pixel format has already been set
with the HDC, and only attempt to acquire the pixel format if one has not been
set.

This will fix running with GL on Windows using the Mesa drivers.
2021-04-29 12:17:58 +08:00
Bastien Nocera 44aa328dc3 box: Fix guards not working
The guards weren't working because we were accessing data inside the
arguments before checking them. Postpone data access until after the
guards.

0x00007ffff741203c in gtk_box_pack (box=box@entry=0x0, child=0xe0b1b0, expand=expand@entry=0, fill=fill@entry=0, padding=padding@entry=0, pack_type=pack_type@entry=GTK_PACK_START)
    at /usr/src/debug/gtk3-3.24.28-2.fc34.x86_64/gtk/gtkbox.c:1530
1530	  GtkBoxPrivate *private = box->priv;
(gdb) bt
 #0  0x00007ffff741203c in gtk_box_pack (box=box@entry=0x0, child=0xe0b1b0, expand=expand@entry=0, fill=fill@entry=0, padding=padding@entry=0, pack_type=pack_type@entry=GTK_PACK_START)
     at /usr/src/debug/gtk3-3.24.28-2.fc34.x86_64/gtk/gtkbox.c:1530
 #1  0x00007ffff741223c in gtk_box_pack_start (box=box@entry=0x0, child=<optimized out>, expand=expand@entry=0, fill=fill@entry=0, padding=padding@entry=0)
     at /usr/src/debug/gtk3-3.24.28-2.fc34.x86_64/gtk/gtkbox.c:2179
2021-04-28 23:44:20 +02:00
Jordi Mas e024a542b0 Update Catalan translation 2021-04-25 21:47:01 +02:00
Pawan Chitrakar 8d87d1b2a4 Update Nepali translation 2021-04-25 16:19:17 +00:00
Matthias Clasen 77f32a69c0 3.24.29 2021-04-22 22:47:50 -04:00
Matthias Clasen 1dc428dc3e Fix distcheck 2021-04-22 22:47:16 -04:00
Matthias Clasen 9b0eec55aa Merge branch 'listbox-extend' into 'gtk-3-24'
Allow GtkListBox multiple selection to be extended repeatedly

See merge request GNOME/gtk!3459
2021-04-23 02:47:05 +00:00
Matthias Clasen d6c45d0e17 imcontext: Fix cursor positions
gtk_im_context_get_preedit_string is documented to
return the cursor position as a character offset,
not a byte count. So return that.

Fixed: #3885
2021-04-22 21:33:59 -04:00
John Renner 42d4e6de51 Fix extend selection behavior in ListBox 2021-04-22 16:30:12 -07:00
Matthias Clasen 5e673e94de Merge branch 'icon-browser-icon' into 'gtk-3-24'
iconbrowser: Don't use a nonexistent icon

See merge request GNOME/gtk!3466
2021-04-22 10:59:51 +00:00
Matthias Clasen b1a34e0b0c Merge branch 'gtk3-compose-modifiers' into 'gtk-3-24'
imcontextsimple: Ignore more modifiers in compose (gtk3)

See merge request GNOME/gtk!3469
2021-04-22 10:57:02 +00:00
Ulli Kehrle d3a564d4f9 imcontextsimple: Ignore more modifiers in compose
Previously it was impossible to compose characters on higher levels of
some keyboard layouts as pressing the level selection key would just
exit compose mode.

Examples for affected keyboard layouts include the Latvian
apostrophe-variant "lv(apostrophe)" (latched third level), the extended
German keyboard layout "de(e1)" (latched fifth level) as well as the
multilingual Canadian keyboard layout "ca(multix)" and the German
neo-layout "de(neo)" and its descendants (shifted fifth level).

To reproduce, set a compose key and select the Latvian apostrophe layout.
Notice that you now can input [ by pressing first the ' and then the 8-key.
Then pressing <compose>'8'8 should produce ⟦, but prior to this patch it
did not.
2021-04-22 03:53:49 +02:00
Matthias Clasen a7a10aa63f iconbrowser: Don't use a nonexistent icon
We don't have this icon, so don't put it in the
desktop file, or tools will get upset.
2021-04-21 15:16:43 -04:00
Matthias Clasen 8bbaa7d092 Merge branch 'wip/oholy/placesview-default-location-regression-gtk-3-34' into 'gtk-3-24'
placesview: Open location even if mount was not found

See merge request GNOME/gtk!3465
2021-04-21 15:36:39 +00:00
Ondrej Holy 4fe7b3ec25 placesview: Open location even if mount was not found
Some locations have to be mounted, but their mounts are not user-visible
(e.g. smb-browse). Though this is maybe a bit weird, it is how it works
for years. The problem is that the commit 267ea755, which tries to get the
default location for opening, caused regression as it doesn't expect such
possibility. Before this commit, such locations were opened without any
issue, but nothing happens currently after clicking to "Connect" except of
clearing the "Connect to Server" entry. Let's fallback to the original
location if the mount was not found to fix this regression.

Fixes: https://gitlab.gnome.org/GNOME/nautilus/-/issues/1811
2021-04-21 15:33:34 +02:00
Matthias Clasen ca6794b2d8 Merge branch 'untrusted-beep-3' into 'gtk-3-24'
x11: Don't beep on untrusted displays

See merge request GNOME/gtk!3462
2021-04-21 10:12:19 +00:00
Matthias Clasen 9c84f7645e x11: Don't beep on untrusted displays
This can trigger BadAccess, and we don't
want that.

Fixes: #3862
2021-04-20 21:41:48 -04:00
Matthias Clasen c714739759 Merge branch 'fix-uri-crash-3' into 'gtk-3-24'
Fix a possible crash in gtk_show_uri

See merge request GNOME/gtk!3458
2021-04-19 23:25:15 +00:00
Matthias Clasen 536da7a15c Fix a possible crash in gtk_show_uri
g_file_get_basename can return NULL.
Deal with it somehow.

Fixes: #3883
2021-04-19 16:52:55 -04:00
Matthias Clasen 191433bf0a Merge branch 'fix-non-overlay-scrollbars-3' into 'gtk-3-24'
scrolledwindow: Always add other scrollbar size...

See merge request GNOME/gtk!3456
2021-04-19 19:21:53 +00:00
Timm Bäder 25879ea37e scrolledwindow: Always add other scrollbar size...
... if we're not using indicators and the policy may be visible. Not
doing this if the policy may be invisible is incorrect as we need to
reserve the space anyway in case the scrolledwindow is allocated at
minimum size and the child size increases to show the scrollbar.
2021-04-19 14:43:01 -04:00
Matthias Clasen 610f52b125 Merge branch 'cocoa-access-header' into 'gtk-3-24'
Add a public header for Cocoa access functions.

See merge request GNOME/gtk!3450
2021-04-17 00:28:16 +00:00
John Ralls 242b76a771 Add a public header for Cocoa access functions.
Some applications need to access gdk_quartz_window_get_nsview,
gdk_quartz_window_get_nswindow, and gdk_quartz_event_get_nsevent
so move these from the private gdkquartz-gtk-only.h to a new
header gdkquartz-cocoa-access.h. Don't include this header in
gdkquartz.h so that user code that doesn't need to access these
functins isn't required to compile with Objective C/C++.

Closes https://gitlab.gnome.org/GNOME/gtk/-/issues/1737
2021-04-16 16:56:55 -07:00
Matthias Clasen 3a70781d40 Merge branch 'fix_elcapitan_support' into 'gtk-3-24'
Fix building on OS X El Capitan 10.11

See merge request GNOME/gtk!3402
2021-04-16 20:02:09 +00:00
Matthias Clasen 399356833d Merge branch 'cups-local-printer-2.2-only' into 'gtk-3-24'
Don't try to create local cups printers before CUPS 2.2

See merge request GNOME/gtk!3448
2021-04-16 19:45:11 +00:00
John Ralls 3d53204c75 Don't try to create local cups printers before CUPS 2.2
Not supported on earlier versions.
2021-04-16 12:17:11 -07:00
Matthias Clasen 3aa742d715 overlay: Clarify pass-through docs
Explain that widgets with their own windows need to
have gdk_window_set_pass_through called on them.

Fixes: #3861
2021-04-16 11:15:05 -04:00
Matthias Clasen a1aa4a970d Merge branch 'latest.glib.msvc-3' into 'gtk-3-24'
GTK-3.x: Fix builds against latest stable GLib with Visual Studio

See merge request GNOME/gtk!3445
2021-04-16 12:37:52 +00:00
Matthias Clasen a0a18a7b02 Merge branch 'pre.c99' into 'gtk-3-24'
gtkimcontextsimple.c, updateiconcache.c: Fix build on older compilers

See merge request GNOME/gtk!3444
2021-04-16 12:12:56 +00:00
Chun-wei Fan b69790a776 gtkimcontextsimple.c: Declare variables at top-of-block
This way, things will continue to build on older compilers
2021-04-16 15:38:17 +08:00
Chun-wei Fan da651ca7fc update-icon-cache.c: Declare variables at top-of-block
This way, things will continue to build on older compilers
2021-04-16 15:36:58 +08:00
Chun-wei Fan 35fee660ff gtkcsscustomgadget.c: Fix build with latest stable GLib with MSVC
This eliminates the C4098 warnings ('void' function returning a value),
which is considered by GLib-2.68.x or later to be an error.
2021-04-16 15:28:28 +08:00
Chun-wei Fan 416e6b9cdd gdkglcontext-win32.c: Avoid C4715 warning
We can just group the code for the desktop GL codepath and the EGL
codepath a bit so that we can just have a single location where we
return TRUE upon a successful setup of our WGL/EGL context, and avoid
the C4715 warning that is considered an error when building with
GLib-2.68.x or later using Visual Studio, when we are building without
EGL support.
2021-04-16 15:08:41 +08:00
Matthias Clasen 915d0b39a9 Merge branch 'im-context-event-leak-3' into 'gtk-3-24'
imcontext: Eat key events during preedit

See merge request GNOME/gtk!3442
2021-04-15 22:21:51 +00:00
Matthias Clasen d9a3e07b7f Merge branch 'demo-manpages-3.24' into 'gtk-3-24'
[3.24] meson: only build demo manpages when demos are enabled

See merge request GNOME/gtk!3439
2021-04-15 22:17:22 +00:00
Matthias Clasen a926f217d7 imcontext: Eat key events during preedit
Avoid passing through random key press or release
events while we are showing preedit. That prevents
'accidents' like typing Ctrl-. bringing up the
Emoji chooser during preedit, or hitting Ctrl-a
after the Compose key moving the 'dot' around in
vim in terminals.
2021-04-15 17:46:19 -04:00
Matthias Clasen 4334f9613b Merge branch 'x11-quiet-exit-3' into 'gtk-3-24'
x11: Be quiet on exit by default

See merge request GNOME/gtk!3437
2021-04-14 10:50:24 +00:00
Eli Schwartz ae5a29be4f meson: only build demo manpages when demos are enabled
Installing them even when manpages are enabled, but the demos are
disabled, produces manpages for unavailable programs...
2021-04-13 22:48:39 -04:00
Matthias Clasen c3503fcc84 x11: Be quiet on exit by default
The condition we check for to catch X servers going away
may not be accurate anymore, and the warning shows up in
logs, causing customers to be concerned. So, be quiet by
default, unless the user explicitly asked for a message.
2021-04-13 20:42:21 -04:00
Matthias Clasen 222c6c66ab Merge branch 'fontchooser-since-fix' into 'gtk-3-24'
fontchooser: Fix some since annotations

See merge request GNOME/gtk!3428
2021-04-12 05:07:44 +00:00
Matthias Clasen 3fb5890e69 fontchooser: Fix some since annotations
The "level", "font-features" and "language" were annotated
with the wrong version.

Fixes: #1830
2021-04-11 23:22:46 -04:00
Matthias Clasen 5b13ae1b2e Merge branch 'ebassi/hvbox-docs' into 'gtk-3-24'
docs: Remove any reference to GtkGrid in Gtk[HV]Box

See merge request GNOME/gtk!3422
2021-04-11 13:14:33 +00:00
Matthias Clasen 728d6cd538 Merge branch 'fix-scale-critical' into 'gtk-3-24'
scale: Fix sporadic criticals

See merge request GNOME/gtk!3421
2021-04-11 13:14:21 +00:00
Emmanuele Bassi 3377dc7d40 docs: Remove any reference to GtkGrid in Gtk[HV]Box
GtkBox is not going away, so there's not point in making things more
confusing for those who are still porting their code from GTK2 to GTK3
10 years after GTK 3.0 was released.

Fixes: #3854
2021-04-10 23:57:03 +01:00
Matthias Clasen eaabc3722e scale: Fix sporadic criticals
gtk_css_node_update_layout_attributes can cause us to
free priv->layout, and then bad things happen. Therefore,
we must call that function on a new layout *before* setting
priv->layout.
2021-04-10 10:07:55 -04:00
Matthias Clasen 3cfd1e1f52 Merge branch 'ceo_of_programming-gtk-3-24-patch-54089' into 'gtk-3-24'
Fix typo on gtklistbox.c's docs

See merge request GNOME/gtk!3418
2021-04-10 12:59:12 +00:00
CEO of Programming 475a4c8262 Update gtklistbox.c 2021-04-10 01:04:05 +00:00
Pawan Chitrakar 8b74d5f966 Update Nepali translation 2021-04-09 17:41:07 +00:00
Pawan Chitrakar b7cb281879 Update Nepali translation 2021-04-09 17:13:05 +00:00
Matthias Clasen 550b7fe8b2 Merge branch 'font-settings-fallback' into 'gtk-3-24'
wayland: Improve font setting fallback more

See merge request GNOME/gtk!3409
2021-04-07 18:58:21 +00:00
Matthias Clasen dfea8c31d9 wayland: Improve font setting fallback more
We may get a response from the portal that contains
no useful settings at all. In that case, we should
fallback as well.

Fixes: #3838
2021-04-07 14:30:48 -04:00
Matthias Clasen c3280c6b3c Merge branch 'font-settings-fallback' into 'gtk-3-24'
wayland: Improve font setting fallback

See merge request GNOME/gtk!3406
2021-04-07 14:04:12 +00:00
Matthias Clasen a3ff6e279c wayland: Improve font setting fallback
When we don't get stettings from the portal, the current
fallback is 'awful fonts'. There is no need for that. Instead,
set the fallback values to grayscale antialiasing with slight
hinting.
2021-04-07 08:43:08 -04:00
René de Hesselle 8627a9a569 Fix building on OS X El Capitan 10.11
The preprocessor directives for proper OS version support are missing
their last digit, rendering the checks defunct.

Improves on https://gitlab.gnome.org/GNOME/gtk/-/issues/3592 but does
not fully fix as other issues have surfaced down the line.
2021-04-05 22:20:25 +02:00
Chao-Hsiung Liao d03bf414ce Update Chinese (Taiwan) translation 2021-04-04 00:10:24 +00:00
Nathan Follens 98bf543af2 Update Dutch translation 2021-04-02 14:20:15 +00:00
Matthias Clasen 6a60ce7cd4 Merge branch 'us-intl-compose-for-3' into 'gtk-3-24'
Revert Compose sequence changes

See merge request GNOME/gtk!3387
2021-04-01 20:51:31 +00:00
Matthias Clasen ed9b3f5057 Revert Compose sequence changes
This was breaking muscle memory of people with
the us intl keyboard layout, for important keys
such as '. The unfortunate side-effect is that
our handling of <dead_acute> is a bit hampered
by sequences that don't fit the pattern. But
such is life.

Fixes: #3807
2021-04-01 15:52:12 -04:00
Carlos Garnacho 0ec077bcdc Merge branch 'wip/exalm/overshoot-changes-gtk3' into 'gtk-3-24'
scrolledwindow: Cancel overshoot on dimension changes

See merge request GNOME/gtk!3333
2021-04-01 12:14:10 +00:00
Alexander Mikhaylenko 27d38eca9a scrolledwindow: Cancel overshoot on dimension changes
If we scroll down in a list that's still being filled, we hit the edge and
initiate overshoot, and then the adjustment's upper value increases. This
leads to an unwanted bounce back.

Additionally, if in a similar situation the upper value decreases, the
overscroll glow gets stuck.

Update kinetic scrolling upper and lower value on changes, and immediately
cancel it if dimensions on that side change.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3752
2021-04-01 16:37:03 +05:00
Jonas Ådahl 4ac8889d64 Merge branch 'issue3791' into 'gtk-3-24'
gdk/wayland: Defer processing of globals closures

See merge request GNOME/gtk!3357
2021-03-30 13:40:17 +00:00
Robert Mader 86ef0e6094 gdk/wayland: Defer processing of globals closures
... until all globals have been received.

The dependency tracking introduced in 4e9be39518 only allows to
specify required globals and processes the closures as soon as
the requirements have been met. There are, however, also optional
dependencies - most notably the primary_selection protocol.
Currently we rely on the fact that compositors like Mutter announce
it before `wl_seat`, even though the order is not specified in
the spec.

Process globals closures only after all globals have been announced,
so optional dependencies can be accommodated.

Closes https://gitlab.gnome.org/GNOME/gtk/-/issues/3791
2021-03-30 15:10:04 +02:00
Matthias Clasen 9a2382bebc Merge branch 'spinbutton-localized-digits-3' into 'gtk-3-24'
spinbutton: Interpret localized digits

See merge request GNOME/gtk!3369
2021-03-30 02:37:41 +00:00
Matthias Clasen fa69e5f42d spinbutton: Interpret localized digits
Interpret input where the characters have numeric values.

See #3387
2021-03-29 22:10:06 -04:00
Matthias Clasen 162243c7ce Merge branch 'fix-large-text-3' into 'gtk-3-24'
label: Fix reacting to screen resolution changes

See merge request GNOME/gtk!3368
2021-03-30 01:28:37 +00:00
Matthias Clasen 316aa85b8d label: Fix reacting to screen resolution changes
Labels were not reacting when the screen resolution
changes, as e.g. when turning "Large Text" on of off.
2021-03-29 20:48:15 -04:00
Matthias Clasen ba8c18019d imcontext: Look for Compose file in the right place
The documentation states that GTK will load a Compose
file from ~/.config/gtk-3.0/Compose. Unfortunately,
backports changed this unintentionally to look in
the gtk-4.0 directory. Change it back.
2021-03-29 18:31:23 -04:00
Anders Jonsson d8fb8db37c Update Swedish translation 2021-03-27 21:11:16 +00:00
Matthias Clasen 71c64e650d Merge branch 'gtk-3-24-minimize-no-decorations' into 'gtk-3-24'
GDK quartz: Keep window without decoration miniaturizable

See merge request GNOME/gtk!3281
2021-03-27 03:32:07 +00:00
Cédric Krier 238bb38249 Keep window without decoration miniaturizable
Closes #2345
2021-03-10 16:08:14 +01:00
Luca Bacci 0cb78a9808 GdkW32: remove klassTEMPSHADOW
Fixes issue #2019

See !2749
2020-10-27 18:12:42 +01:00
Emmanuel Gil Peyrot 75a9f8dc92 Switch to GL_ARB_framebuffer_object
GTK+ 3.0 was currently using GL_EXT_framebuffer_object, which is
deprecated as the ARB version has been merged into OpenGL 3.0 as well as
OpenGL ES 2.0, and provides laxer requirements.
2020-06-11 21:24:17 +02:00
Nelson Benítez León b01f371ce6 FileChooserButton: query 'display name' also for unbookmarked files
Do also the async file info query for remote files when they
are not bookmarked, because otherwise "None" will be shown as
file name (and fallback text generic icon will be used).

The remote file was already browsed by the file chooser
instance when selecting it, so querying the display name
again should be using gio cache and not be slow.

Even if it's were slow it's better than showing 'None'
which makes it seem as if nothing was selected.

Fixes #1966
2020-04-19 14:16:02 -04:00
599 changed files with 102041 additions and 128587 deletions
+7 -5
View File
@@ -7,13 +7,13 @@ cache:
- _ccache/
fedora-autotools:
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v1
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v3
stage: build
script:
- bash -x ./.gitlab-ci/test-docker-autotools.sh
fedora-distcheck:
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v1
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v3
variables:
DO_DISTCHECK: "yes"
when: manual
@@ -22,7 +22,7 @@ fedora-distcheck:
- bash -x ./.gitlab-ci/test-docker-autotools.sh
fedora-meson:
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v1
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v3
stage: build
variables:
EXTRA_MESON_FLAGS: "-Ddefault_library=both"
@@ -36,7 +36,7 @@ fedora-meson:
- "_build/testsuite/reftests/output"
debian-meson:
image: registry.gitlab.gnome.org/gnome/gtk/debian-gtk3:v1
image: registry.gitlab.gnome.org/gnome/gtk/debian-gtk3:v2
stage: build
variables:
EXTRA_MESON_FLAGS: "-Ddefault_library=both"
@@ -50,7 +50,7 @@ debian-meson:
- "_build/testsuite/reftests/output"
reference:
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v1
image: registry.gitlab.gnome.org/gnome/gtk/fedora-gtk3:v3
stage: docs
variables:
EXTRA_MESON_FLAGS: "--buildtype=release -Dgtk_doc=true -Dman=true"
@@ -79,6 +79,8 @@ msys2-mingw64-meson:
name: "gtk3-${env:CI_JOB_NAME}-${env:CI_COMMIT_REF_NAME}"
paths:
- "_build/meson-logs"
- "_build/gdk/libgdk-3-0.dll"
- "_build/gtk/libgtk-3-0.dll"
msys2-mingw64-autotools:
when: manual
+1 -1
View File
@@ -1,4 +1,4 @@
FROM debian:buster
FROM debian:bullseye
RUN apt-get update -qq && apt-get install --no-install-recommends -qq -y \
adwaita-icon-theme \
+2 -2
View File
@@ -1,4 +1,4 @@
FROM fedora:31
FROM fedora:35
RUN dnf -y install \
adwaita-icon-theme \
@@ -44,7 +44,7 @@ RUN dnf -y install \
libXtst-devel \
make \
mesa-libEGL-devel \
mesa-libwayland-egl-devel \
'pkgconfig(wayland-egl)' \
meson \
ninja-build \
pango-devel \
+1 -1
View File
@@ -15,7 +15,7 @@ meson \
-Dx11_backend=true \
-Dwayland_backend=true \
-Dxinerama=yes \
-Dprint_backends="file,lpr,test,cloudprint,cups" \
-Dprint_backends="file,lpr,test,cups" \
${EXTRA_MESON_FLAGS:-} \
_build
+1 -1
View File
@@ -15,7 +15,7 @@ EXTRA_DIST += \
INSTALL.in \
NEWS.pre-1-0 \
README.commits \
README.win32 \
README.win32.md \
check-version.py \
config.h.win32 \
makefile.msc \
+321
View File
@@ -1,3 +1,324 @@
Overview of Changes in GTK+ 3.24.35, 11-22-2022
===============================================
* GtkFontChooserWidget:
- Fix a critical
* GtkAccelLabel:
- Differentiate keypad keysyms in accelerators
* Input:
- Recognize stylus devices as pens
- Fix problems with motion compression
* Windows:
- Build system improvements
* Wayland:
- Fix problems with unreliable DND
- Use GLES if required
- Add support for titlebar gestures
- Refactor handling of IM client updates
- Fix cursor hotspots with scaled surfaces
- Use the xdg-activation protocol
- Load cursors on demand
- Fix cursor size on hi-dpi displays
* MacOS:
- Use a CVDisplayLink based frame clock
- Translation updates:
Abkhazian
Bulgarian
Catalan
Chinese (Taiwan)
Croatian
Dutch
Friulian
Georgian
German
Hungarian
Indonesian
Occitan
Persian
Portuguese
Polish
Russian
Serbian
Slovenian
Swedish
Turkish
Ukrainian
Overview of Changes in GTK+ 3.24.34, 05-18-2022
===============================================
* Include legacy hicolor icons
* Fix the build with gcc 12
* MacOS:
- Restore QUARTZ_RELOCATION support
* X11:
- Trap errors when getting output properties
* Wayland:
- Ignore empty preedit updates This fixes a problem with
textview scrolling
* Translation updates
Danish
Dutch
French
German
Hungarian
Italian
Kazakh
Latvian
Lithuanian
Norwegian Bokmål
Swedish
Overview of Changes in GTK+ 3.24.33, 04-03-2022
===============================================
* No changes
Overview of Changes in GTK+ 3.24.32, 03-03-2022
===============================================
* GtkCellRendererProgress:
- Use tabular figures
* GtkFontChooser:
- Fix the build with older Pango
- Fix axis name handling
* Theme:
- Fix border color for tiled windows
* Accessibility:
- Fix cell accessible leak
* Wayland:
- Support new high-contrast setting
- Only update scale when on any outputs
* Windows:
- Various build fixes
- Fix keyboard state handling
- Fix capslock handling
- Fix AltGr not working
* MacOS:
- Fix the build on 10.11
- Make Dock "Quit" invoke the app.quit action
- Correctly handle HiDPI cursors
* Translation updates
Basque
Brazilian Portuguese
Catalan
Chinese (China)
Croatian
Czech
French
Galician
Hebrew
Indonesian
Korean
Persian
Polish
Portuguese
Romanian
Russian
Serbian
Slovenian
Spanish
Swedish
Turkish
Ukrainian
Overview of Changes in GTK+ 3.24.31, 20-12-2021
===============================================
* input:
- Fix a crash with touch on GtkScale
* clipboard:
- Avoid a double-free
* css:
- Avoid a crash with radial gradients
* GtkFileChooser:
- Don't leak search results
* GtkTextView:
- Support css letterspacing
* Wayland:
- Reset position when hiding popups
- Ignore globals we did not bind ourselves
- Avoid infinite loops when hiding surfaces
- Avoid clipboard-related lockups
* X11:
- Trap errors while doing XRANDR calls
- Support touchpad gestures with XI 2.4
* win32:
- Some OpenGL setup fixes
- Fall back to GLES for OpenGL
- Fix MinGW autotools build
- Fix building on Windows 11
- Support building with Visual Studio 2022
- Improve DND across monitors
- Rewrite keymap handling code
* macOS:
- Accept NSPasteboardTypeFileURL drops
- Build on macOS 12
- Fix display on macOS 12
- Fix keyboard layout notifications
- Fix a crash
- Improve performance on Big Sur
* Translation updates:
Basque
Brazilian Portuguese
Chinese (China)
Chinese (Taiwan)
Croatian
Czech
Danish
Dutch
Finnish
French
Friulian
Galician
German
Hungarian
Icelandic
Italian
Kazakh
Korean
Latvian
Occitan
Persian
Russian
Serbian
Spanish
Swedish
Overview of Changes in GTK+ 3.24.30
===================================
* Input:
- Ignore NoSymbol key events (happens with some XKB options)
- Fix incomplete reset in some cases
* GtkEmojiChooser:
- Update data from CLDR 39
- Support translated keywords for multiple languages
- Allow inserting multiple Emoji with Ctrl
- Match keywords for search
- Fix a memory leak
* GtkFileChooser:
- Accessibility improvements
* GtkTreeView
- Fix an accessibility-related memory leak
- Fix assertion failures in some cases
* Printing:
- Remove the Google Cloud Print backend, since the
service was shut down
* Wayland:
- Work with pointer-gestures v1 protocol
* Win32:
- Fix using GL with Mesa drivers
- Add support for Windows Pointer Input stack
* MacOS:
- Fix a crash with Drag-and-Drop
* Translation updates:
Belarusian
Brazilian Portuguese
British English
Catalan
Indonesian
Lithuanian
Nepali
Norwegian Bokmål
Occitan
Portuguese
Romanian
Russian
Serbian
Slovenian
Spanish
Turkish
Ukrainian
Overview of Changes in GTK+ 3.24.29
===================================
* Input:
- Look for a Compose file in the right place (~/.config/gtk-3.0)
- Revert some Compose sequence changes (mainly around dead
acute and apostrophe)
- Consume all key events during preedit, to avoid unexpected
interactions
- Ignore more modifiers during preedit, to allow using 3rd and
5th level choosers
- Fix handling of cursor positions in non-ASCII preedit text
* GtkSpinButton:
- Interpret localized digits
* GtkScale:
- Fix sporadic criticals
* GtkScrolledWindow:
- Cancel overshoot on size changes
- Avoid criticals with non-overlay scrollbars
* GtkFileChooser:
- Handle smb mounts better
* GtkListBox:
- Fix extending multi-selections
* Fix a possible crash in gtk_show_uri
* Wayland:
- Improve font settings fallback
* X11:
- Avoid log spam on exit
- Don't beep on untrusted displays
* OS X:
- Fix building on OS X 10.11
- Add gdk-quartz-cocoa-access.h with api that provides
access to native objects
* Translation updates:
Dutch
Nepali
Swedish
Overview of Changes in GTK+ 3.24.28
===================================
-314
View File
@@ -1,314 +0,0 @@
The Win32 backend in GTK+ is not as stable or correct as the X11 one.
For prebuilt runtime and developer packages see
http://ftp.gnome.org/pub/gnome/binaries/win32/
Building GTK+ on Win32
======================
First you obviously need developer packages for the compile-time
dependencies: GDK-Pixbuf, Pango, atk, glib, gettext-runtime, libiconv at least.
See http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies .
For people compiling GTK+ with Visual C++ or later, it is recommended that
the same compiler is used for at least GDK-Pixbuf, Pango, atk and glib
so that crashes and errors caused by different CRTs can be avoided. Currently
building with Visual Studio 2008 or later is supported, either via Visual Studio
project files or via the Meson build system, as described in the below sections.
Interchanging between Visual Studio 2015, 2017 and 2019 builds should be fine
as they use the same CRT (UCRT) DLLs.
After installing the dependencies, there are two ways to build GTK+
for win32.
1) GNU tools, ./configure && make install
-----------------------------------------
This requires you have mingw and MSYS.
Use the configure script, and the resulting Makefiles (which use
libtool and gcc to do the compilation). I use this myself, but it can
be hard to setup correctly.
The full script I run to build GTK+ 2.16 unpacked from a source
distribution is as below. This is from bulding GTK+ 2.16.5. I don't
use any script like this to build the development branch, as I don't
distribute any binaries from development branches.
# This is a shell script that calls functions and scripts from
# tml@iki.fi's personal work envíronment. It is not expected to be
# usable unmodified by others, and is included only for reference.
MOD=gtk+
VER=2.16.5
REV=1
ARCH=win32
THIS=${MOD}_${VER}-${REV}_${ARCH}
RUNZIP=${MOD}_${VER}-${REV}_${ARCH}.zip
DEVZIP=${MOD}-dev_${VER}-${REV}_${ARCH}.zip
HEX=`echo $THIS | md5sum | cut -d' ' -f1`
TARGET=c:/devel/target/$HEX
usedev
usemsvs6
(
set -x
DEPS=`latest --arch=${ARCH} glib atk cairo pango libpng zlib libtiff jpeg`
PROXY_LIBINTL=`latest --arch=${ARCH} proxy-libintl`
PKG_CONFIG_PATH=
for D in $DEPS; do
PATH=/devel/dist/${ARCH}/$D/bin:$PATH
[ -d /devel/dist/${ARCH}/$D/lib/pkgconfig ] && PKG_CONFIG_PATH=/devel/dist/${ARCH}/$D/lib/pkgconfig:$PKG_CONFIG_PATH
done
LIBPNG=`latest --arch=${ARCH} libpng`
ZLIB=`latest --arch=${ARCH} zlib`
LIBTIFF=`latest --arch=${ARCH} libtiff`
JPEG=`latest --arch=${ARCH} jpeg`
patch -p0 <<'EOF'
EOF
lt_cv_deplibs_check_method='pass_all' \
CC='gcc -mtune=pentium3 -mthreads' \
CPPFLAGS="-I/devel/dist/${ARCH}/${LIBPNG}/include \
-I/devel/dist/${ARCH}/${ZLIB}/include \
-I/devel/dist/${ARCH}/${LIBTIFF}/include \
-I/devel/dist/${ARCH}/${JPEG}/include \
-I/devel/dist/${ARCH}/${PROXY_LIBINTL}/include" \
LDFLAGS="-L/devel/dist/${ARCH}/${LIBPNG}/lib \
-L/devel/dist/${ARCH}/${ZLIB}/lib \
-L/devel/dist/${ARCH}/${LIBTIFF}/lib \
-L/devel/dist/${ARCH}/${JPEG}/lib \
-L/devel/dist/${ARCH}/${PROXY_LIBINTL}/lib -Wl,--exclude-libs=libintl.a \
-Wl,--enable-auto-image-base" \
LIBS=-lintl \
CFLAGS=-O2 \
./configure \
--enable-win32-backend \
--disable-gdiplus \
--with-included-immodules \
--without-libjasper \
--enable-debug=yes \
--enable-explicit-deps=no \
--disable-gtk-doc \
--disable-static \
--prefix=$TARGET &&
libtoolcacheize &&
rm gtk/gtk.def &&
(PATH="$PWD/gdk-pixbuf/.libs:/devel/target/$HEX/bin:$PATH" make -j3 install || (rm .libtool-cache* && PATH="/devel/target/$HEX/bin:$PATH" make -j3 install)) &&
PATH="/devel/target/$HEX/bin:$PATH" gdk-pixbuf-query-loaders >/devel/target/$HEX/etc/gtk-2.0/gdk-pixbuf.loaders &&
grep -v -E 'Automatically generated|Created by|LoaderDir =' <$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders >$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp &&
mv $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders &&
grep -v -E 'Automatically generated|Created by|ModulesPath =' <$TARGET/etc/gtk-2.0/gtk.immodules >$TARGET/etc/gtk-2.0/gtk.immodules.temp &&
mv $TARGET/etc/gtk-2.0/gtk.immodules.temp $TARGET/etc/gtk-2.0/gtk.immodules &&
./gtk-zip.sh &&
mv /tmp/${MOD}-${VER}.zip /tmp/$RUNZIP &&
mv /tmp/${MOD}-dev-${VER}.zip /tmp/$DEVZIP
) 2>&1 | tee /devel/src/tml/packaging/$THIS.log
(cd /devel && zip /tmp/$DEVZIP src/tml/packaging/$THIS.{sh,log}) &&
manifestify /tmp/$RUNZIP /tmp/$DEVZIP
You should not just copy the above blindly. There are some things in
the script that are very specific to *my* build setup on *my* current
machine. For instance the "latest" command, the "usedev" and
"usemsvs6" shell functions, the /devel/dist folder. The above script
is really just meant for reference, to give an idea. You really need
to understand what things like PKG_CONFIG_PATH are and set them up
properly after installing the dependencies before building GTK+.
As you see above, after running configure, one can just say "make
install", like on Unix. A post-build fix is needed, running
gdk-pixbuf-query-loaders once more to get a correct gdk-pixbuf.loaders
file.
For a 64-bit build you need to remove the gtk/gtk.def file and let it
be regenerated by the makefilery. This is because the 64-bit GTK dll
has a slightly different list of exported function names. This is on
purpose and not a bug. The API is the same at the source level, and
the same #defines of some function names to actually have a _utf8
suffix is used (just to keep the header simpler). But the
corresponding non-suffixed function to maintain ABI stability are not
needed in the 64-bit case (because there are no older EXEs around that
would require such for ABI stability).
2) Microsoft's tools
--------------------
There are VS 2008~2019 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 (with GAIL/a11y built in),
the GAIL-Util library and the gtk-demo program. Please also refer to the
README file(s) that reside in win32 on how to enable additional features
that are not enabled by default, such as EGL support via libANGLE, which
emulate the GL/EGL calls using Direct3D 9/11.
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://wiki.gnome.org/Projects/GTK+/Win32/MSVCCompilationOfGTKStack
Alternative 1 also generates Microsoft import libraries (.lib), if you
have lib.exe available. It might also work for cross-compilation from
Unix.
I (Tor) use method 1 myself. Hans Breuer has been taking care of the MSVC
makefiles. At times, we disagree a bit about various issues, and for
instance the makefile.msc files might not produce identically named
DLLs and import libraries as the "autoconfiscated" makefiles and
libtool do. If this bothers you, you will have to fix the makefiles.
If desiring to build binaries for ARM64 (aarch64), one needs to use the
Visual Studio 2017 or 2019 solution files, or use Meson with a
cross-compilation file, with a Windows 10 SDK that supports ARM64
builds. At this point, building the introspection files is not supported
for ARM64 builds, and you will need a Python interpreter and
glib-compile-resources binaries that run on the build machine. For Visual Studio
2017 ARM64 builds, do also check the Directory.Build.props file in $(srcroot)/win32/vs15
indicates a Windows 10 SDK version that supports ARM64 builds exists on the build machine.
For building ARM64 binaries with the Visual Studio projects, prior to the build,
you may need to update gtk3-gen-srcs.props to pass in the variables GLIB_MKENUMS,
GLIB_GENMARSHAL, GDBUS_CODEGEN and/or GLIB_COMPILE_RESOURCES in the nmake command line
indicated by <GenerateRequiredSourcesBase> so that they point to the glib-mkenums,
glib-genmarshal, gdbus-codegen and glib-compile-resources that will run on the build
machine. You may also need to update gtk3-version-paths.props to update PythonDir to
the installation of the Python interpreter that will run on the build machine. To carry
out the actual build using the solution files, use the "Configuration Manager" to add the
ARM64 build configs by copying the settings from the x64 configs, and then build the solution.
The build instructions for such builds otherwise follow the standard Win32 (x86) and
x64 builds, but you need to ensure that you have ARM64 builds of the various dependencies.
3) Using Meson (for Visual Studio and MinGW builds)
---
Meson can now be used to build GTK+-3.x with either MinGW or Visual Studio.
You will need the following items in addition to all the dependencies
listed above:
- Python 3.5 or later
- Meson build system, 0.48.0 or later
- Ninja (if not using the Visual Studio project generator for
Visual Studio 2010, 2015, 2017, 2019)
- CMake (optional, used for dependency searching)
- pkg-config (optional, or some compatible tool, highly recommended)
For all Windows builds, note that unless -Dbuiltin_immodules=no is specified,
the input modules (immodules) are built directly into the GTK DLL.
For building with Meson using Visual Studio, do the following:
Create an empty build directory somewhere that is on the same drive
as the source tree, and launch the Visual Studio command prompt that
matches the build configuration (Visual Studio version and architecture),
and run the following:
- Ensure that both the installation directory of Python and its script
directory is in your PATH, as well as the Ninja, CMake and pkg-config
executables (if used). If a pkg-config compatible drop-in replacement
tool is being used, ensure that PKG_CONFIG is set to point to the
executable of that tool as well.
- For non-GNOME dependencies (such as Cairo and Harfbuzz), where pkg-config
files or CMake files could not be properly located, set INCLUDE and LIB
to ensure that their header files and .lib files can be found respectively.
The DLLs of those dependencies should also be in the PATH during the build
as well, especially if introspection files are to be built.
- For GNOME dependencies, the pkg-config files for those dependencies should
be searchable by pkg-config (or a compatible tool). Verify this by running
$(PKG_CONFIG) --modversion <dependency>.
- Run the following:
meson <path_to_directory_of_this_file> --buildtype=... --prefix=...,
where buildtype can be release, debugoptimized, debug or plain. Please
refer to the Meson documentation for more details. You may also wish to
pass in -Dbroadway_backend=true if building the Broadway GDK backend is
desired, and/or pass in -Dbuiltin_immodules=no to build the immodules as
standalone DLLs that can be loaded by GTK dynamically. For Visual Studio
2010, 2015, 2017 and 2019 builds, you may pass in --backend=vs to generate
Visual Studio project files to be used to carry out the builds.
If you are building with Visual Studio 2008, note the following items as well:
- For x64 builds, the compiler may hang when building the certain files, due
to optimization issues in the compiler. If this happens, use the Windows
Task Manager and terminate all cl.exe processes, and the build will fail
with the source files that did not finish compiling due to the hang.
Look for them in build.ninja in the build directory, and change their compiler
flag "/O2" to "/O1", and the compilation and linking should proceed normally.
At this time of writing, the following files are known to cause this hang:
gtk\gtkfilechoosernativewin32.c
gtk\gtkfilesystemmodel.c
gtk\gtktextsegment.c
gtk\gtktextbtree.c
gtk\gtkrbtree.c
testsuite\gtk\treemodel.c
testsuite\gtk\textbuffer.c
testsuite\gtk\rbtree.c
testsuite\gtk\icontheme.c
- Upon running install (via "ninja install"), it is likely that
gtk-query-immodules-3.0.exe will fail to run as it cannot find msvcr90.dll or
msvcr90D.dll. You can ignore this if you did not specify -Dbuiltin_immodules=no
when configuring via Meson. If -Dbuiltin_immodules=no is specified, you need to
run the following after embedding the manifests as outlined in the next point:
<gtk_install_prefix>\bin\gtk-query-immodules-3.0.exe > <gtk_install_prefix>\lib\gtk-3.0\3.0.0\immodules.cache
- You will need to run the following upon completing install, from the build
directory in the Visual Studio 2008/SDK 6.0 command prompt (third line is not
needed unless -Dbuiltin_immodules=no is specified) so that the built binaries
can run:
for /r %f in (*.dll.manifest) do if exist <gtk_install_prefix>\bin\%~nf mt /manifest %f /outputresource:<gtk_install_prefix>\bin\%~nf;2
for /r %f in (*.exe.manifest) do if exist <gtk_install_prefix>\bin\%~nf mt /manifest %f /outputresource:<gtk_install_prefix>\bin\%~nf;1
for /r %f in (*.dll.manifest) do if exist <gtk_install_prefix>\lib\gtk-3.0\3.0.0\immodules\%~nf mt /manifest %f /outputresource:<gtk_install_prefix>\lib\gtk-3.0\3.0.0\immodules\%~nf;2
- The more modern visual style for the print dialog is not applied for Visual
Studio 2008 builds. Any solutions to this is really appreciated.
Using GTK+ on Win32
===================
To use GTK+ on Win32, you also need either one of the above mentioned
compilers. Other compilers might work, but don't count on it. Look for
prebuilt developer packages (DLLs, import libraries, headers) on the
above website.
Multi-threaded use of GTK+ on Win32
===================================
Multi-threaded GTK+ programs might work on Windows in special simple
cases, but not in general. Sorry. If you have all GTK+ and GDK calls
in the same thread, it might work. Otherwise, probably not at
all. Possible ways to fix this are being investigated.
Wintab
======
The tablet support uses the Wintab API. The Wintab development kit is
no longer required. The wintab.h header file is bundled with GTK+
sources. Unfortunately it seems that only Wacom tablets come with
support for the Wintab API nowadays.
--Tor Lillqvist <tml@iki.fi>, <tml@novell.com>
--Updated by Fan, Chun-wei <fanc999@yahoo.com.tw>
+484
View File
@@ -0,0 +1,484 @@
Notes on running GTK on Windows in general
===
The Win32 backend in GTK+ is not as stable or correct as the X11 one.
For prebuilt runtime and developer packages see
http://ftp.gnome.org/pub/gnome/binaries/win32/
Notes on using OpenGL (GtkGLArea/GdkGLArea) on Win32
===
Note that on Windows, if one is running Nahimic 3 on a system with
nVidia graphics, one needs to stop the "Nahimic service" or insert
the GTK application into the Nahimic blacklist, as noted in
https://www.nvidia.com/en-us/geforce/forums/game-ready-drivers/13/297952/nahimic-and-nvidia-drivers-conflict/2334568/
if using programs that utilise GtkGLArea and/or GdkGLArea, or use
GDK_GL=gles if you know that GLES support is enabled for the build.
This is a known issue, as the above link indicates, and affects quite
a number of applications--sadly, since this issue lies within the
nVidia graphics driver and/or the Nahimic 3 code, we are not able
to rememdy this on the GTK side; the best bet before trying the above
workarounds is to try to update your graphics drivers and Nahimic
installation.
Building GTK+ on Win32
===
First you obviously need developer packages for the compile-time
dependencies: GDK-Pixbuf, Pango, atk, glib, gettext-runtime, libiconv at least.
See http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies .
For people compiling GTK+ with Visual C++, it is recommended that
the same compiler is used for at least GDK-Pixbuf, Pango, atk and glib
so that crashes and errors caused by different CRTs can be avoided.
Currently building with Visual Studio 2008 or later is supported,
either via Visual Studio project files or via the Meson build system,
as described in the below sections.
For Visual Studio 2008 and 2010, a special setup making use of the Windows
8.0 SDK is required, see at the bottom of this document for guidance.
Interchanging between Visual Studio 2015, 2017, 2019 and 2022 builds
should be fine as they use the same CRT (UCRT) DLLs.
After installing the dependencies, there are two ways to build GTK+
for win32.
GNU tools, ./configure && make install (info here may be out of date,
consider using Meson instead)
---
This requires you have mingw and MSYS.
Use the configure script, and the resulting Makefiles (which use
libtool and gcc to do the compilation). I use this myself, but it can
be hard to setup correctly.
The full script I run to build GTK+ 2.16 unpacked from a source
distribution is as below. This is from bulding GTK+ 2.16.5. I don't
use any script like this to build the development branch, as I don't
distribute any binaries from development branches.
```
# This is a shell script that calls functions and scripts from
# tml@iki.fi's personal work envíronment. It is not expected to be
# usable unmodified by others, and is included only for reference.
MOD=gtk+
VER=2.16.5
REV=1
ARCH=win32
THIS=${MOD}_${VER}-${REV}_${ARCH}
RUNZIP=${MOD}_${VER}-${REV}_${ARCH}.zip
DEVZIP=${MOD}-dev_${VER}-${REV}_${ARCH}.zip
HEX=`echo $THIS | md5sum | cut -d' ' -f1`
TARGET=c:/devel/target/$HEX
usedev
usemsvs6
(
set -x
DEPS=`latest --arch=${ARCH} glib atk cairo pango libpng zlib libtiff jpeg`
PROXY_LIBINTL=`latest --arch=${ARCH} proxy-libintl`
PKG_CONFIG_PATH=
for D in $DEPS; do
PATH=/devel/dist/${ARCH}/$D/bin:$PATH
[ -d /devel/dist/${ARCH}/$D/lib/pkgconfig ] && PKG_CONFIG_PATH=/devel/dist/${ARCH}/$D/lib/pkgconfig:$PKG_CONFIG_PATH
done
LIBPNG=`latest --arch=${ARCH} libpng`
ZLIB=`latest --arch=${ARCH} zlib`
LIBTIFF=`latest --arch=${ARCH} libtiff`
JPEG=`latest --arch=${ARCH} jpeg`
patch -p0 <<'EOF'
EOF
lt_cv_deplibs_check_method='pass_all' \
CC='gcc -mtune=pentium3 -mthreads' \
CPPFLAGS="-I/devel/dist/${ARCH}/${LIBPNG}/include \
-I/devel/dist/${ARCH}/${ZLIB}/include \
-I/devel/dist/${ARCH}/${LIBTIFF}/include \
-I/devel/dist/${ARCH}/${JPEG}/include \
-I/devel/dist/${ARCH}/${PROXY_LIBINTL}/include" \
LDFLAGS="-L/devel/dist/${ARCH}/${LIBPNG}/lib \
-L/devel/dist/${ARCH}/${ZLIB}/lib \
-L/devel/dist/${ARCH}/${LIBTIFF}/lib \
-L/devel/dist/${ARCH}/${JPEG}/lib \
-L/devel/dist/${ARCH}/${PROXY_LIBINTL}/lib -Wl,--exclude-libs=libintl.a \
-Wl,--enable-auto-image-base" \
LIBS=-lintl \
CFLAGS=-O2 \
./configure \
--enable-win32-backend \
--disable-gdiplus \
--with-included-immodules \
--without-libjasper \
--enable-debug=yes \
--enable-explicit-deps=no \
--disable-gtk-doc \
--disable-static \
--prefix=$TARGET &&
libtoolcacheize &&
rm gtk/gtk.def &&
(PATH="$PWD/gdk-pixbuf/.libs:/devel/target/$HEX/bin:$PATH" make -j3 install || (rm .libtool-cache* && PATH="/devel/target/$HEX/bin:$PATH" make -j3 install)) &&
PATH="/devel/target/$HEX/bin:$PATH" gdk-pixbuf-query-loaders >/devel/target/$HEX/etc/gtk-2.0/gdk-pixbuf.loaders &&
grep -v -E 'Automatically generated|Created by|LoaderDir =' <$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders >$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp &&
mv $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders &&
grep -v -E 'Automatically generated|Created by|ModulesPath =' <$TARGET/etc/gtk-2.0/gtk.immodules >$TARGET/etc/gtk-2.0/gtk.immodules.temp &&
mv $TARGET/etc/gtk-2.0/gtk.immodules.temp $TARGET/etc/gtk-2.0/gtk.immodules &&
./gtk-zip.sh &&
mv /tmp/${MOD}-${VER}.zip /tmp/$RUNZIP &&
mv /tmp/${MOD}-dev-${VER}.zip /tmp/$DEVZIP
) 2>&1 | tee /devel/src/tml/packaging/$THIS.log
(cd /devel && zip /tmp/$DEVZIP src/tml/packaging/$THIS.{sh,log}) &&
manifestify /tmp/$RUNZIP /tmp/$DEVZIP
```
You should not just copy the above blindly. There are some things in
the script that are very specific to *my* build setup on *my* current
machine. For instance the "latest" command, the "usedev" and
"usemsvs6" shell functions, the `/devel/dist` folder. The above script
is really just meant for reference, to give an idea. You really need
to understand what things like `PKG_CONFIG_PATH` are and set them up
properly after installing the dependencies before building GTK+.
As you see above, after running configure, one can just say "make
install", like on Unix. A post-build fix is needed, running
gdk-pixbuf-query-loaders once more to get a correct `gdk-pixbuf.loaders`
file.
For a 64-bit build you need to remove the `gtk/gtk.def` file and let it
be regenerated by the makefilery. This is because the 64-bit GTK dll
has a slightly different list of exported function names. This is on
purpose and not a bug. The API is the same at the source level, and
the same #defines of some function names to actually have a _utf8
suffix is used (just to keep the header simpler). But the
corresponding non-suffixed function to maintain ABI stability are not
needed in the 64-bit case (because there are no older EXEs around that
would require such for ABI stability).
Microsoft's tools
---
There are VS 2008~2022 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 (with GAIL/a11y built in),
the GAIL-Util library and the gtk3-demo program. Please also refer to the
README_FEATURES_MSVC.md file that reside in win32 on how to enable
additional features that are not enabled by default, such as EGL support
via libANGLE, which emulate the GL/EGL calls using Direct3D 9/11.
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://wiki.gnome.org/Projects/GTK+/Win32/MSVCCompilationOfGTKStack
Alternative 1 also generates Microsoft import libraries (.lib), if you
have lib.exe available. It might also work for cross-compilation from
Unix.
I (Tor) use method 1 myself. Hans Breuer has been taking care of the MSVC
makefiles. At times, we disagree a bit about various issues, and for
instance the makefile.msc files might not produce identically named
DLLs and import libraries as the "autoconfiscated" makefiles and
libtool do. If this bothers you, you will have to fix the makefiles.
You may need or wish to update `gtk3-build-defines.[vs]props` (under the
entry `GenerateRequiredSourcesBase` and/or `GtkIntrospectNMakeCmd` and/or
`InstallBuildsBase`) to pass in the variables if they are not in:
* `$(PREFIX)\bin` (used for generating code for the build):
* `GLIB_MKENUMS` (path to your glib-mkenums script)
* `GLIB_GENMARSHAL` (path to your glib-genmarshal script)
* `GDBUS_CODEGEN` (path to your gdbus-codegen script)
* `GLIB_COMPILE_RESOURCES` (path to your glib-compile-resources program)
* `%PATH%`:
* `PYTHON` (path to your Python interpreter, for generating code for
the build as well as for introspection; for introspection, this must
match the version series and architecture for the Python that is used
to build gobject-introspection)
* `PKG_CONFIG` (path to your pkg-config or compatible tool, for
building introspection files in the `gtk3-introspect` project)
* `MSGFMT` (path to your msgfmt program, if building translations
during install; append ` install-translations` to `InstallBuildsBase`
in `gtk3-build-defines.[vs]props])
`LIBDIR` and `INCLUDEDIR` can also be passed in if they are not under
`$(PREFIX)\lib` and `$(PREFIX)\include` respectively. Note that
`$(LIBDIR)` is architecture-dependent.
If desiring to build binaries for ARM64 (`aarch64`), one needs to use the
Visual Studio 2017 or 2019 or 2022 solution files, or use Meson with a
cross-compilation file, with a Windows 10 SDK that supports ARM64
builds. At this point, building the introspection files is not supported
for ARM64 builds, and you will need a Python 3.x interpreter and
glib-compile-resources binaries that run on the build machine.
For Visual Studio 2017 ARM64 builds, do also check the
`Directory.Build.props` file in `$(srcroot)/win32/vs15`
indicates a Windows 10 SDK version that supports ARM64 builds
exists on the build machine.
For building ARM64 binaries with the Visual Studio projects, prior to the
build, you may need to update `gtk3-build-defines.props` to pass in the variables as indicated earlier:
* GLIB_MKENUMS
* GLIB_GENMARSHAL
* GDBUS_CODEGEN
* GLIB_COMPILE_RESOURCES
* PYTHON
in the nmake command line indicated by `<GenerateRequiredSourcesBase>` so
that they point to the respective tools and scripts that will run on the
build machine. You may also need to update `gtk3-version-paths.props` to
update `<PythonDir>` to the installation of the Python 3.x interpreter
that will run on the build machine (or just update `PYTHON=...` in the
command line in `<GenerateRequiredSourcesBase>`). To carry out the actual
build using the solution files, use the "Configuration Manager" to add the
ARM64 build configs by copying the settings from the x64 configs, and then
build the solution.
The build instructions for such builds otherwise follow the standard Win32
(x86) and x64 builds, but you need to ensure that you have ARM64 builds of
the various dependencies.
It may still be possible to carry out the build and build the
introspection files with Python 2.7.x using older versions of GLib and
GObject-Introspection, but please note that this is not recommended
and one is on his/her own by doing so.
It is now supported to build with the Visual Studio projects directly
from a GIT checkout. Run in a Visual Studio command prompt, in
$(srcroot)/win32:
`nmake /f bootstrap-msvc.mak [PYTHON=...] [PERL=...] [FONT_FEATURES_DEMO=1] [FONT_FEATURES_USE_PANGOFT2=1] [USE_EGL=1]`
where `PYTHON` and `PERL` are the respective paths to the Python and PERL
interpreters, if they are not in your `%PATH%`-they are both required to
generate the full sets of project files, as well as the auxiliary build
files and headers that is not available in a GIT checkout and must be
generated prior to opening the project files.
For `FONT_FEATURES_DEMO`, `FONT_FEATURES_USE_PANGOFT2` and `USE_EGL`,
please refer to `win32\README_FEATURES_MSVC.md` for more details, to
enable features that is optional and not enabled by default (i.e. in the
release tarballs).
It is also possible to regenerate some or all of the visual studio
projects with the following, if necessary:
`nmake /f generate-msvc.mak [PYTHON=...] [FONT_FEATURES_DEMO=1] [FONT_FEATURES_USE_PANGOFT2=1] [USE_EGL=1] <target>`
Where target can be (they will update all related VS2008~2022 projects):
* `regenerate-demos-h-win32`: Regenerate the `gtk3-demo` projects along
with `demos.h.win32`, useful to enable or disable the Font Features
demo.
* `regenerate-gdk-vsproj`: Regenerate all the GDK projects with
`broadwayd`, useful to enable or disable EGL on Windows.
* `regenerate-gtk-vsproj`: Regenerate the `gtk-3` and `gailutil-3` library
projects.
* `regenerate-all-msvc-projs`: Re-generate all project files, and re-copy
all the Visual Studio 2010 project files for VS 2012~2022.
Using Meson (for Visual Studio and MinGW builds)
---
Meson can now be used to build GTK+-3.x with either MinGW or Visual Studio.
You will need the following items in addition to all the dependencies
listed above:
* Python 3.5 or later
* Meson build system, 0.48.0 or later
* Ninja (if not using the Visual Studio project generator for
Visual Studio 2010 or later)
* CMake (optional, used for dependency searching)
* pkg-config (optional, or some compatible tool, highly recommended)
For all Windows builds, note that unless `-Dbuiltin_immodules=no` is
specified, the input modules (immodules) are built directly into the GTK
DLL.
For building with Meson using Visual Studio, do the following:
* Create an empty build directory somewhere that is on the same drive
as the source tree, and launch the Visual Studio command prompt that
matches the build configuration (Visual Studio version and architecture),
and run the following:
* Ensure that both the installation directory of Python 3.5+ and its script
directory is in your `%PATH%`, as well as the Ninja, CMake and pkg-config
executables (if used). If a pkg-config compatible drop-in replacement
tool is being used, ensure that `PKG_CONFIG` is set to point to the
executable of that tool as well.
* For non-GNOME dependencies (such as Cairo and Harfbuzz), where pkg-config
files or CMake files could not be properly located, set `%INCLUDE%` and
`%LIB%` to ensure that their header files and .lib files can be found
respectively. The DLLs of those dependencies should also be in the
`%PATH%` during the build as well, especially if introspection files ar
to be built.
* For GNOME dependencies, the pkg-config files for those dependencies
should be searchable by `pkg-config` (or a compatible tool). Verify
this by running `$(PKG_CONFIG) --modversion <dependency>`.
* Run the following:
`meson <path_to_directory_of_this_file> --buildtype=... --prefix=...,
where `buildtype` can be:
* release
* debugoptimized
* debug
* plain.
Please refer to the Meson documentation for more details. You may also
wish to pass in `-Dbroadway_backend=true` if building the Broadway GDK
backend is desired, and/or pass in `-Dbuiltin_immodules=no` to build the
immodules as standalone DLLs that can be loaded by GTK dynamically. For
Visual Studio 2010 or later builds, you may pass in --backend=vs to
generate Visual Studio project files to be used to carry out the builds.
If you are building with Visual Studio 2008, note the following items as
well:
* For x64 builds, the compiler may hang when building the certain
files, due to optimization issues in the compiler. If this happens,
use the Windows Task Manager and terminate all `cl.exe` processes,
and the build will fail with the source files that did not finish
compiling due to the hang. Look for them in build.ninja in the build
directory, and change their compiler
flag `/O2` to `/O1`, and the compilation and linking should proceed
normally.
* At this time of writing, the following files are known to cause this
hang:
* gtk\gtkfilechoosernativewin32.c
* gtk\gtkfilesystemmodel.c
* gtk\gtktextsegment.c
* gtk\gtktextbtree.c
* gtk\gtkrbtree.c
* testsuite\gtk\treemodel.c
* testsuite\gtk\textbuffer.c
* testsuite\gtk\rbtree.c
* testsuite\gtk\icontheme.c
* Upon running install (via "ninja install"), it is likely that
`gtk-query-immodules-3.0.exe` will fail to run as it cannot find
`msvcr90.dll` or `msvcr90D.dll`. You can ignore this if you did not
specify `-Dbuiltin_immodules=no` when configuring via Meson.
If `-Dbuiltin_immodules=no` is specified, you need to run the
following after embedding the manifests as outlined in the next
point:
`$(gtk_install_prefix)\bin\gtk-query-immodules-3.0.exe > $(gtk_install_prefix)\lib\gtk-3.0\3.0.0\immodules.cache`
* You will need to run the following upon completing install, from the
build directory in the Visual Studio 2008/SDK 6.0 command prompt
(third line is not needed unless `-Dbuiltin_immodules=no` is
specified) so that the built binaries can run:
```
for /r %f in (*.dll.manifest) do if exist $(gtk_install_prefix)\bin\%~nf mt /manifest %f /outputresource:$(gtk_install_prefix)\bin\%~nf;2
for /r %f in (*.exe.manifest) do if exist $(gtk_install_prefix)\bin\%~nf mt /manifest %f /outputresource:$(gtk_install_prefix)\bin\%~nf;1
for /r %f in (*.dll.manifest) do if exist $(gtk_install_prefix)\lib\gtk-3.0\3.0.0\immodules\%~nf mt /manifest %f /outputresource:$(gtk_install_prefix)\lib\gtk-3.0\3.0.0\immodules\%~nf;2
```
* The more modern visual style for the print dialog is not applied for
Visual Studio 2008 builds. Any solutions to this is really
appreciated.
Support for all pre-2012 Visual Studio builds
---
This release of GTK+ requires at least the Windows 8.0 or later SDK in
order to be built successfully using Visual Studio, which means that
building with Visual Studio 2008 or 2010 is possible only with a special
setup and must be done in the command line with Ninja, if using Meson.
Please see
https://devblogs.microsoft.com/cppblog/using-the-windows-software-development-kit-sdk-for-windows-8-consumer-preview-with-visual-studio-2010/
for references; basically, assuming that your Windows 8.0 SDK is installed
in `C:\Program Files (x86)\Windows Kits\8.0` (`$(WIN8SDKDIR)` in short),
you need to ensure the following before invoking Meson to configure the build. Your project files or Visual Studio IDE must also be similarly
configured (using the Windows 8.1 SDK is also possible for Visual Studio
2008~2012, replacing `$(WIN8SDKDIR)` with `$(WIN81SDKDIR)`, which is in
`C:\Program Files (x86)\Windows Kits\8.1` unless otherwise indicated):
* Your `%INCLUDE%` (i.e. "Additional Include Directories" in the IDE)
must not include the Windows 7.0/7.1 SDK include directories,
and `$(WIN8SDKDIR)\include\um`, `$(WIN8SDKDIR)\include\um\share` and
`$(WIN8SDKDIR)\include\winrt` (in this order) must be before your stock
Visual Studio 2008/2010 header directories. If you have the DirectX
SDK (2010 June or earlier) installed, you should remove its include
directory from your `%INCLUDE%` as well.
* You must replace the Windows 7.0/7.1 SDK library directory in `%LIB%`
(i.e. "Additional Library Paths" in the IDE) with the Windows 8.0/8.1
SDK library directory, i.e. `$(WIN8SDKDIR)\lib\win8\um\[x86|x64]` or
`$(WIN81SDKDIR)\lib\winv6.3\um\[x86|x64]`.
If you have the DirectX SDK installed, you should remove its library
directory from your `%LIB%` as well.
* You must replace the Windows 7.0/7.1 SDK tools directory from your
`%PATH%` ("Executables Directories" in the IDE) with the Windows 8.0
SDK tools directory, i.e. `$(WIN8SDKDIR)\bin\[x86|x64]`. If you have
the DirectX SDK installed, you should remove its utility directory from
your `%PATH%` as well.
* The Windows 8.0 SDK headers may contain an `roapi.h` that cannot be
used under plain C, so to remedy that, change the following lines
(around lines 55-57) (this is not necessary for the Windows 8.1 or
later SDKs):
```
// RegisterActivationFactory/RevokeActivationFactory registration cookie
typedef struct {} *RO_REGISTRATION_COOKIE;
// RegisterActivationFactory/DllGetActivationFactory callback
```
to
```
// RegisterActivationFactory/RevokeActivationFactory registration cookie
#ifdef __cplusplus
typedef struct {} *RO_REGISTRATION_COOKIE;
#else
typedef struct _RO_REGISTRATION_COOKIE *RO_REGISTRATION_COOKIE; /* make this header includable in C files */
#endif
// RegisterActivationFactory/DllGetActivationFactory callback
```
This follows what is done in the Windows 8.1 SDK, which contains an
`roapi.h` that is usable under plain C. Please note that you might need
to copy that file into a location that is in your `%INCLUDE%` which
precedes the include path for the Windows 8.0 SDK headers, if you do not
have administrative privileges.
Visual Studio 2008 hacks
---
(Please see the section on Meson builds which touch on this topic)
Multi-threaded use of GTK+ on Win32
---
Multi-threaded GTK+ programs might work on Windows in special simple
cases, but not in general. Sorry. If you have all GTK+ and GDK calls
in the same thread, it might work. Otherwise, probably not at
all. Possible ways to fix this are being investigated.
* Tor Lillqvist <tml@iki.fi>, <tml@novell.com>
* Updated by Fan, Chun-wei <fanc999@yahoo.com.tw>
+10 -1
View File
@@ -230,6 +230,9 @@
/* Define to the version of this package. */
#mesondefine PACKAGE_VERSION
/* Define when building a shared library for Windows */
#mesondefine DLL_EXPORT
/* Use NSBundle functions to determine load paths for libraries, translations,
etc. */
#mesondefine QUARTZ_RELOCATION
@@ -244,6 +247,9 @@
/* Define to 1 if XInput 2.2 is available */
#mesondefine XINPUT_2_2
/* Define to 1 if XInput 2.4 is available */
#mesondefine XINPUT_2_4
/* Enable large inode numbers on Mac OS X 10.5. */
#ifndef _DARWIN_USE_64_BIT_INODE
# define _DARWIN_USE_64_BIT_INODE 1
@@ -286,4 +292,7 @@
#mesondefine ISO_CODES_PREFIX
/* Define if tracker3 is available */
#mesondefine HAVE_TRACKER3
#mesondefine HAVE_TRACKER3
/* Define if xdg_activation's wl-protocols definition is available */
#mesondefine HAVE_XDG_ACTIVATION
+17 -4
View File
@@ -144,6 +144,11 @@
#define HAVE_ROUND 1
#endif
/* Define to 1 if SetupDiGetDevicePropertyW() is available */
#ifdef _MSC_VER
#define HAVE_SETUP_DI_GET_DEVICE_PROPERTY_W 1
#endif
/* Define to 1 if sincos() is available */
/* #undef HAVE_SINCOS */
@@ -295,6 +300,9 @@
/* Define to 1 if XInput 2.2 is available */
/* #undef XINPUT_2_2 */
/* Define to 1 if XInput 2.4 is available */
/* #undef XINPUT_2_4 */
/* Define to 1 if the X Window System is missing or not being used. */
/* #undef X_DISPLAY_MISSING */
@@ -306,11 +314,16 @@
/* Number of bits in a file offset, on hosts where this is settable. */
/* #undef _FILE_OFFSET_BITS */
/* Define when building a shared library for Windows */
#define DLL_EXPORT 1
/* defines how to decorate public symbols while building */
#ifdef _MSC_VER
#define _GDK_EXTERN __declspec (dllexport) extern
#else
#define _GDK_EXTERN __attribute__((visibility("default"))) __declspec (dllexport) extern
#ifdef DLL_EXPORT
# ifdef _MSC_VER
# define _GDK_EXTERN __declspec (dllexport) extern
# else
# define _GDK_EXTERN __attribute__((visibility("default"))) __declspec (dllexport) extern
# endif
#endif
/* Define for large files, on AIX-style hosts. */
+54 -48
View File
@@ -10,8 +10,8 @@
m4_define([gtk_major_version], [3])
m4_define([gtk_minor_version], [24])
m4_define([gtk_micro_version], [28])
m4_define([gtk_interface_age], [24])
m4_define([gtk_micro_version], [35])
m4_define([gtk_interface_age], [31])
m4_define([gtk_binary_age],
[m4_eval(100 * gtk_minor_version + gtk_micro_version)])
m4_define([gtk_version],
@@ -395,7 +395,7 @@ if test "$enable_win32_backend" = "yes"; then
backend_immodules="$backend_immodules,ime"
GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_WIN32"
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32"
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lwinspool -lcomctl32 -lcomdlg32"
AM_CONDITIONAL(USE_WIN32, true)
PANGO_PACKAGES="pangowin32 pangocairo"
else
@@ -439,7 +439,8 @@ fi
PKG_PROG_PKG_CONFIG
WAYLAND_DEPENDENCIES="wayland-client >= wayland_required_version wayland-protocols >= wayland_protocols_required_version xkbcommon >= 0.2.0 wayland-cursor >= wayland_required_version wayland-egl"
WAYLAND_RUNTIME_DEPENDENCIES="wayland-client >= wayland_required_version xkbcommon >= 0.2.0 wayland-egl"
WAYLAND_DEPENDENCIES="wayland-protocols >= wayland_protocols_required_version $WAYLAND_RUNTIME_DEPENDENCIES"
if test "$enable_wayland_backend" = "maybe" ; then
AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no])
PKG_CHECK_EXISTS($WAYLAND_DEPENDENCIES, [have_wayland_deps=yes], [have_wayland_deps=no])
@@ -460,15 +461,26 @@ if test "$enable_wayland_backend" = "yes"; then
GDK_WINDOWING="$GDK_WINDOWING
#define GDK_WINDOWING_WAYLAND"
backend_immodules="$backend_immodules,wayland"
WAYLAND_PACKAGES="$WAYLAND_DEPENDENCIES"
WAYLAND_PACKAGES="$WAYLAND_RUNTIME_DEPENDENCIES"
AC_PATH_PROG([WAYLAND_SCANNER],[wayland-scanner],[no])
AS_IF([test "x$WAYLAND_SCANNER" = "xno"],
[AC_MSG_ERROR([Could not find wayland-scanner in your PATH, required for parsing wayland extension protocols])])
AC_SUBST([WAYLAND_SCANNER])
# For xdg-activation support
XDG_ACTIVATION_DEPENDENCIES="wayland-protocols >= 1.21"
PKG_CHECK_EXISTS($XDG_ACTIVATION_DEPENDENCIES, [have_xdg_activation_deps=yes], [have_xdg_activation_deps=no])
AC_MSG_CHECKING([for XDG_ACTIVATION_DEPENDENCIES])
AM_CONDITIONAL(USE_XDG_ACTIVATION, test "$have_xdg_activation_deps" = "yes")
if test "$have_xdg_activation_deps" = "yes" ; then
AC_DEFINE([HAVE_XDG_ACTIVATION], [1],
[Define if xdg_activation's wl-protocols definition is available])
fi
AM_CONDITIONAL(USE_WAYLAND, true)
else
AM_CONDITIONAL(USE_WAYLAND, false)
AM_CONDITIONAL(USE_XDG_ACTIVATION, false)
fi
# strip leading space
@@ -1166,13 +1178,23 @@ if test "x$enable_x11_backend" = xyes; then
AC_DEFINE(XINPUT_2_2, 1, [Define to 1 if XInput 2.2 is available]),
have_xinput2_2=no,
[[#include <X11/extensions/XInput2.h>]])])
LIBS="$gtk_save_LIBS"
if test "x$have_xinput2_2" = "xyes"; then
X_EXTENSIONS="$X_EXTENSIONS XI2.2"
else
X_EXTENSIONS="$X_EXTENSIONS XI2"
fi
AC_CHECK_MEMBER([XIGesturePinchEvent.type],
have_xinput2_4=yes
AC_DEFINE(XINPUT_2_4, 1, [Define to 1 if XInput 2.4 is available]),
have_xinput2_4=no,
[[#include <X11/extensions/XInput2.h>]])
if test "x$have_xinput2_4" = "xyes"; then
X_EXTENSIONS="$X_EXTENSIONS XI2.4"
fi
LIBS="$gtk_save_LIBS"
fi
AS_IF([test "x$have_xinput2" != "xyes"],
@@ -1394,17 +1416,35 @@ fi
##################################################
# Check for harfbuzz and pangoft2
##################################################
PKG_CHECK_MODULES(GTK_FONT_CHOOSER_WIDGET,
harfbuzz >= 0.9 pangoft2,
harfbuzz >= 2.2.0 pango >= 1.44.0,
build_font_demo=yes,
build_font_demo=no)
PKG_CHECK_MODULES(GTK_FONT_CHOOSER_WIDGET_FT,
harfbuzz >= 0.9 pangoft2,
build_font_demo_ft=yes,
build_font_demo_ft=no)
if test "x$build_font_demo" = xno; then
if test "x$build_font_demo_ft" = xyes; then
build_font_demo=yes
else
build_font_demo=no
fi
fi
AM_CONDITIONAL(BUILD_FONT_DEMO, [ test "x$build_font_demo" = xyes ])
if test "x$build_font_demo" = xyes; then
AC_DEFINE([HAVE_HARFBUZZ], 1, [defines whether we have HarfBuzz])
AC_DEFINE([HAVE_PANGOFT], 1, [defines whether we have pangoft2])
GTK_DEP_CFLAGS="$GTK_DEP_CFLAGS $GTK_FONT_CHOOSER_WIDGET_CFLAGS"
GTK_DEP_LIBS="$GTK_DEP_LIBS $GTK_FONT_CHOOSER_WIDGET_LIBS"
if test "x$build_font_demo_ft" = xyes; then
AC_DEFINE([HAVE_PANGOFT], 1, [defines whether we have pangoft2])
GTK_DEP_CFLAGS="$GTK_DEP_CFLAGS $GTK_FONT_CHOOSER_WIDGET_FT_CFLAGS"
GTK_DEP_LIBS="$GTK_DEP_LIBS $GTK_FONT_CHOOSER_WIDGET_FT_LIBS"
else
GTK_DEP_CFLAGS="$GTK_DEP_CFLAGS $GTK_FONT_CHOOSER_WIDGET_CFLAGS"
GTK_DEP_LIBS="$GTK_DEP_LIBS $GTK_FONT_CHOOSER_WIDGET_LIBS"
fi
fi
if $PKG_CONFIG --exists x11; then
@@ -1576,38 +1616,6 @@ fi
AM_CONDITIONAL(HAVE_TRACKER3, test "x$have_tracker3" = "xyes")
# Checks to see if we should compile with cloudprint backend for GTK+
#
AC_ARG_ENABLE(cloudprint,
[AS_HELP_STRING([--disable-cloudprint],
[disable cloudprint print backend])],,
[enable_cloudprint=auto])
if test "x$enable_cloudprint" = "xno"; then
AM_CONDITIONAL(HAVE_CLOUDPRINT, false)
else
PKG_CHECK_MODULES(REST, [rest-0.7], have_rest=yes, have_rest=no)
PKG_CHECK_MODULES(JSON_GLIB, [json-glib-1.0], have_json_glib=yes, have_json_glib=no)
if test "x$have_rest" = "xyes" -a "x$have_json_glib" = "xyes"; then
PRINT_BACKENDS="$PRINT_BACKENDS cloudprint"
have_cloudprint=yes
fi
AM_CONDITIONAL(HAVE_CLOUDPRINT, test "x$have_cloudprint" = "xyes")
fi
if test "x$enable_cloudprint" = "xyes" -a "x$have_rest" = "xno"; then
AC_MSG_ERROR([
*** rest not found.
])
fi
if test "x$enable_cloudprint" = "xyes" -a "x$have_json_glib" = "xno"; then
AC_MSG_ERROR([
*** json-glib not found.
])
fi
gtk_save_cppflags="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $GTK_DEP_CFLAGS $GDK_DEP_CFLAGS"
@@ -1650,9 +1658,6 @@ fi
if test "$have_papi" != "yes" -a "$have_cups" != "yes"; then
GTK_PRINT_BACKENDS="$GTK_PRINT_BACKENDS,lpr"
fi
if test "$have_cloudprint" = "yes"; then
GTK_PRINT_BACKENDS="$GTK_PRINT_BACKENDS,cloudprint"
fi
AC_SUBST(GTK_PRINT_BACKENDS)
################################################################
@@ -1969,12 +1974,14 @@ win32/config-msvc.mak
win32/vs9/Makefile
win32/vs9/gtk3-version-paths.vsprops
win32/vs10/Makefile
win32/vs10/gtk3-version-paths.props
win32/vs11/Makefile
win32/vs12/Makefile
win32/vs14/Makefile
win32/vs15/Makefile
win32/vs16/Makefile
win32/vs17/Makefile
win32/vs1x-props/Makefile
win32/vs1x-props/gtk3-version-paths.props
gdk/Makefile
gdk/broadway/Makefile
gdk/x11/Makefile
@@ -1994,7 +2001,6 @@ modules/Makefile
modules/input/Makefile
modules/printbackends/Makefile
modules/printbackends/cups/Makefile
modules/printbackends/cloudprint/Makefile
modules/printbackends/lpr/Makefile
modules/printbackends/file/Makefile
modules/printbackends/papi/Makefile
+2
View File
@@ -0,0 +1,2 @@
demos.h.win32
demos.h
+10 -87
View File
@@ -1,87 +1,15 @@
## Makefile.am for gtk+/demos
include $(top_srcdir)/Makefile.decl
## These should be in the order you want them to appear in the
## demo app, which means alphabetized by demo title, not filename
demos_base = \
application_demo.c \
assistant.c \
builder.c \
button_box.c \
changedisplay.c \
clipboard.c \
colorsel.c \
combobox.c \
css_accordion.c \
css_basics.c \
css_blendmodes.c \
css_multiplebgs.c \
css_pixbufs.c \
css_shadows.c \
cursors.c \
dialog.c \
drawingarea.c \
editable_cells.c \
entry_buffer.c \
entry_completion.c \
event_axes.c \
expander.c \
filtermodel.c \
fishbowl.c \
foreigndrawing.c \
gestures.c \
glarea.c \
headerbar.c \
hypertext.c \
iconview.c \
iconview_edit.c \
images.c \
infobar.c \
links.c \
listbox.c \
flowbox.c \
list_store.c \
markup.c \
menus.c \
modelbutton.c \
offscreen_window.c \
offscreen_window2.c \
overlay.c \
overlay2.c \
paint.c \
panes.c \
pickers.c \
pixbufs.c \
popover.c \
printing.c \
revealer.c \
rotated_text.c \
scale.c \
search_entry.c \
search_entry2.c \
shortcuts.c \
sidebar.c \
sizegroup.c \
spinbutton.c \
spinner.c \
stack.c \
tabs.c \
textmask.c \
textview.c \
textscroll.c \
theming_style_classes.c \
toolpalette.c \
transparent.c \
tree_store.c
include $(srcdir)/demos-sources.mak
demos_opt =
if BUILD_FONT_DEMO
demos_opt += font_features.c
demos_opt += $(font_features_demo)
endif
if OS_UNIX
demos_opt += pagesetup.c
demos_opt += $(page_setup_demo)
endif
demos = $(demos_base) $(demos_opt)
@@ -133,22 +61,21 @@ demos.h: $(demos) geninclude.pl
demos.h.win32: $(demos_base) geninclude.pl
$(AM_V_GEN) (here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos_base)) > demos.h.win32
nodist_gtk3_demo_SOURCES = demos.h
nodist_gtk3_demo_SOURCES = demos.h demo_resources.c
gtk3_demo_SOURCES = \
$(demos) \
gtkfishbowl.c \
gtkfishbowl.h \
demo_resources.c \
main.c
gtk3_demo_DEPENDENCIES = $(DEPS)
gtk3_demo_LDADD = $(LDADDS)
gtk3_demo_LDFLAGS = -export-dynamic
gtk3_demo_application_SOURCES = \
application.c \
demo_resources.c
nodist_gtk3_demo_application_SOURCES = demo_resources.c
gtk3_demo_application_SOURCES = application.c
gtk3_demo_application_LDADD = $(LDADDS)
@@ -188,20 +115,16 @@ uninstall-update-icon-cache:
test -n "$(DESTDIR)" || $(update_icon_cache) "$(iconthemedir)"
# ------------------- MSVC Build Items ----------------
MSVCPROJS = gtk3-demo gtk3-demo-application
MSVCPROJS = gtk3-demo
gtk3_demo_FILES = $(gtk3_demo_SOURCES)
gtk3_demo_EXCLUDES = font_features.c|pagesetup.c
gtk3_demo_application_FILES = $(gtk3_demo_application_SOURCES)
gtk3_demo_application_EXCLUDES = dummy
include $(top_srcdir)/win32/Makefile.msvcproj
dist-hook: \
$(top_builddir)/win32/vs9/gtk3-demo.vcproj \
$(top_builddir)/win32/vs9/gtk3-demo-application.vcproj
$(top_builddir)/win32/vs9/gtk3-demo.vcproj
DISTCLEANFILES = demos.h demos.h.win32
DISTCLEANFILES = demos.h demos.h.win32 demo_resources.c
-include $(top_srcdir)/git.mk
+75
View File
@@ -0,0 +1,75 @@
## These should be in the order you want them to appear in the
## demo app, which means alphabetized by demo title, not filename
demos_base = \
application_demo.c \
assistant.c \
builder.c \
button_box.c \
changedisplay.c \
clipboard.c \
colorsel.c \
combobox.c \
css_accordion.c \
css_basics.c \
css_blendmodes.c \
css_multiplebgs.c \
css_pixbufs.c \
css_shadows.c \
cursors.c \
dialog.c \
drawingarea.c \
editable_cells.c \
entry_buffer.c \
entry_completion.c \
event_axes.c \
expander.c \
filtermodel.c \
fishbowl.c \
foreigndrawing.c \
gestures.c \
glarea.c \
headerbar.c \
hypertext.c \
iconview.c \
iconview_edit.c \
images.c \
infobar.c \
links.c \
listbox.c \
flowbox.c \
list_store.c \
markup.c \
menus.c \
modelbutton.c \
offscreen_window.c \
offscreen_window2.c \
overlay.c \
overlay2.c \
paint.c \
panes.c \
pickers.c \
pixbufs.c \
popover.c \
printing.c \
revealer.c \
rotated_text.c \
scale.c \
search_entry.c \
search_entry2.c \
shortcuts.c \
sidebar.c \
sizegroup.c \
spinbutton.c \
spinner.c \
stack.c \
tabs.c \
textmask.c \
textview.c \
textscroll.c \
theming_style_classes.c \
toolpalette.c \
transparent.c \
tree_store.c
font_features_demo = font_features.c
page_setup_demo = pagesetup.c
+60 -11
View File
@@ -9,10 +9,23 @@
*/
#include <gtk/gtk.h>
#if PANGO_VERSION_CHECK(1,44,0)
# if !HB_VERSION_ATLEAST(2,2,0)
# define FONT_FEATURES_USE_PANGOFT2 1
# endif
#else
# define FONT_FEATURES_USE_PANGOFT2 1
#endif
#ifdef FONT_FEATURES_USE_PANGOFT2
#include <pango/pangofc-font.h>
#include <hb.h>
#include <hb-ot.h>
#include <hb-ft.h>
#else
#include <hb-ot.h>
#endif
static GtkWidget *label;
static GtkWidget *settings;
@@ -205,19 +218,32 @@ static void
update_script_combo (void)
{
GtkListStore *store;
hb_font_t *hb_font;
hb_font_t *hb_font = NULL;
gint i, j, k, l;
FT_Face ft_face;
PangoFont *pango_font;
GHashTable *tags;
GHashTableIter iter;
TagPair *pair;
gboolean cleanup_hb_face = FALSE;
#ifdef FONT_FEATURES_USE_PANGOFT2
FT_Face ft_face;
#endif
store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT, G_TYPE_UINT);
pango_font = get_pango_font ();
ft_face = pango_fc_font_lock_face (PANGO_FC_FONT (pango_font)),
hb_font = hb_ft_font_create (ft_face, NULL);
#ifdef FONT_FEATURES_USE_PANGOFT2
if (PANGO_IS_FC_FONT (pango_font))
{
ft_face = pango_fc_font_lock_face (PANGO_FC_FONT (pango_font)),
hb_font = hb_ft_font_create (ft_face, NULL);
cleanup_hb_face = TRUE;
}
#else
hb_font = pango_font_get_hb_font (pango_font);
#endif
tags = g_hash_table_new_full (tag_pair_hash, tag_pair_equal, g_free, NULL);
@@ -264,10 +290,15 @@ update_script_combo (void)
}
}
hb_face_destroy (hb_face);
if (cleanup_hb_face)
hb_face_destroy (hb_face);
}
pango_fc_font_unlock_face (PANGO_FC_FONT (pango_font));
#ifdef FONT_FEATURES_USE_PANGOFT2
if (PANGO_IS_FC_FONT (pango_font))
pango_fc_font_unlock_face (PANGO_FC_FONT (pango_font));
#endif
g_object_unref (pango_font);
g_hash_table_iter_init (&iter, tags);
@@ -346,8 +377,12 @@ update_features (void)
GtkTreeIter iter;
guint script_index, lang_index;
PangoFont *pango_font;
hb_font_t *hb_font = NULL;
gboolean cleanup_hb_face = FALSE;
#ifdef FONT_FEATURES_USE_PANGOFT2
FT_Face ft_face;
hb_font_t *hb_font;
#endif
for (i = 0; i < num_features; i++)
gtk_widget_set_opacity (icon[i], 0);
@@ -364,8 +399,17 @@ update_features (void)
-1);
pango_font = get_pango_font ();
ft_face = pango_fc_font_lock_face (PANGO_FC_FONT (pango_font)),
hb_font = hb_ft_font_create (ft_face, NULL);
#ifdef FONT_FEATURES_USE_PANGOFT2
if (PANGO_IS_FC_FONT (pango_font))
{
ft_face = pango_fc_font_lock_face (PANGO_FC_FONT (pango_font)),
hb_font = hb_ft_font_create (ft_face, NULL);
cleanup_hb_face = TRUE;
}
#else
hb_font = pango_font_get_hb_font (pango_font);
#endif
if (hb_font)
{
@@ -397,10 +441,15 @@ update_features (void)
}
}
hb_face_destroy (hb_face);
if (cleanup_hb_face)
hb_face_destroy (hb_face);
}
pango_fc_font_unlock_face (PANGO_FC_FONT (pango_font));
#ifdef FONT_FEATURES_USE_PANGOFT2
if (PANGO_IS_FC_FONT (pango_font))
pango_fc_font_unlock_face (PANGO_FC_FONT (pango_font));
#endif
g_object_unref (pango_font);
}
+1 -1
View File
@@ -160,7 +160,7 @@ do_gestures (GtkWidget *do_widget)
gtk_container_add (GTK_CONTAINER (window), drawing_area);
gtk_widget_add_events (drawing_area,
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
GDK_POINTER_MOTION_MASK | GDK_TOUCH_MASK);
GDK_POINTER_MOTION_MASK | GDK_TOUCH_MASK | GDK_TOUCHPAD_GESTURE_MASK);
g_signal_connect (drawing_area, "draw",
G_CALLBACK (drawing_area_draw), NULL);
+7 -1
View File
@@ -76,7 +76,13 @@ demos = files([
gtkdemo_deps = [libgtk_dep]
if harfbuzz_dep.found() and pangoft_dep.found()
if pango_dep.version().version_compare('>=1.44.0') and harfbuzz_dep.found() and cc.has_header_symbol(
'hb-ot.h',
'hb_ot_var_get_axis_count',
dependencies: harfbuzz_dep
)
demos += files('font_features.c')
elif harfbuzz_dep.found() and pangoft_dep.found()
demos += files('font_features.c')
gtkdemo_deps += [harfbuzz_dep, pangoft_dep]
endif
+5 -12
View File
@@ -16,16 +16,19 @@ bin_PROGRAMS = gtk3-icon-browser
desktopdir = $(datadir)/applications
dist_desktop_DATA = gtk3-icon-browser.desktop
nodist_gtk3_icon_browser_SOURCES = resources.c
gtk3_icon_browser_SOURCES = \
main.c \
iconbrowserapp.c iconbrowserapp.h \
iconbrowserwin.c iconbrowserwin.h \
iconstore.c iconstore.h \
resources.c
iconstore.c iconstore.h
BUILT_SOURCES = \
resources.c
DISTCLEANFILES = resources.c
resources.c: iconbrowser.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/iconbrowser.gresource.xml)
$(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/iconbrowser.gresource.xml \
--target=$@ --sourcedir=$(srcdir) --generate-source
@@ -37,14 +40,4 @@ EXTRA_DIST = \
icon.list \
meson.build
# ------------------- MSVC Build Items ----------------
MSVCPROJS = gtk3-icon-browser
gtk3_icon_browser_FILES = $(gtk3_icon_browser_SOURCES)
gtk3_icon_browser_EXCLUDES = dummy
include $(top_srcdir)/win32/Makefile.msvcproj
dist-hook: $(top_builddir)/win32/vs9/gtk3-icon-browser.vcproj
-include $(top_srcdir)/git.mk
@@ -2,7 +2,6 @@
Name=Icon Browser
Comment=An application that shows themed icons
Exec=gtk3-icon-browser
Icon=gtk3-icon-browser
Terminal=false
Type=Application
StartupNotify=true
+5 -3
View File
@@ -5,9 +5,9 @@ bin_PROGRAMS = gtk3-widget-factory
desktopdir = $(datadir)/applications
dist_desktop_DATA = gtk3-widget-factory.desktop
gtk3_widget_factory_SOURCES = \
widget-factory.c \
widget_factory_resources.c
nodist_gtk3_widget_factory_SOURCES = widget_factory_resources.c
gtk3_widget_factory_SOURCES = widget-factory.c
BUILT_SOURCES = \
widget_factory_resources.c
@@ -69,4 +69,6 @@ EXTRA_DIST += \
data/symbolic-source.svg \
meson.build
DISTCLEANFILES = widget_factory_resources.c
-include $(top_srcdir)/git.mk
+9 -4
View File
@@ -503,14 +503,19 @@ if get_option('man') and xsltproc.found()
[ 'gtk-update-icon-cache', '1', ],
[ 'gtk-encode-symbolic-svg', '1', ],
[ 'gtk-launch', '1', ],
[ 'gtk3-demo', '1', ],
[ 'gtk3-demo-application', '1', ],
[ 'gtk3-widget-factory', '1', ],
[ 'gtk3-icon-browser', '1', ],
[ 'gtk-builder-tool', '1', ],
[ 'gtk-query-settings', '1', ],
]
if get_option('demos')
man_files += [
[ 'gtk3-demo', '1', ],
[ 'gtk3-demo-application', '1', ],
[ 'gtk3-widget-factory', '1', ],
[ 'gtk3-icon-browser', '1', ],
]
endif
if broadway_enabled
man_files += [[ 'broadwayd', '1', ]]
endif
+3 -1
View File
@@ -5,7 +5,7 @@ app10_resources = gnome.compile_resources(
source_dir: '.'
)
app10_schemas = gnome.compile_schemas()
app10_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app10 = executable(
@@ -21,3 +21,5 @@ app10 = executable(
app10_schemas,
dependencies: libgtk_dep
)
install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+3 -1
View File
@@ -5,7 +5,7 @@ app5_resources = gnome.compile_resources(
source_dir: '.'
)
app5_schemas = gnome.compile_schemas()
app5_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app5 = executable(
@@ -19,3 +19,5 @@ app5 = executable(
app5_schemas,
dependencies: libgtk_dep
)
install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+3 -1
View File
@@ -5,7 +5,7 @@ app6_resources = gnome.compile_resources(
source_dir: '.'
)
app6_schemas = gnome.compile_schemas()
app6_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app6 = executable(
@@ -21,3 +21,5 @@ app6 = executable(
app6_schemas,
dependencies: libgtk_dep
)
install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+3 -1
View File
@@ -5,7 +5,7 @@ app7_resources = gnome.compile_resources(
source_dir: '.'
)
app7_schemas = gnome.compile_schemas()
app7_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app7 = executable(
@@ -21,3 +21,5 @@ app7 = executable(
app7_schemas,
dependencies: libgtk_dep
)
install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+3 -1
View File
@@ -5,7 +5,7 @@ app8_resources = gnome.compile_resources(
source_dir: '.'
)
app8_schemas = gnome.compile_schemas()
app8_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app8 = executable(
@@ -21,3 +21,5 @@ app8 = executable(
app8_schemas,
dependencies: libgtk_dep
)
install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+3 -1
View File
@@ -5,7 +5,7 @@ app9_resources = gnome.compile_resources(
source_dir: '.'
)
app9_schemas = gnome.compile_schemas()
app9_schemas = gnome.compile_schemas(depend_files: files(['org.gtk.exampleapp.gschema.xml']))
app9 = executable(
@@ -21,3 +21,5 @@ app9 = executable(
app9_schemas,
dependencies: libgtk_dep
)
install_data('org.gtk.exampleapp.gschema.xml', install_dir: gtk_schemasdir)
+1 -1
View File
@@ -182,7 +182,7 @@ main (int argc,
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
app = gtk_application_new ("org.gtk.example", 0);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
+1 -1
View File
@@ -66,7 +66,7 @@ main (int argc,
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
app = gtk_application_new ("org.gtk.example", 0);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
+1 -1
View File
@@ -37,7 +37,7 @@ main (int argc,
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
app = gtk_application_new ("org.gtk.example", 0);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
+10 -11
View File
@@ -2,15 +2,15 @@
static gboolean
window_key_press_event_cb (GtkWidget *window,
GdkEvent *event,
GtkSearchBar *search_bar)
GdkEvent *event,
GtkSearchBar *search_bar)
{
return gtk_search_bar_handle_event (search_bar, event);
}
static void
activate_cb (GtkApplication *app,
gpointer user_data)
gpointer user_data)
{
GtkWidget *window;
GtkWidget *search_bar;
@@ -40,19 +40,18 @@ activate_cb (GtkApplication *app,
gtk_search_bar_connect_entry (GTK_SEARCH_BAR (search_bar), GTK_ENTRY (entry));
g_signal_connect (window, "key-press-event",
G_CALLBACK (window_key_press_event_cb), search_bar);
G_CALLBACK (window_key_press_event_cb),
search_bar);
}
gint
main (gint argc,
gchar *argv[])
int
main (int argc,
char *argv[])
{
GtkApplication *app;
app = gtk_application_new ("org.gtk.Example.GtkSearchBar",
G_APPLICATION_FLAGS_NONE);
g_signal_connect (app, "activate",
G_CALLBACK (activate_cb), NULL);
app = gtk_application_new ("org.gtk.Example.GtkSearchBar", 0);
g_signal_connect (app, "activate", G_CALLBACK (activate_cb), NULL);
return g_application_run (G_APPLICATION (app), argc, argv);
}
+1 -1
View File
@@ -19,7 +19,7 @@ main (int argc,
GtkApplication *app;
int status;
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
app = gtk_application_new ("org.gtk.example", 0);
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
+5 -263
View File
@@ -1,5 +1,7 @@
## Makefile.am for gtk+/gdk
include $(top_srcdir)/Makefile.decl
include gdk-sources.inc
-include $(INTROSPECTION_MAKEFILE)
INTROSPECTION_GIRS =
INTROSPECTION_SCANNER_ENV = \
@@ -60,138 +62,6 @@ LDADD = \
-rpath $(libdir) \
$(no_undefined)
#
# setup source file variables
#
#
# GDK header files for public installation (non-generated)
#
#
gdk_public_h_sources = \
gdk.h \
gdk-autocleanup.h \
gdkapplaunchcontext.h \
gdkcairo.h \
gdkcursor.h \
gdkdevice.h \
gdkdevicepad.h \
gdkdevicetool.h \
gdkdevicemanager.h \
gdkdisplay.h \
gdkdisplaymanager.h \
gdkdnd.h \
gdkdrawingcontext.h \
gdkevents.h \
gdkframetimings.h \
gdkglcontext.h \
gdkkeys.h \
gdkkeysyms.h \
gdkkeysyms-compat.h \
gdkmain.h \
gdkmonitor.h \
gdkpango.h \
gdkframeclock.h \
gdkpixbuf.h \
gdkprivate.h \
gdkproperty.h \
gdkrectangle.h \
gdkrgba.h \
gdkscreen.h \
gdkseat.h \
gdkselection.h \
gdktestutils.h \
gdkthreads.h \
gdktypes.h \
gdkvisual.h \
gdkwindow.h
deprecated_h_sources = \
deprecated/gdkcolor.h
gdk_h_sources = \
$(gdk_public_h_sources) \
$(deprecated_h_sources)
gdk_private_headers = \
gdk-private.h \
gdkapplaunchcontextprivate.h \
gdkconstructor.h \
gdkcursorprivate.h \
gdkdevicemanagerprivate.h \
gdkdeviceprivate.h \
gdkdevicepadprivate.h \
gdkdevicetoolprivate.h \
gdkdisplaymanagerprivate.h \
gdkdisplayprivate.h \
gdkdndprivate.h \
gdkdrawingcontextprivate.h \
gdkframeclockidle.h \
gdkframeclockprivate.h \
gdkglcontextprivate.h \
gdkmonitorprivate.h \
gdkprofilerprivate.h \
gdkscreenprivate.h \
gdkseatprivate.h \
gdkseatdefaultprivate.h \
gdkinternals.h \
gdkintl.h \
gdkkeysprivate.h \
gdkvisualprivate.h \
gdkx.h
deprecated_c_sources = \
deprecated/gdkcolor.c
gdk_c_sources = \
$(deprecated_c_sources) \
gdk-private.c \
gdk.c \
gdkapplaunchcontext.c \
gdkcairo.c \
gdkcursor.c \
gdkdeprecated.c \
gdkdevice.c \
gdkdevicepad.c \
gdkdevicetool.c \
gdkdevicemanager.c \
gdkdisplay.c \
gdkdisplaymanager.c \
gdkdnd.c \
gdkdrawingcontext.c \
gdkevents.c \
gdkframetimings.c \
gdkgl.c \
gdkglcontext.c \
gdkglobals.c \
gdkkeys.c \
gdkkeyuni.c \
gdkmonitor.c \
gdkoffscreenwindow.c \
gdkframeclock.c \
gdkframeclockidle.c \
gdkpango.c \
gdkpixbuf-drawable.c \
gdkprofiler.c \
gdkproperty.c \
gdkrectangle.c \
gdkrgba.c \
gdkscreen.c \
gdkseat.c \
gdkseatdefault.c \
gdkselection.c \
gdkvisual.c \
gdkwindow.c \
gdkwindowimpl.c
gdk_built_sources = \
gdkenumtypes.h \
gdkenumtypes.c \
gdkmarshalers.h \
gdkmarshalers.c \
gdkresources.h \
gdkresources.c \
gdkversionmacros.h
#
# setup GDK sources and their dependencies
#
@@ -201,7 +71,7 @@ gdkinclude_HEADERS = $(gdk_public_h_sources)
nodist_gdkinclude_HEADERS = gdkconfig.h gdkenumtypes.h gdkversionmacros.h
deprecatedincludedir = $(includedir)/gtk-3.0/gdk/deprecated
deprecatedinclude_HEADERS = $(deprecated_h_sources)
deprecatedinclude_HEADERS = $(gdk_deprecated_h_sources)
common_sources = \
$(gdk_private_headers) \
@@ -259,57 +129,6 @@ if OS_WIN32
Gdk_3_0_gir_CFLAGS += -I$(srcdir)/win32 -I$(srcdir)
endif
if USE_X11
x11_introspection_files = \
x11/gdkapplaunchcontext-x11.c \
x11/gdkasync.c \
x11/gdkcursor-x11.c \
x11/gdkdevice-core-x11.c \
x11/gdkdevicemanager-core-x11.c \
x11/gdkdevicemanager-x11.c \
x11/gdkdevicemanager-xi2.c \
x11/gdkdevice-xi2.c \
x11/gdkdisplay-x11.c \
x11/gdkdisplaymanager-x11.c \
x11/gdkdnd-x11.c \
x11/gdkeventsource.c \
x11/gdkeventtranslator.c \
x11/gdkgeometry-x11.c \
x11/gdkglcontext-x11.c \
x11/gdkkeys-x11.c \
x11/gdkmain-x11.c \
x11/gdkmonitor-x11.c \
x11/gdkproperty-x11.c \
x11/gdkscreen-x11.c \
x11/gdkselection-x11.c \
x11/gdksettings.c \
x11/gdktestutils-x11.c \
x11/gdkvisual-x11.c \
x11/gdkwindow-x11.c \
x11/gdkxftdefaults.c \
x11/gdkxid.c \
x11/xsettings-client.c \
x11/gdkx.h \
x11/gdkx11applaunchcontext.h \
x11/gdkx11cursor.h \
x11/gdkx11device.h \
x11/gdkx11device-core.h \
x11/gdkx11device-xi2.h \
x11/gdkx11devicemanager.h \
x11/gdkx11devicemanager-core.h \
x11/gdkx11devicemanager-xi2.h \
x11/gdkx11display.h \
x11/gdkx11displaymanager.h \
x11/gdkx11dnd.h \
x11/gdkx11glcontext.h \
x11/gdkx11keys.h \
x11/gdkx11monitor.h \
x11/gdkx11property.h \
x11/gdkx11screen.h \
x11/gdkx11selection.h \
x11/gdkx11utils.h \
x11/gdkx11visual.h \
x11/gdkx11window.h
GdkX11-3.0.gir: libgdk-3.la Gdk-3.0.gir Makefile
GdkX11_3_0_gir_SCANNERFLAGS = \
--identifier-prefix=Gdk \
@@ -324,36 +143,6 @@ INTROSPECTION_GIRS += GdkX11-3.0.gir
endif # USE_X11
w32_introspection_files = \
win32/gdkcursor-win32.c \
win32/gdkdevicemanager-win32.c \
win32/gdkdevice-virtual.c \
win32/gdkdevice-win32.c \
win32/gdkdevice-wintab.c \
win32/gdkdisplaymanager-win32.c \
win32/gdkdisplay-win32.c \
win32/gdkdnd-win32.c \
win32/gdkevents-win32.c \
win32/gdkgeometry-win32.c \
win32/gdkglobals-win32.c \
win32/gdkkeys-win32.c \
win32/gdkmain-win32.c \
win32/gdkproperty-win32.c \
win32/gdkscreen-win32.c \
win32/gdkselection-win32.c \
win32/gdktestutils-win32.c \
win32/gdkwin32.h \
win32/gdkwin32cursor.h \
win32/gdkwin32display.h \
win32/gdkwin32displaymanager.h \
win32/gdkwin32dnd.h \
win32/gdkwin32id.c \
win32/gdkwin32keys.h \
win32/gdkwin32misc.h \
win32/gdkwin32screen.h \
win32/gdkwin32window.h \
win32/gdkwindow-win32.c
if OS_WIN32
GdkWin32-3.0.gir: libgdk-3.la Gdk-3.0.gir Makefile
GdkWin32_3_0_gir_SCANNERFLAGS = \
@@ -414,7 +203,6 @@ lib_LTLIBRARIES = libgdk-3.la
MAINTAINERCLEANFILES = $(gdk_built_sources) stamp-gdkenumtypes.h
EXTRA_DIST += \
$(gdk_built_sources) \
fallback-c89.c
install-exec-hook:
@@ -499,59 +287,13 @@ gdkresources.c: gdk.gresource.xml $(resource_files)
# ------------------- MSVC Build Items ----------------
MSVCPROJS = gdk-3
gdk_3_FILES = $(libgdk_3_la_SOURCES)
gdk_3_FILES = $(gdk_c_sources)
gdk_3_EXCLUDES = dummy
gdk_3_HEADERS_DIR = $(gdkincludedir)
gdk_3_HEADERS_INST = \
$(gdkinclude_HEADERS) \
$(deprecatedinclude_HEADERS) \
$(nodist_gdkinclude_HEADERS)
gdk_3_HEADERS_EXCLUDES = dummy
include $(top_srcdir)/win32/Makefile.msvcproj
if HAVE_INTROSPECTION
# Introspection Items for MSVC
MSVC_INTROSPECT_GIRS = Gdk-3.0.gir GdkWin32-3.0.gir
BASE_MSVC_GIR_CFLAGS = \
$(GDK_CFLAGS_DEFINES) \
-I.. -I../gdk -I../gdk/win32
INTROSPECTION_INTERMEDIATE_ITEMS = \
$(top_builddir)/win32/Gdk-3.0.gir.msvc.introspect \
$(top_builddir)/win32/Gdk_3_0_gir_list \
$(top_builddir)/win32/GdkWin32-3.0.gir.msvc.introspect \
$(top_builddir)/win32/GdkWin32_3_0_gir_list
Gdk_3_0_gir_MSVC_FILES = $(introspection_files)
Gdk_3_0_gir_MSVC_EXPORT_PACKAGES = $(Gdk_3_0_gir_EXPORT_PACKAGES)
Gdk_3_0_gir_MSVC_INCLUDE_GIRS = $(Gdk_3_0_gir_INCLUDES)
Gdk_3_0_gir_MSVC_LIBS = gdk-3.0
Gdk_3_0_gir_MSVC_CFLAGS = $(BASE_MSVC_GIR_CFLAGS)
Gdk_3_0_gir_MSVC_SCANNERFLAGS = $(Gdk_3_0_gir_SCANNERFLAGS)
GdkWin32_3_0_gir_MSVC_FILES = $(w32_introspection_files)
GdkWin32_3_0_gir_MSVC_INCLUDE_GIRS = $(GdkWin32_3_0_gir_INCLUDES)
GdkWin32_3_0_gir_MSVC_LIBS = $(Gdk_3_0_gir_MSVC_LIBS)
GdkWin32_3_0_gir_MSVC_CFLAGS = $(BASE_MSVC_GIR_CFLAGS)
GdkWin32_3_0_gir_MSVC_SCANNERFLAGS = \
--identifier-prefix=Gdk \
--c-include="gdk/gdkwin32.h" \
--include-uninstalled='./vs$$$$(VSVER)/$$$$(CFG)/$$$$(PLAT)/bin/Gdk-3.0.gir'
include $(top_srcdir)/win32/Makefile.msvc-introspection
else
INTROSPECTION_INTERMEDIATE_ITEMS =
endif
dist-hook: \
$(top_builddir)/win32/vs9/gdk-3.vcproj \
$(top_builddir)/win32/vs9/gdk-3.headers \
$(INTROSPECTION_INTERMEDIATE_ITEMS)
$(top_builddir)/win32/vs9/gdk-3.vcproj
DISTCLEANFILES = gdkconfig.h stamp-gc-h
+6 -57
View File
@@ -1,5 +1,6 @@
## Process this file with automake to produce Makefile.in
include $(top_srcdir)/Makefile.decl
include gdk-broadway-sources.inc
NULL =
libgdkincludedir = $(includedir)/gtk-3.0/gdk
@@ -23,15 +24,7 @@ noinst_LTLIBRARIES = libgdk-broadway.la
bin_PROGRAMS = broadwayd
libgdkinclude_HEADERS = \
gdkbroadway.h
libgdkbroadwayinclude_HEADERS = \
gdkbroadwaydisplay.h \
gdkbroadwaywindow.h \
gdkbroadwaycursor.h \
gdkbroadwaymonitor.h \
gdkbroadwayvisual.h
libgdkinclude_HEADERS = $(GDK_PUBLIC_H_SRCS_BROADWAY)
EXTRA_DIST += toarray.pl
@@ -46,40 +39,12 @@ broadwayjs.h: broadway.js rawinflate.min.js
EXTRA_DIST += broadway.js rawinflate.min.js
# built headers that don't get installed
broadway_built_private_headers = \
clienthtml.h \
broadwayjs.h
broadway_built_sources = \
${broadway_built_private_headers}
$(broadway_built_private_headers)
libgdk_broadway_la_SOURCES = \
${broadway_built_private_headers}\
gdkcursor-broadway.c \
gdkdevice-broadway.h \
gdkdevice-broadway.c \
gdkdevicemanager-broadway.h \
gdkdevicemanager-broadway.c \
gdkdisplay-broadway.c \
gdkdisplay-broadway.h \
gdkdnd-broadway.c \
gdkeventsource.c \
gdkeventsource.h \
gdkglobals-broadway.c \
gdkkeys-broadway.c \
gdkmonitor-broadway.c \
gdkmonitor-broadway.h \
gdkproperty-broadway.c \
gdkscreen-broadway.c \
gdkscreen-broadway.h \
gdkselection-broadway.c \
gdktestutils-broadway.c \
gdkvisual-broadway.c \
gdkwindow-broadway.c \
gdkwindow-broadway.h \
gdkprivate-broadway.h \
gdkbroadway-server.h \
gdkbroadway-server.c
$(broadway_built_private_headers)\
$(GDK_BROADWAY_NON_GENERATED_SOURCES)
if OS_UNIX
libgdk_broadway_la_LIBADD = \
@@ -87,16 +52,6 @@ libgdk_broadway_la_LIBADD = \
$(NULL)
endif
broadwayd_SOURCES = \
broadway-protocol.h \
broadwayd.c \
broadway-server.h \
broadway-server.c \
broadway-buffer.c \
broadway-buffer.h \
broadway-output.h \
broadway-output.c
if OS_WIN32
broadwayd_LDADD = $(GDK_DEP_LIBS) -lws2_32
else
@@ -117,11 +72,6 @@ MSVCPROJS = gdk3-broadway broadwayd
gdk3_broadway_FILES = $(libgdk_broadway_la_SOURCES)
gdk3_broadway_EXCLUDES = dummy
gdk3_broadway_HEADERS_DIR = $(libgdkbroadwayincludedir)
gdk3_broadway_HEADERS_INST = $(libgdkbroadwayinclude_HEADERS)
gdk3_broadway_HEADERS_EXCLUDES = dummy
broadwayd_FILES = $(broadwayd_SOURCES)
broadwayd_EXCLUDES = dummy
@@ -130,7 +80,6 @@ include $(top_srcdir)/win32/Makefile.msvcproj
dist-hook: \
$(top_builddir)/win32/vs9/gdk3-broadway.vcproj \
$(top_builddir)/win32/vs9/broadwayd.vcproj \
$(top_builddir)/win32/vs9/gdk3-broadway.headers
$(top_builddir)/win32/vs9/broadwayd.vcproj
-include $(top_srcdir)/git.mk
+55
View File
@@ -0,0 +1,55 @@
# Public header list for GdkBroadway
GDK_PUBLIC_H_SRCS_BROADWAY = \
gdkbroadway.h
libgdkbroadwayinclude_HEADERS = \
gdkbroadwaydisplay.h \
gdkbroadwaywindow.h \
gdkbroadwaycursor.h \
gdkbroadwaymonitor.h \
gdkbroadwayvisual.h
# built headers that don't get installed
broadway_built_private_headers = \
clienthtml.h \
broadwayjs.h
# Other non-generated sources
GDK_BROADWAY_NON_GENERATED_SOURCES = \
gdkcursor-broadway.c \
gdkdevice-broadway.h \
gdkdevice-broadway.c \
gdkdevicemanager-broadway.h \
gdkdevicemanager-broadway.c \
gdkdisplay-broadway.c \
gdkdisplay-broadway.h \
gdkdnd-broadway.c \
gdkeventsource.c \
gdkeventsource.h \
gdkglobals-broadway.c \
gdkkeys-broadway.c \
gdkmonitor-broadway.c \
gdkmonitor-broadway.h \
gdkproperty-broadway.c \
gdkscreen-broadway.c \
gdkscreen-broadway.h \
gdkselection-broadway.c \
gdktestutils-broadway.c \
gdkvisual-broadway.c \
gdkwindow-broadway.c \
gdkwindow-broadway.h \
gdkprivate-broadway.h \
gdkbroadway-server.h \
gdkbroadway-server.c
broadwayd_SOURCES = \
broadway-protocol.h \
broadwayd.c \
broadway-server.h \
broadway-server.c \
broadway-buffer.c \
broadway-buffer.h \
broadway-output.h \
broadway-output.c
+1 -1
View File
@@ -109,7 +109,7 @@ _gdk_broadway_display_open (const gchar *display_name)
broadway_display->server = _gdk_broadway_server_new (display_name, &error);
if (broadway_display->server == NULL)
{
g_printerr ("Unable to init server: %s\n", error->message);
GDK_NOTE (MISC, g_message ("Unable to init Broadway server: %s\n", error->message));
g_error_free (error);
return NULL;
}
+2 -1
View File
@@ -22,7 +22,8 @@ gdk__private__ (void)
gdk_get_desktop_autostart_id,
gdk_profiler_is_running,
gdk_profiler_start,
gdk_profiler_stop
gdk_profiler_stop,
gdk_window_titlebar_gesture,
};
return &table;
+3
View File
@@ -66,6 +66,9 @@ typedef struct {
gboolean (* gdk_profiler_is_running) (void);
void (* gdk_profiler_start) (int fd);
void (* gdk_profiler_stop) (void);
gboolean (* gdk_window_titlebar_gesture) (GdkWindow *window,
GdkTitlebarGesture gesture);
} GdkPrivateVTable;
GDK_AVAILABLE_IN_ALL
+213
View File
@@ -0,0 +1,213 @@
#
# GDK header files for public installation (non-generated)
#
#
# setup source file variables
#
gdk_public_h_sources = \
gdk.h \
gdk-autocleanup.h \
gdkapplaunchcontext.h \
gdkcairo.h \
gdkcursor.h \
gdkdevice.h \
gdkdevicepad.h \
gdkdevicetool.h \
gdkdevicemanager.h \
gdkdisplay.h \
gdkdisplaymanager.h \
gdkdnd.h \
gdkdrawingcontext.h \
gdkevents.h \
gdkframetimings.h \
gdkglcontext.h \
gdkkeys.h \
gdkkeysyms.h \
gdkkeysyms-compat.h \
gdkmain.h \
gdkmonitor.h \
gdkpango.h \
gdkframeclock.h \
gdkpixbuf.h \
gdkprivate.h \
gdkproperty.h \
gdkrectangle.h \
gdkrgba.h \
gdkscreen.h \
gdkseat.h \
gdkselection.h \
gdktestutils.h \
gdkthreads.h \
gdktypes.h \
gdkvisual.h \
gdkwindow.h
gdk_deprecated_h_sources = \
deprecated/gdkcolor.h
gdk_h_sources = \
$(gdk_public_h_sources) \
$(gdk_deprecated_h_sources)
gdk_private_headers = \
gdk-private.h \
gdkapplaunchcontextprivate.h \
gdkconstructor.h \
gdkcursorprivate.h \
gdkdevicemanagerprivate.h \
gdkdeviceprivate.h \
gdkdevicepadprivate.h \
gdkdevicetoolprivate.h \
gdkdisplaymanagerprivate.h \
gdkdisplayprivate.h \
gdkdndprivate.h \
gdkdrawingcontextprivate.h \
gdkframeclockidle.h \
gdkframeclockprivate.h \
gdkglcontextprivate.h \
gdkmonitorprivate.h \
gdkprofilerprivate.h \
gdkscreenprivate.h \
gdkseatprivate.h \
gdkseatdefaultprivate.h \
gdkinternals.h \
gdkintl.h \
gdkkeysprivate.h \
gdkvisualprivate.h \
gdkx.h
gdk_deprecated_c_sources = \
deprecated/gdkcolor.c
gdk_c_sources = \
$(gdk_deprecated_c_sources) \
gdk-private.c \
gdk.c \
gdkapplaunchcontext.c \
gdkcairo.c \
gdkcursor.c \
gdkdeprecated.c \
gdkdevice.c \
gdkdevicepad.c \
gdkdevicetool.c \
gdkdevicemanager.c \
gdkdisplay.c \
gdkdisplaymanager.c \
gdkdnd.c \
gdkdrawingcontext.c \
gdkevents.c \
gdkframetimings.c \
gdkgl.c \
gdkglcontext.c \
gdkglobals.c \
gdkkeys.c \
gdkkeyuni.c \
gdkmonitor.c \
gdkoffscreenwindow.c \
gdkframeclock.c \
gdkframeclockidle.c \
gdkpango.c \
gdkpixbuf-drawable.c \
gdkprofiler.c \
gdkproperty.c \
gdkrectangle.c \
gdkrgba.c \
gdkscreen.c \
gdkseat.c \
gdkseatdefault.c \
gdkselection.c \
gdkvisual.c \
gdkwindow.c \
gdkwindowimpl.c
gdk_built_sources = \
gdkenumtypes.h \
gdkenumtypes.c \
gdkmarshalers.h \
gdkmarshalers.c \
gdkresources.h \
gdkresources.c \
gdkversionmacros.h
x11_introspection_files = \
x11/gdkapplaunchcontext-x11.c \
x11/gdkasync.c \
x11/gdkcursor-x11.c \
x11/gdkdevice-core-x11.c \
x11/gdkdevicemanager-core-x11.c \
x11/gdkdevicemanager-x11.c \
x11/gdkdevicemanager-xi2.c \
x11/gdkdevice-xi2.c \
x11/gdkdisplay-x11.c \
x11/gdkdisplaymanager-x11.c \
x11/gdkdnd-x11.c \
x11/gdkeventsource.c \
x11/gdkeventtranslator.c \
x11/gdkgeometry-x11.c \
x11/gdkglcontext-x11.c \
x11/gdkkeys-x11.c \
x11/gdkmain-x11.c \
x11/gdkmonitor-x11.c \
x11/gdkproperty-x11.c \
x11/gdkscreen-x11.c \
x11/gdkselection-x11.c \
x11/gdksettings.c \
x11/gdktestutils-x11.c \
x11/gdkvisual-x11.c \
x11/gdkwindow-x11.c \
x11/gdkxftdefaults.c \
x11/gdkxid.c \
x11/xsettings-client.c \
x11/gdkx.h \
x11/gdkx11applaunchcontext.h \
x11/gdkx11cursor.h \
x11/gdkx11device.h \
x11/gdkx11device-core.h \
x11/gdkx11device-xi2.h \
x11/gdkx11devicemanager.h \
x11/gdkx11devicemanager-core.h \
x11/gdkx11devicemanager-xi2.h \
x11/gdkx11display.h \
x11/gdkx11displaymanager.h \
x11/gdkx11dnd.h \
x11/gdkx11glcontext.h \
x11/gdkx11keys.h \
x11/gdkx11monitor.h \
x11/gdkx11property.h \
x11/gdkx11screen.h \
x11/gdkx11selection.h \
x11/gdkx11utils.h \
x11/gdkx11visual.h \
x11/gdkx11window.h
w32_introspection_files = \
win32/gdkcursor-win32.c \
win32/gdkdevicemanager-win32.c \
win32/gdkdevice-virtual.c \
win32/gdkdevice-win32.c \
win32/gdkdevice-wintab.c \
win32/gdkdisplaymanager-win32.c \
win32/gdkdisplay-win32.c \
win32/gdkdnd-win32.c \
win32/gdkevents-win32.c \
win32/gdkgeometry-win32.c \
win32/gdkglobals-win32.c \
win32/gdkkeys-win32.c \
win32/gdkmain-win32.c \
win32/gdkproperty-win32.c \
win32/gdkscreen-win32.c \
win32/gdkselection-win32.c \
win32/gdktestutils-win32.c \
win32/gdkwin32.h \
win32/gdkwin32cursor.h \
win32/gdkwin32display.h \
win32/gdkwin32displaymanager.h \
win32/gdkwin32dnd.h \
win32/gdkwin32id.c \
win32/gdkwin32keys.h \
win32/gdkwin32misc.h \
win32/gdkwin32screen.h \
win32/gdkwin32window.h \
win32/gdkwindow-win32.c
+4 -3
View File
@@ -1132,7 +1132,8 @@ gdk_unichar_direction (gunichar ch)
return PANGO_DIRECTION_LTR;
}
#ifdef G_HAS_CONSTRUCTORS
#if defined (G_HAS_CONSTRUCTORS) && !defined (G_OS_WIN32)
#define GDK_USE_CONSTRUCTORS
#ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
#pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(stash_startup_id)
#pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(stash_autostart_id)
@@ -1175,7 +1176,7 @@ gdk_get_desktop_startup_id (void)
if (g_once_init_enter (&init))
{
#ifndef G_HAS_CONSTRUCTORS
#ifndef GDK_USE_CONSTRUCTORS
stash_startup_id ();
#endif
/* Clear the environment variable so it won't be inherited by
@@ -1196,7 +1197,7 @@ gdk_get_desktop_autostart_id (void)
if (g_once_init_enter (&init))
{
#ifndef G_HAS_CONSTRUCTORS
#ifndef GDK_USE_CONSTRUCTORS
stash_autostart_id ();
#endif
/* Clear the environment variable so it won't be inherited by
+3
View File
@@ -205,6 +205,9 @@ gdk_app_launch_context_set_display (GdkAppLaunchContext *context,
* Sets the screen on which applications will be launched when
* using this context. See also gdk_app_launch_context_set_display().
*
* Note that, typically, a #GdkScreen represents a logical screen,
* not a physical monitor.
*
* If both @screen and @display are set, the @screen takes priority.
* If neither @screen or @display are set, the default screen and
* display are used.
+12 -6
View File
@@ -258,6 +258,7 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display)
GList *pending_motions = NULL;
GdkWindow *pending_motion_window = NULL;
GdkDevice *pending_motion_device = NULL;
gboolean uncompressed_motion = FALSE;
/* If the last N events in the event queue are motion notify
* events for the same window, drop all but the last */
@@ -282,10 +283,14 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display)
pending_motion_device != event->event.motion.device)
break;
if (!event->event.motion.window->event_compression)
break;
pending_motion_window = event->event.motion.window;
if (!event->event.motion.window->event_compression)
{
uncompressed_motion = TRUE;
break;
}
pending_motion_device = event->event.motion.device;
pending_motions = tmp_list;
@@ -301,9 +306,10 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display)
pending_motions = next;
}
if (pending_motions &&
pending_motions == display->queued_events &&
pending_motions == display->queued_tail)
if (uncompressed_motion ||
(pending_motions &&
pending_motions == display->queued_events &&
pending_motions == display->queued_tail))
{
GdkFrameClock *clock = gdk_window_get_frame_clock (pending_motion_window);
if (clock) /* might be NULL if window was destroyed */
+17 -17
View File
@@ -370,7 +370,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
paint_data = gdk_gl_context_get_paint_data (paint_context);
if (paint_data->tmp_framebuffer == 0)
glGenFramebuffersEXT (1, &paint_data->tmp_framebuffer);
glGenFramebuffers (1, &paint_data->tmp_framebuffer);
if (source_type == GL_RENDERBUFFER)
{
@@ -423,10 +423,10 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
/* Create a framebuffer with the source renderbuffer and
make it the current target for reads */
framebuffer = paint_data->tmp_framebuffer;
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, framebuffer);
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_RENDERBUFFER_EXT, source);
glBindFramebufferEXT (GL_DRAW_FRAMEBUFFER_EXT, 0);
glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, source);
glBindFramebuffer (GL_DRAW_FRAMEBUFFER, 0);
/* Translate to impl coords */
cairo_region_translate (clip_region, dx, dy);
@@ -481,11 +481,11 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
{
int clipped_src_x = x + (dest.x - dx * window_scale);
int clipped_src_y = y + (height - dest.height - (dest.y - dy * window_scale));
glBlitFramebufferEXT(clipped_src_x, clipped_src_y,
(clipped_src_x + dest.width), (clipped_src_y + dest.height),
dest.x, FLIP_Y(dest.y + dest.height),
dest.x + dest.width, FLIP_Y(dest.y),
GL_COLOR_BUFFER_BIT, GL_NEAREST);
glBlitFramebuffer (clipped_src_x, clipped_src_y,
(clipped_src_x + dest.width), (clipped_src_y + dest.height),
dest.x, FLIP_Y(dest.y + dest.height),
dest.x + dest.width, FLIP_Y(dest.y),
GL_COLOR_BUFFER_BIT, GL_NEAREST);
if (impl_window->current_paint.flushed_region)
{
cairo_rectangle_int_t flushed_rect;
@@ -505,7 +505,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
glDisable (GL_SCISSOR_TEST);
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
glBindFramebuffer (GL_FRAMEBUFFER, 0);
#undef FLIP_Y
@@ -671,19 +671,19 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
cairo_surface_set_device_scale (image, buffer_scale, buffer_scale);
framebuffer = paint_data->tmp_framebuffer;
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, framebuffer);
glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
if (source_type == GL_RENDERBUFFER)
{
/* Create a framebuffer with the source renderbuffer and
make it the current target for reads */
glFramebufferRenderbufferEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_RENDERBUFFER_EXT, source);
glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, source);
}
else
{
glFramebufferTexture2DEXT (GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_TEXTURE_2D, source, 0);
glFramebufferTexture2D (GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, source, 0);
}
glPixelStorei (GL_PACK_ALIGNMENT, 4);
@@ -699,7 +699,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr,
glPixelStorei (GL_PACK_ROW_LENGTH, 0);
glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, 0);
glBindFramebuffer (GL_FRAMEBUFFER, 0);
cairo_surface_mark_dirty (image);
+3
View File
@@ -557,6 +557,9 @@ void _gdk_synthesize_crossing_events_for_geometry_change (GdkWindow *changed_win
gboolean _gdk_window_has_impl (GdkWindow *window);
GdkWindow * _gdk_window_get_impl_window (GdkWindow *window);
gboolean gdk_window_titlebar_gesture (GdkWindow *window,
GdkTitlebarGesture gesture);
/*****************************
* offscreen window routines *
*****************************/
+1 -8
View File
@@ -835,18 +835,13 @@ static const struct {
/* Following items added to GTK, not in the xterm table */
/* A few ASCII control characters */
#ifndef GDK_WINDOWING_WIN32
{ 0xFF08 /* Backspace */, '\b' },
{ 0xFF09 /* Tab */, '\t' },
#endif
{ 0xFF0A /* Linefeed */, '\n' },
{ 0xFF0B /* Vert. Tab */, '\v' },
#ifndef GDK_WINDOWING_WIN32
{ 0xFF0D /* Return */, '\r' },
{ 0xFF1B /* Escape */, '\033' },
#endif
/* Numeric keypad */
@@ -871,9 +866,7 @@ static const struct {
/* End numeric keypad */
#ifndef GDK_WINDOWING_WIN32
{ 0xFFFF /* Delete */, '\177' }
#endif
};
/**
+2 -1
View File
@@ -43,7 +43,8 @@ struct _GdkSeatDefaultPrivate
GDK_ENTER_NOTIFY_MASK | \
GDK_LEAVE_NOTIFY_MASK | \
GDK_PROXIMITY_IN_MASK | \
GDK_PROXIMITY_OUT_MASK)
GDK_PROXIMITY_OUT_MASK | \
GDK_TOUCHPAD_GESTURE_MASK)
G_DEFINE_TYPE_WITH_PRIVATE (GdkSeatDefault, gdk_seat_default, GDK_TYPE_SEAT)
+18 -1
View File
@@ -1286,7 +1286,7 @@ get_native_device_event_mask (GdkWindow *private,
if (gdk_window_is_toplevel (private) ||
mask & GDK_BUTTON_PRESS_MASK)
mask |=
GDK_TOUCH_MASK |
GDK_TOUCH_MASK | GDK_TOUCHPAD_GESTURE_MASK |
GDK_POINTER_MOTION_MASK |
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
GDK_SCROLL_MASK;
@@ -11998,3 +11998,20 @@ gdk_window_show_window_menu (GdkWindow *window,
else
return FALSE;
}
gboolean
gdk_window_titlebar_gesture (GdkWindow *window,
GdkTitlebarGesture gesture)
{
GdkWindowImplClass *impl_class;
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
g_return_val_if_fail (!GDK_WINDOW_DESTROYED (window), FALSE);
impl_class = GDK_WINDOW_IMPL_GET_CLASS (window->impl);
if (impl_class->titlebar_gesture)
return impl_class->titlebar_gesture (window, gesture);
else
return FALSE;
}
+10
View File
@@ -30,6 +30,13 @@
G_BEGIN_DECLS
typedef enum
{
GDK_TITLEBAR_GESTURE_DOUBLE_CLICK = 1,
GDK_TITLEBAR_GESTURE_RIGHT_CLICK = 2,
GDK_TITLEBAR_GESTURE_MIDDLE_CLICK = 3
} GdkTitlebarGesture;
#define GDK_TYPE_WINDOW_IMPL (gdk_window_impl_get_type ())
#define GDK_WINDOW_IMPL(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WINDOW_IMPL, GdkWindowImpl))
#define GDK_WINDOW_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW_IMPL, GdkWindowImplClass))
@@ -315,6 +322,9 @@ struct _GdkWindowImplClass
const cairo_region_t *region);
void (* destroy_draw_context) (GdkWindow *window,
GdkDrawingContext *context);
gboolean (* titlebar_gesture) (GdkWindow *window,
GdkTitlebarGesture gesture);
};
/* Interface Functions */
+1 -2
View File
@@ -803,8 +803,7 @@ update_context_from_dragging_info (id <NSDraggingInfo> sender)
gdk_event_free (event);
g_object_unref (_gdk_quartz_drag_source_context);
_gdk_quartz_drag_source_context = NULL;
_gdk_quartz_drag_source_context_destroy_gtk_only ();
}
#ifdef AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+182 -55
View File
@@ -24,16 +24,29 @@
#include "gdkprivate-quartz.h"
#include "gdkquartz.h"
#include "gdkinternal-quartz.h"
#include <cairo/cairo-quartz.h>
#import <AppKit/AppKit.h>
#import <IOSurface/IOSurface.h>
@implementation GdkQuartzView
-(id)initWithFrame: (NSRect)frameRect
{
if ((self = [super initWithFrame: frameRect]))
{
pb_props = @{
(id)kCVPixelBufferIOSurfaceCoreAnimationCompatibilityKey: @1,
(id)kCVPixelBufferBytesPerRowAlignmentKey: @64,
};
[pb_props retain];
cfpb_props = (__bridge CFDictionaryRef)pb_props;
markedRange = NSMakeRange (NSNotFound, 0);
selectedRange = NSMakeRange (0, 0);
}
[self setValue: @(YES) forKey: @"postsFrameChangedNotifications"];
return self;
@@ -185,7 +198,7 @@
-(void)doCommandBySelector: (SEL)aSelector
{
GDK_NOTE (EVENTS, g_message ("doCommandBySelector %s", aSelector));
GDK_NOTE (EVENTS, g_message ("doCommandBySelector %s", [NSStringFromSelector (aSelector) UTF8String]));
g_object_set_data (G_OBJECT (gdk_window), GIC_FILTER_KEY,
GUINT_TO_POINTER (GIC_FILTER_PASSTHRU));
}
@@ -256,6 +269,12 @@
trackingRect = 0;
}
if (pixels)
{
CVPixelBufferRelease (pixels);
}
[pb_props release];
[super dealloc];
}
@@ -276,7 +295,7 @@
-(BOOL)isFlipped
{
return YES;
return NO;
}
-(BOOL)isOpaque
@@ -289,74 +308,156 @@
gdk_screen_get_rgba_visual (_gdk_screen);
}
-(void)drawRect: (NSRect)rect
- (void) viewWillDraw
{
/* MacOS 11 (Big Sur) has added a new, dynamic "accent" as default.
* This uses a 10-bit colorspace so every GIMP drawing operation
* has the additional cost of an 8-bit (ARGB) to 10-bit conversion.
* Let's disable this mode to regain the lost performance.
*/
if(gdk_quartz_osx_version() >= GDK_OSX_BIGSUR)
{
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
CALayer* layer = self.layer;
layer.contentsFormat = kCAContentsFormatRGBA8Uint;
#endif
}
[super viewWillDraw];
}
-(BOOL)wantsUpdateLayer
{
return YES;
}
static void
nsrect_from_cairo_rect (NSRect *nsrect, cairo_rectangle_int_t *rect)
{
nsrect->origin.x = (CGFloat)rect->x;
nsrect->origin.y = (CGFloat)rect->y;
nsrect->size.width = (CGFloat)rect->width;
nsrect->size.height = (CGFloat)rect->height;
}
static void
cairo_rect_from_nsrect (cairo_rectangle_int_t *rect, NSRect *nsrect)
{
rect->x = (int)nsrect->origin.x;
rect->y = (int)nsrect->origin.y;
rect->width = (int)nsrect->size.width;
rect->height = (int)nsrect->size.height;
}
static cairo_status_t
copy_rectangle_argb32 (cairo_surface_t *dest, cairo_surface_t *source,
cairo_region_t *region)
{
cairo_surface_t *source_img, *dest_img;
cairo_status_t status;
cairo_format_t format;
int height, width, stride;
cairo_rectangle_int_t extents;
cairo_region_get_extents (region, &extents);
source_img = cairo_surface_map_to_image (source, &extents);
status = cairo_surface_status (source_img);
if (status)
{
g_warning ("Failed to map source image surface, %d %d %d %d on %d %d: %s\n",
extents.x, extents.y, extents.width, extents.height,
cairo_image_surface_get_width (source),
cairo_image_surface_get_height (source),
cairo_status_to_string (status));
return status;
}
format = cairo_image_surface_get_format (source_img);
dest_img = cairo_surface_map_to_image (dest, &extents);
status = cairo_surface_status (dest_img);
if (status)
{
g_warning ("Failed to map destination image surface, %d %d %d %d on %d %d: %s\n",
extents.x, extents.y, extents.width, extents.height,
cairo_image_surface_get_width (dest),
cairo_image_surface_get_height (dest),
cairo_status_to_string (status));
goto CLEANUP;
}
width = cairo_image_surface_get_width (source_img);
stride = cairo_format_stride_for_width (format, width);
height = cairo_image_surface_get_height (source_img);
memcpy (cairo_image_surface_get_data (dest_img),
cairo_image_surface_get_data (source_img),
stride * height);
cairo_surface_unmap_image (dest, dest_img);
CLEANUP:
cairo_surface_unmap_image (source, source_img);
return status;
}
-(void)updateLayer
{
GdkRectangle gdk_rect;
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (gdk_window->impl);
const NSRect *drawn_rects;
NSInteger count;
int i;
cairo_region_t *region;
cairo_rectangle_int_t impl_rect = {0, 0, 0, 0};
CGRect layer_bounds = [self.layer bounds];
CGRect backing_bounds = [self convertRectToBacking: layer_bounds];
cairo_rectangle_int_t bounds_rect;
cairo_region_t *bounds_region;
cairo_surface_t *cvpb_surface;
if (GDK_WINDOW_DESTROYED (gdk_window))
return;
if (! (gdk_window->event_mask & GDK_EXPOSURE_MASK))
return;
if (NSEqualRects (rect, NSZeroRect))
return;
if (!GDK_WINDOW_IS_MAPPED (gdk_window))
{
/* If the window is not yet mapped, clip_region_with_children
* will be empty causing the usual code below to draw nothing.
* To not see garbage on the screen, we draw an aesthetic color
* here. The garbage would be visible if any widget enabled
* the NSView's CALayer in order to add sublayers for custom
* native rendering.
*/
[NSGraphicsContext saveGraphicsState];
[[NSColor windowBackgroundColor] setFill];
[NSBezierPath fillRect: rect];
[NSGraphicsContext restoreGraphicsState];
return;
}
/* Clear our own bookkeeping of regions that need display */
++impl->in_paint_rect_count;
cairo_rect_from_nsrect (&bounds_rect, &backing_bounds);
bounds_region = cairo_region_create_rectangle (&bounds_rect);
if (impl->needs_display_region)
{
cairo_region_destroy (impl->needs_display_region);
cairo_region_t *region = impl->needs_display_region;
_gdk_window_process_updates_recurse (gdk_window, region);
cairo_region_destroy (region);
impl->needs_display_region = NULL;
}
[self getRectsBeingDrawn: &drawn_rects count: &count];
region = cairo_region_create ();
for (i = 0; i < count; i++)
else
{
gdk_rect.x = drawn_rects[i].origin.x;
gdk_rect.y = drawn_rects[i].origin.y;
gdk_rect.width = drawn_rects[i].size.width;
gdk_rect.height = drawn_rects[i].size.height;
cairo_rectangle_int_t bounds;
cairo_region_t *region;
cairo_region_union_rectangle (region, &gdk_rect);
cairo_rect_from_nsrect (&bounds, &layer_bounds);
region = cairo_region_create_rectangle (&bounds);
_gdk_window_process_updates_recurse (gdk_window, region);
cairo_region_destroy (region);
}
impl->in_paint_rect_count++;
_gdk_window_process_updates_recurse (gdk_window, region);
impl->in_paint_rect_count--;
if (!impl || !impl->cairo_surface)
return;
cairo_region_destroy (region);
impl_rect.width = cairo_image_surface_get_width (impl->cairo_surface);
impl_rect.height = cairo_image_surface_get_height (impl->cairo_surface);
CVPixelBufferLockBaseAddress (pixels, 0);
cvpb_surface =
cairo_image_surface_create_for_data (CVPixelBufferGetBaseAddress (pixels),
CAIRO_FORMAT_ARGB32,
(int)CVPixelBufferGetWidth (pixels),
(int)CVPixelBufferGetHeight (pixels),
(int)CVPixelBufferGetBytesPerRow (pixels));
if (needsInvalidateShadow)
{
[[self window] invalidateShadow];
needsInvalidateShadow = NO;
}
cairo_region_intersect_rectangle (bounds_region, &impl_rect);
copy_rectangle_argb32 (cvpb_surface, impl->cairo_surface, bounds_region);
cairo_surface_destroy (cvpb_surface);
cairo_region_destroy (bounds_region);
_gdk_quartz_unref_cairo_surface (gdk_window); // reffed in gdk_window_impl_quartz_begin_paint
CVPixelBufferUnlockBaseAddress (pixels, 0);
--impl->in_paint_rect_count;
self.layer.contents = NULL;
self.layer.contents = (id)CVPixelBufferGetIOSurface (pixels);
}
-(void)setNeedsInvalidateShadow: (BOOL)invalidate
@@ -412,11 +513,37 @@
}
}
-(void)createBackingStoreWithWidth: (CGFloat) width andHeight: (CGFloat) height
{
CVReturn rv;
g_return_if_fail (width && height);
CVPixelBufferRelease (pixels);
rv = CVPixelBufferCreate (NULL, width, height,
kCVPixelFormatType_32BGRA,
cfpb_props, &pixels);
}
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10700
-(BOOL)layer:(CALayer*) layer shouldInheritContentsScale: (CGFloat)scale fromWindow: (NSWindow *) window
{
if (layer == self.layer && window == self.window)
{
_gdk_quartz_unref_cairo_surface (gdk_window);
[self setNeedsDisplay: YES];
}
return YES;
}
#endif
-(void)setFrame: (NSRect)frame
{
if (GDK_WINDOW_DESTROYED (gdk_window))
return;
_gdk_quartz_unref_cairo_surface (gdk_window);
[super setFrame: frame];
if ([self window])
+9
View File
@@ -17,6 +17,7 @@
*/
#import <AppKit/AppKit.h>
#import <CoreVideo/CoreVideo.h>
#include "gdk/gdk.h"
/* Text Input Client */
@@ -33,18 +34,26 @@
#define GIC_FILTER_PASSTHRU 0
#define GIC_FILTER_FILTERED 1
#if MAC_OS_X_VERSION_MIN_REQUIRED < 101400
@interface GdkQuartzView : NSView <NSTextInputClient>
#else
@interface GdkQuartzView : NSView <NSTextInputClient, NSViewLayerContentScaleDelegate>
#endif
{
GdkWindow *gdk_window;
NSTrackingRectTag trackingRect;
BOOL needsInvalidateShadow;
NSRange markedRange;
NSRange selectedRange;
CVPixelBufferRef pixels;
NSDictionary *pb_props;
CFDictionaryRef cfpb_props;
}
- (void)setGdkWindow: (GdkWindow *)window;
- (GdkWindow *)gdkWindow;
- (NSTrackingRectTag)trackingRect;
- (void)setNeedsInvalidateShadow: (BOOL)invalidate;
- (void)createBackingStoreWithWidth: (CGFloat) width andHeight: (CGFloat) height;
@end
+3
View File
@@ -30,6 +30,8 @@ libgdk_quartz_la_SOURCES = \
gdkdevicemanager-core-quartz.h \
gdkdisplay-quartz.c \
gdkdisplay-quartz.h \
gdkdisplaylinksource.c \
gdkdisplaylinksource.h \
gdkdisplaymanager-quartz.c \
gdkdnd-quartz.c \
gdkdnd-quartz.h \
@@ -60,6 +62,7 @@ libgdkinclude_HEADERS = \
gdkquartz.h
libgdkquartzinclude_HEADERS = \
gdkquartz-cocoa-access.h \
gdkquartz-gtk-only.h \
gdkquartzcursor.h \
gdkquartzdevice-core.h \
+8 -1
View File
@@ -261,14 +261,21 @@ _gdk_quartz_display_get_cursor_for_surface (GdkDisplay *display,
NSCursor *nscursor;
GdkCursor *cursor;
GdkPixbuf *pixbuf;
double x_scale;
double y_scale;
GDK_QUARTZ_ALLOC_POOL;
pixbuf = gdk_pixbuf_get_from_surface (surface, 0, 0,
cairo_image_surface_get_width (surface),
cairo_image_surface_get_height (surface));
cairo_surface_get_device_scale (surface,
&x_scale,
&y_scale);
image = gdk_quartz_pixbuf_to_ns_image_libgtk_only (pixbuf);
nscursor = [[NSCursor alloc] initWithImage:image hotSpot:NSMakePoint(x, y)];
NSImageRep *rep = [[image representations] objectAtIndex:0];
[image setSize:NSMakeSize(rep.pixelsWide / x_scale, rep.pixelsHigh / y_scale)];
nscursor = [[NSCursor alloc] initWithImage:image hotSpot:NSMakePoint(x / x_scale, y / y_scale)];
cursor = gdk_quartz_cursor_new_from_nscursor (nscursor, GDK_CURSOR_IS_PIXMAP);
+2 -3
View File
@@ -27,6 +27,7 @@
#include "gdkprivate-quartz.h"
#include "gdkquartzdevice-core.h"
#include "gdkinternal-quartz.h"
#include "gdkquartz-cocoa-access.h"
struct _GdkQuartzDeviceCore
{
@@ -228,11 +229,9 @@ gdk_quartz_device_core_query_state_helper (GdkWindow *window,
}
else
{
GdkWindowImplQuartz *impl;
NSWindow *nswindow;
impl = GDK_WINDOW_IMPL_QUARTZ (toplevel->impl);
nswindow = impl->toplevel;
nswindow = gdk_quartz_window_get_nswindow (window);
point = [nswindow mouseLocationOutsideOfEventStream];
+134 -3
View File
@@ -21,6 +21,7 @@
#include <gdk/gdk.h>
#include <gdk/gdkdisplayprivate.h>
#include <gdk/gdkmonitorprivate.h>
#include <gdk/gdkframeclockprivate.h>
#include "gdkprivate-quartz.h"
#include "gdkquartzscreen.h"
@@ -29,9 +30,12 @@
#include "gdkquartzdevicemanager-core.h"
#include "gdkscreen.h"
#include "gdkmonitorprivate.h"
#include "gdkdisplaylinksource.h"
#include "gdkdisplay-quartz.h"
#include "gdkmonitor-quartz.h"
#include "gdkglcontext-quartz.h"
#include "gdkinternal-quartz.h"
#include "gdkwindow.h"
/* Note about coordinates: There are three coordinate systems at play:
*
@@ -82,6 +86,112 @@ _gdk_device_manager_new (GdkDisplay *display)
NULL);
}
void
_gdk_quartz_display_add_frame_callback (GdkDisplay *display,
GdkWindow *window)
{
GdkQuartzDisplay *display_quartz;
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
display_quartz = GDK_QUARTZ_DISPLAY (display);
impl->frame_link.data = window;
impl->frame_link.prev = NULL;
impl->frame_link.next = display_quartz->windows_awaiting_frame;
display_quartz->windows_awaiting_frame = &impl->frame_link;
if (impl->frame_link.next == NULL)
gdk_display_link_source_unpause ((GdkDisplayLinkSource *)display_quartz->frame_source);
}
void
_gdk_quartz_display_remove_frame_callback (GdkDisplay *display,
GdkWindow *window)
{
GdkQuartzDisplay *display_quartz = GDK_QUARTZ_DISPLAY (display);
GList *link;
link = g_list_find (display_quartz->windows_awaiting_frame, window);
if (link != NULL)
{
display_quartz->windows_awaiting_frame =
g_list_remove_link (display_quartz->windows_awaiting_frame, link);
}
if (display_quartz->windows_awaiting_frame == NULL)
gdk_display_link_source_pause ((GdkDisplayLinkSource *)display_quartz->frame_source);
}
static gboolean
gdk_quartz_display_frame_cb (gpointer data)
{
GdkDisplayLinkSource *source;
GdkQuartzDisplay *display_quartz = data;
GList *iter;
gint64 presentation_time;
gint64 now;
source = (GdkDisplayLinkSource *)display_quartz->frame_source;
iter = display_quartz->windows_awaiting_frame;
display_quartz->windows_awaiting_frame = NULL;
if (iter == NULL)
{
gdk_display_link_source_pause (source);
return G_SOURCE_CONTINUE;
}
presentation_time = source->presentation_time;
now = g_source_get_time (display_quartz->frame_source);
for (; iter != NULL; iter = iter->next)
{
GdkWindow *window = iter->data;
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
GdkFrameClock *frame_clock = gdk_window_get_frame_clock (window);
GdkFrameTimings *timings;
if (frame_clock == NULL)
continue;
_gdk_frame_clock_thaw (frame_clock);
if (impl->pending_frame_counter)
{
timings = gdk_frame_clock_get_timings (frame_clock, impl->pending_frame_counter);
if (timings != NULL)
timings->presentation_time = presentation_time - source->refresh_interval;
impl->pending_frame_counter = 0;
}
timings = gdk_frame_clock_get_current_timings (frame_clock);
if (timings != NULL)
{
timings->refresh_interval = source->refresh_interval;
timings->predicted_presentation_time = source->presentation_time;
}
}
return G_SOURCE_CONTINUE;
}
static void
gdk_quartz_display_init_display_link (GdkDisplay *display)
{
GdkQuartzDisplay *display_quartz = GDK_QUARTZ_DISPLAY (display);
display_quartz->frame_source = gdk_display_link_source_new ();
g_source_set_callback (display_quartz->frame_source,
gdk_quartz_display_frame_cb,
display,
NULL);
g_source_attach (display_quartz->frame_source, NULL);
}
GdkDisplay *
_gdk_quartz_display_open (const gchar *display_name)
{
@@ -100,6 +210,8 @@ _gdk_quartz_display_open (const gchar *display_name)
/* Initialize application */
[NSApplication sharedApplication];
gdk_quartz_display_init_display_link (_gdk_display);
#if 0
/* FIXME: Remove the #if 0 when we have these functions */
_gdk_quartz_dnd_init ();
@@ -452,10 +564,29 @@ static GdkMonitor *
gdk_quartz_display_get_monitor_at_window (GdkDisplay *display,
GdkWindow *window)
{
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
NSWindow *nswindow = impl->toplevel;
NSScreen *screen = [nswindow screen];
GdkWindowImplQuartz *impl = NULL;
NSWindow *nswindow = NULL;
NSScreen *screen = NULL;
GdkMonitor *monitor = NULL;
GdkWindow *onscreen_window = window;
/*
* This stops crashes when there is no NSWindow available on
* an offscreen window which occurs for children of children
* of an onscreen window (children of an onscreen window do
* have NSWindow set)
* https://gitlab.gnome.org/GNOME/gimp/-/issues/7608
*/
while (onscreen_window && onscreen_window->window_type == GDK_WINDOW_OFFSCREEN)
onscreen_window = onscreen_window->parent;
if (!onscreen_window)
return NULL;
impl = GDK_WINDOW_IMPL_QUARTZ (onscreen_window->impl);
nswindow = impl->toplevel;
screen = [nswindow screen];
if (screen)
{
GdkQuartzDisplay *quartz_display = GDK_QUARTZ_DISPLAY (display);
+6 -1
View File
@@ -20,12 +20,13 @@
#ifndef __GDK_QUARTZ_DISPLAY__
#define __GDK_QUARTZ_DISPLAY__
#include <AppKit/AppKit.h>
#include "gdkdisplayprivate.h"
#include "gdkkeys.h"
#include "gdkwindow.h"
#include "gdkinternals.h"
#include "gdkmain.h"
#include "gdkinternal-quartz.h"
G_BEGIN_DECLS
@@ -36,6 +37,10 @@ struct _GdkQuartzDisplay
NSRect geometry; /* In AppKit coordinates. */
NSSize size; /* Aggregate size of displays in millimeters. */
GPtrArray *monitors;
/* This structure is not allocated. It points to an embedded
* GList in the GdkWindow. */
GList *windows_awaiting_frame;
GSource *frame_source;
};
struct _GdkQuartzDisplayClass
+251
View File
@@ -0,0 +1,251 @@
/* gdkdisplaylinksource.c
*
* Copyright (C) 2015 Christian Hergert <christian@hergert.me>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors:
* Christian Hergert <christian@hergert.me>
*/
#include "config.h"
#include <mach/mach_time.h>
#include "gdkinternal-quartz.h"
#include "gdkdisplaylinksource.h"
static gint64 host_to_frame_clock_time (gint64 host_time);
static gboolean
gdk_display_link_source_prepare (GSource *source,
gint *timeout_)
{
GdkDisplayLinkSource *impl = (GdkDisplayLinkSource *)source;
gint64 now;
now = g_source_get_time (source);
if (now < impl->presentation_time)
*timeout_ = (impl->presentation_time - now) / 1000L;
else
*timeout_ = -1;
return impl->needs_dispatch;
}
static gboolean
gdk_display_link_source_check (GSource *source)
{
GdkDisplayLinkSource *impl = (GdkDisplayLinkSource *)source;
return impl->needs_dispatch;
}
static gboolean
gdk_display_link_source_dispatch (GSource *source,
GSourceFunc callback,
gpointer user_data)
{
GdkDisplayLinkSource *impl = (GdkDisplayLinkSource *)source;
gboolean ret = G_SOURCE_CONTINUE;
impl->needs_dispatch = FALSE;
if (callback != NULL)
ret = callback (user_data);
return ret;
}
static void
gdk_display_link_source_finalize (GSource *source)
{
GdkDisplayLinkSource *impl = (GdkDisplayLinkSource *)source;
CVDisplayLinkStop (impl->display_link);
CVDisplayLinkRelease (impl->display_link);
}
static GSourceFuncs gdk_display_link_source_funcs = {
gdk_display_link_source_prepare,
gdk_display_link_source_check,
gdk_display_link_source_dispatch,
gdk_display_link_source_finalize
};
void
gdk_display_link_source_pause (GdkDisplayLinkSource *source)
{
CVDisplayLinkStop (source->display_link);
}
void
gdk_display_link_source_unpause (GdkDisplayLinkSource *source)
{
CVDisplayLinkStart (source->display_link);
}
static CVReturn
gdk_display_link_source_frame_cb (CVDisplayLinkRef display_link,
const CVTimeStamp *inNow,
const CVTimeStamp *inOutputTime,
CVOptionFlags flagsIn,
CVOptionFlags *flagsOut,
void *user_data)
{
GdkDisplayLinkSource *impl = user_data;
gint64 presentation_time;
gboolean needs_wakeup;
needs_wakeup = !g_atomic_int_get (&impl->needs_dispatch);
presentation_time = host_to_frame_clock_time (inOutputTime->hostTime);
impl->presentation_time = presentation_time;
impl->needs_dispatch = TRUE;
if (needs_wakeup)
{
NSEvent *event;
/* Post a message so we'll break out of the message loop.
*
* We don't use g_main_context_wakeup() here because that
* would result in sending a message to the pipe(2) fd in
* the select thread which would then send this message as
* well. Lots of extra work.
*/
event = [NSEvent otherEventWithType: NSEventTypeApplicationDefined
location: NSZeroPoint
modifierFlags: 0
timestamp: 0
windowNumber: 0
context: nil
subtype: GDK_QUARTZ_EVENT_SUBTYPE_EVENTLOOP
data1: 0
data2: 0];
[NSApp postEvent:event atStart:YES];
}
return kCVReturnSuccess;
}
/**
* gdk_display_link_source_new:
*
* Creates a new #GSource that will activate the dispatch function upon
* notification from a CVDisplayLink that a new frame should be drawn.
*
* Effort is made to keep the transition from the high-priority
* CVDisplayLink thread into this GSource lightweight. However, this is
* somewhat non-ideal since the best case would be to do the drawing
* from the high-priority thread.
*
* Returns: (transfer full): A newly created #GSource.
*/
GSource *
gdk_display_link_source_new (void)
{
GdkDisplayLinkSource *impl;
GSource *source;
CVReturn ret;
double period;
source = g_source_new (&gdk_display_link_source_funcs, sizeof *impl);
impl = (GdkDisplayLinkSource *)source;
/*
* Create our link based on currently connected displays.
* If there are multiple displays, this will be something that tries
* to work for all of them. In the future, we may want to explore multiple
* links based on the connected displays.
*/
ret = CVDisplayLinkCreateWithActiveCGDisplays (&impl->display_link);
if (ret != kCVReturnSuccess)
{
g_warning ("Failed to initialize CVDisplayLink!");
return source;
}
/*
* Determine our nominal period between frames.
*/
period = CVDisplayLinkGetActualOutputVideoRefreshPeriod (impl->display_link);
if (period == 0.0)
period = 1.0 / 60.0;
impl->refresh_interval = period * 1000000L;
/*
* Wire up our callback to be executed within the high-priority thread.
*/
CVDisplayLinkSetOutputCallback (impl->display_link,
gdk_display_link_source_frame_cb,
source);
g_source_set_name (source, "[gdk] quartz frame clock");
return source;
}
static gint64
host_to_frame_clock_time (gint64 host_time)
{
static mach_timebase_info_data_t timebase_info;
/*
* NOTE:
*
* This code is taken from GLib to match g_get_monotonic_time().
*/
if (G_UNLIKELY (timebase_info.denom == 0))
{
/* This is a fraction that we must use to scale
* mach_absolute_time() by in order to reach nanoseconds.
*
* We've only ever observed this to be 1/1, but maybe it could be
* 1000/1 if mach time is microseconds already, or 1/1000 if
* picoseconds. Try to deal nicely with that.
*/
mach_timebase_info (&timebase_info);
/* We actually want microseconds... */
if (timebase_info.numer % 1000 == 0)
timebase_info.numer /= 1000;
else
timebase_info.denom *= 1000;
/* We want to make the numer 1 to avoid having to multiply... */
if (timebase_info.denom % timebase_info.numer == 0)
{
timebase_info.denom /= timebase_info.numer;
timebase_info.numer = 1;
}
else
{
/* We could just multiply by timebase_info.numer below, but why
* bother for a case that may never actually exist...
*
* Plus -- performing the multiplication would risk integer
* overflow. If we ever actually end up in this situation, we
* should more carefully evaluate the correct course of action.
*/
mach_timebase_info (&timebase_info); /* Get a fresh copy for a better message */
g_error ("Got weird mach timebase info of %d/%d. Please file a bug against GLib.",
timebase_info.numer, timebase_info.denom);
}
}
return host_time / timebase_info.denom;
}
+48
View File
@@ -0,0 +1,48 @@
/* gdkdisplaylinksource.h
*
* Copyright (C) 2015 Christian Hergert <christian@hergert.me>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*
* Authors:
* Christian Hergert <christian@hergert.me>
*/
#ifndef GDK_DISPLAY_LINK_SOURCE_H
#define GDK_DISPLAY_LINK_SOURCE_H
#include <glib.h>
#include <QuartzCore/QuartzCore.h>
G_BEGIN_DECLS
typedef struct
{
GSource source;
CVDisplayLinkRef display_link;
gint64 refresh_interval;
volatile gint64 presentation_time;
volatile guint needs_dispatch;
} GdkDisplayLinkSource;
GSource *gdk_display_link_source_new (void);
void gdk_display_link_source_pause (GdkDisplayLinkSource *source);
void gdk_display_link_source_unpause (GdkDisplayLinkSource *source);
G_END_DECLS
#endif /* GDK_DISPLAY_LINK_SOURCE_H */
+8
View File
@@ -59,6 +59,14 @@ _gdk_quartz_window_drag_begin (GdkWindow *window,
return _gdk_quartz_drag_source_context;
}
void
_gdk_quartz_drag_source_context_destroy_gtk_only ()
{
if (_gdk_quartz_drag_source_context)
g_object_unref (_gdk_quartz_drag_source_context);
_gdk_quartz_drag_source_context = NULL;
}
static gboolean
gdk_quartz_drag_context_drag_motion (GdkDragContext *context,
GdkWindow *dest_window,
+21 -17
View File
@@ -35,6 +35,7 @@
#include "gdkquartzdisplay.h"
#include "gdkprivate-quartz.h"
#include "gdkinternal-quartz.h"
#include "gdkquartz-cocoa-access.h"
#include "gdkquartzdevicemanager-core.h"
#include "gdkquartzkeys.h"
#include "gdkkeys-quartz.h"
@@ -387,7 +388,7 @@ get_window_point_from_screen_point (GdkWindow *window,
NSPoint point;
GdkQuartzNSWindow *nswindow;
nswindow = (GdkQuartzNSWindow*)(((GdkWindowImplQuartz *)window->impl)->toplevel);
nswindow = gdk_quartz_window_get_nswindow (window);
point = [nswindow convertPointFromScreen:screen_point];
*x = point.x;
*y = window->height - point.y;
@@ -396,7 +397,7 @@ get_window_point_from_screen_point (GdkWindow *window,
static gboolean
is_mouse_button_press_event (NSEventType type)
{
switch (type)
switch ((int)type)
{
case GDK_QUARTZ_LEFT_MOUSE_DOWN:
case GDK_QUARTZ_RIGHT_MOUSE_DOWN:
@@ -658,18 +659,21 @@ find_toplevel_under_pointer (GdkDisplay *display,
}
if (toplevel)
{
get_window_point_from_screen_point (toplevel, screen_point, x, y);
/* If the coordinates are out of window bounds, this toplevel is not
* under the pointer and we thus return NULL. This can occur when
* toplevel under pointer has not yet been updated due to a very recent
* window resize. Alternatively, we should no longer be relying on
* the toplevel_under_pointer value which is maintained in gdkwindow.c.
*/
if (*x < 0 || *y < 0 || *x >= toplevel->width || *y >= toplevel->height)
return NULL;
}
/* If the stored toplevel is NULL or _gdk_root it's not useful,
* return NULL to regenerate.
*/
if (toplevel == NULL || toplevel == _gdk_root )
return NULL;
get_window_point_from_screen_point (toplevel, screen_point, x, y);
/* If the coordinates are out of window bounds, this toplevel is not
* under the pointer and we thus return NULL. This can occur when
* toplevel under pointer has not yet been updated due to a very recent
* window resize. Alternatively, we should no longer be relying on
* the toplevel_under_pointer value which is maintained in gdkwindow.c.
*/
if (*x < 0 || *y < 0 || *x >= toplevel->width || *y >= toplevel->height)
return NULL;
return toplevel;
}
@@ -793,7 +797,7 @@ find_toplevel_for_mouse_event (NSEvent *nsevent,
toplevel = toplevel_under_pointer;
toplevel_impl = (GdkWindowImplQuartz *)toplevel->impl;
toplevel_impl = GDK_WINDOW_IMPL_QUARTZ (toplevel->impl);
*x = x_tmp;
*y = y_tmp;
@@ -1029,7 +1033,7 @@ fill_button_event (GdkWindow *window,
state = get_keyboard_modifiers_from_ns_event (nsevent) |
_gdk_quartz_events_get_current_mouse_modifiers ();
switch ([nsevent type])
switch ((int)[nsevent type])
{
case GDK_QUARTZ_LEFT_MOUSE_DOWN:
case GDK_QUARTZ_RIGHT_MOUSE_DOWN:
@@ -1405,7 +1409,7 @@ test_resize (NSEvent *event, GdkWindow *toplevel, gint x, gint y)
/* Resizing from the resize indicator only begins if an GDK_QUARTZ_LEFT_MOUSE_BUTTON
* event is received in the resizing area.
*/
toplevel_impl = (GdkWindowImplQuartz *)toplevel->impl;
toplevel_impl = GDK_WINDOW_IMPL_QUARTZ (toplevel->impl);
if ([toplevel_impl->toplevel showsResizeIndicator])
if ([event type] == GDK_QUARTZ_LEFT_MOUSE_DOWN &&
[toplevel_impl->toplevel showsResizeIndicator])
+1 -1
View File
@@ -28,7 +28,7 @@
#include "gdkquartzglcontext.h"
#include "gdkquartzwindow.h"
#include "gdkprivate-quartz.h"
#include "gdkquartz-gtk-only.h"
#include "gdkquartz-cocoa-access.h"
#include "gdkinternals.h"
+7 -9
View File
@@ -29,28 +29,26 @@ GdkWindow *_gdk_root = NULL;
GdkOSXVersion
gdk_quartz_osx_version (void)
{
static gint32 minor = GDK_OSX_UNSUPPORTED;
static gint32 vkey = GDK_OSX_UNSUPPORTED;
if (minor == GDK_OSX_UNSUPPORTED)
if (vkey == GDK_OSX_UNSUPPORTED)
{
#if MAC_OS_X_VERSION_MIN_REQUIRED < 101000
OSErr err = Gestalt (gestaltSystemVersionMinor, (SInt32*)&minor);
OSErr err = Gestalt (gestaltSystemVersionMinor, (SInt32*)&vkey);
g_return_val_if_fail (err == noErr, GDK_OSX_UNSUPPORTED);
#else
NSOperatingSystemVersion version;
version = [[NSProcessInfo processInfo] operatingSystemVersion];
minor = version.minorVersion;
if (version.majorVersion == 11)
minor += 16;
vkey = version.majorVersion == 10 ? version.minorVersion : version.majorVersion + 5;
#endif
}
if (minor < GDK_OSX_MIN)
if (vkey < GDK_OSX_MIN)
return GDK_OSX_UNSUPPORTED;
else if (minor > GDK_OSX_CURRENT)
else if (vkey > GDK_OSX_CURRENT)
return GDK_OSX_NEW;
else
return minor;
return vkey;
}
+13 -8
View File
@@ -42,16 +42,16 @@ typedef float CGFloat;
#define GDK_QUARTZ_ALLOC_POOL NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]
#define GDK_QUARTZ_RELEASE_POOL [pool release]
#include <gdk/gdkprivate.h>
#include <gdk/quartz/gdkquartz.h>
#include <gdk/quartz/gdkdevicemanager-core-quartz.h>
#include <gdk/quartz/gdkdnd-quartz.h>
#include <gdk/quartz/gdkscreen-quartz.h>
#include <gdk/quartz/gdkwindow-quartz.h>
#include "../gdkprivate.h"
#include "gdkquartz.h"
#include "gdkdevicemanager-core-quartz.h"
#include "gdkdnd-quartz.h"
#include "gdkscreen-quartz.h"
#include "gdkwindow-quartz.h"
#include <gdk/gdk.h>
#include "config.h"
#include <config.h>
extern GdkDisplay *_gdk_display;
extern GdkScreen *_gdk_screen;
@@ -75,7 +75,7 @@ typedef enum {
GDK_QUARTZ_EVENT_SUBTYPE_EVENTLOOP
} GdkQuartzEventSubType;
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 10130
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101300
#define GDK_QUARTZ_EVENT_TABLET_PROXIMITY NSEventTypeTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_PROXIMITY NSEventSubtypeTabletProximity
#define GDK_QUARTZ_EVENT_SUBTYPE_TABLET_POINT NSEventSubtypeTabletPoint
@@ -284,5 +284,10 @@ void _gdk_quartz_window_change_property (GdkWindow *window,
void _gdk_quartz_window_delete_property (GdkWindow *window,
GdkAtom property);
/* Display methods - frame clock */
void _gdk_quartz_display_add_frame_callback (GdkDisplay *display,
GdkWindow *window);
void _gdk_quartz_display_remove_frame_callback (GdkDisplay *display,
GdkWindow *window);
#endif /* __GDK_INTERNAL_QUARTZ_H__ */
+1 -1
View File
@@ -812,13 +812,13 @@ input_sources_changed_notification (CFNotificationCenterRef center,
static void
gdk_quartz_keymap_init (GdkQuartzKeymap *keymap)
{
update_keymap ();
CFNotificationCenterAddObserver (CFNotificationCenterGetDistributedCenter (),
keymap,
input_sources_changed_notification,
CFSTR ("AppleSelectedInputSourcesChangedNotification"),
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
update_keymap ();
}
static void
+2 -1
View File
@@ -22,6 +22,7 @@
#include "gdkmonitor-quartz.h"
#include "gdkdisplay-quartz.h"
#include "gdkinternal-quartz.h"
G_DEFINE_TYPE (GdkQuartzMonitor, gdk_quartz_monitor, GDK_TYPE_MONITOR)
@@ -32,7 +33,7 @@ gdk_quartz_monitor_get_workarea (GdkMonitor *monitor,
GDK_QUARTZ_ALLOC_POOL;
NSArray *array = [NSScreen screens];
NSScreen* screen;
NSScreen* screen = NULL;
for (id obj in array)
{
CGDirectDisplayID screen_id =
+1 -1
View File
@@ -20,12 +20,12 @@
#include <glib.h>
#include <gio/gio.h>
#include <AppKit/AppKit.h>
#include "gdkmonitorprivate.h"
#include "gdkquartzmonitor.h"
#include "gdkprivate-quartz.h"
#include "gdkinternal-quartz.h"
struct _GdkQuartzMonitor
{
+2
View File
@@ -33,5 +33,7 @@
GdkDisplay * _gdk_quartz_display_open (const gchar *name);
/* Window Impl */
void _gdk_quartz_unref_cairo_surface (GdkWindow *window);
#endif /* __GDK_PRIVATE_QUARTZ_H__ */
+37
View File
@@ -0,0 +1,37 @@
/* gdkquartz-gtk-only.h
*
* Copyright (C) 2005-2007 Imendio AB
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __GDK_QUARTZ_COCOA_ACCESS_H__
#define __GDK_QUARTZ_COCOA_ACCESS_H__
#ifndef __OBJC__
#error "This header declares Cocoa types and can be included only from source files compiled with Objective-C."
#endif
#include <AppKit/AppKit.h>
#include <gdk/gdk.h>
#include "gdkquartz.h"
GDK_AVAILABLE_IN_ALL
NSEvent *gdk_quartz_event_get_nsevent (GdkEvent *event);
GDK_AVAILABLE_IN_ALL
NSWindow *gdk_quartz_window_get_nswindow (GdkWindow *window);
GDK_AVAILABLE_IN_ALL
NSView *gdk_quartz_window_get_nsview (GdkWindow *window);
#endif
-8
View File
@@ -38,13 +38,5 @@ NSString *gdk_quartz_atom_to_pasteboard_type_libgtk_only (GdkAtom
/* Utilities */
GDK_AVAILABLE_IN_ALL
NSImage *gdk_quartz_pixbuf_to_ns_image_libgtk_only (GdkPixbuf *pixbuf);
GDK_AVAILABLE_IN_ALL
NSEvent *gdk_quartz_event_get_nsevent (GdkEvent *event);
/* Window */
GDK_AVAILABLE_IN_ALL
NSWindow *gdk_quartz_window_get_nswindow (GdkWindow *window);
GDK_AVAILABLE_IN_ALL
NSView *gdk_quartz_window_get_nsview (GdkWindow *window);
#endif
+2 -1
View File
@@ -42,7 +42,8 @@ typedef enum
GDK_OSX_MOJAVE = 14,
GDK_OSX_CATALINA = 15,
GDK_OSX_BIGSUR = 16,
GDK_OSX_CURRENT = 15,
GDK_OSX_MONTEREY = 17,
GDK_OSX_CURRENT = 17,
GDK_OSX_NEW = 99
} GdkOSXVersion;
+3
View File
@@ -51,6 +51,9 @@ id gdk_quartz_drag_context_get_dragging_info_libgtk_only (GdkDragContext
GDK_AVAILABLE_IN_ALL
GdkDragContext *gdk_quartz_drag_source_context_libgtk_only (void);
GDK_AVAILABLE_IN_3_24
void _gdk_quartz_drag_source_context_destroy_gtk_only ();
G_END_DECLS
#endif /* __GDK_QUARTZ_DRAG_CONTEXT_H__ */
+1 -1
View File
@@ -25,7 +25,7 @@
#include "gdkprivate-quartz.h"
#include "gdkdisplay-quartz.h"
#include "gdkmonitor-quartz.h"
#include "gdkinternal-quartz.h"
/* A couple of notes about this file are in order. In GDK, a
* GdkScreen can contain multiple monitors. A GdkScreen has an
+5
View File
@@ -180,6 +180,7 @@ _gdk_quartz_display_text_property_to_utf8_list (GdkDisplay *display,
#define GDK_QUARTZ_STRING_PBOARD_TYPE NSStringPboardType
#define GDK_QUARTZ_TIFF_PBOARD_TYPE NSTIFFPboardType
#else
#define GDK_QUARTZ_FILE_PBOARD_TYPE NSPasteboardTypeFileURL
#define GDK_QUARTZ_URL_PBOARD_TYPE NSPasteboardTypeURL
#define GDK_QUARTZ_COLOR_PBOARD_TYPE NSPasteboardTypeColor
#define GDK_QUARTZ_STRING_PBOARD_TYPE NSPasteboardTypeString
@@ -197,6 +198,10 @@ gdk_quartz_pasteboard_type_to_atom_libgtk_only (NSString *type)
return gdk_atom_intern_static_string ("application/x-color");
else if ([type isEqualToString:GDK_QUARTZ_URL_PBOARD_TYPE])
return gdk_atom_intern_static_string ("text/uri-list");
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
else if ([type isEqualToString:GDK_QUARTZ_FILE_PBOARD_TYPE])
return gdk_atom_intern_static_string ("text/uri-list");
#endif
else
return gdk_atom_intern ([type UTF8String], FALSE);
}
+1
View File
@@ -23,6 +23,7 @@
#include <gdkinternals.h>
#include "gdkquartz-gtk-only.h"
#include "gdkquartz-cocoa-access.h"
#include <gdkquartzutils.h>
NSImage *
File diff suppressed because it is too large Load Diff
+6 -1
View File
@@ -22,7 +22,6 @@
#import <gdk/quartz/GdkQuartzView.h>
#import <gdk/quartz/GdkQuartzNSWindow.h>
#include "gdk/gdkwindowimpl.h"
#include "gdkinternal-quartz.h"
G_BEGIN_DECLS
@@ -65,6 +64,10 @@ struct _GdkWindowImplQuartz
gint shadow_top;
gint shadow_max;
gboolean use_cg_context;
GList frame_link;
gint pending_frame_counter;
};
struct _GdkWindowImplQuartzClass
@@ -100,6 +103,8 @@ typedef struct _GdkRootWindowImplQuartzClass GdkRootWindowImplQuartzClass;
struct _GdkRootWindowImplQuartz
{
GdkWindowImplQuartz parent_instance;
CGContextRef cg_context;
GList* cg_layers;
};
struct _GdkRootWindowImplQuartzClass
+5 -1
View File
@@ -8,6 +8,7 @@ gdk_quartz_sources = files(
'gdkdevice-core-quartz.c',
'gdkdevicemanager-core-quartz.c',
'gdkdisplay-quartz.c',
'gdkdisplaylinksource.c',
'gdkdisplaymanager-quartz.c',
'gdkdnd-quartz.c',
'gdkevents-quartz.c',
@@ -26,6 +27,7 @@ gdk_quartz_sources = files(
)
gdk_quartz_public_headers = files(
'gdkquartz-cocoa-access.h',
'gdkquartzcursor.h',
'gdkquartzdevice-core.h',
'gdkquartzdevicemanager-core.h',
@@ -47,8 +49,10 @@ core_graphics_dep = dependency('appleframeworks', modules : 'CoreGraphics', requ
appkit_dep = dependency('appleframeworks', modules : 'AppKit', required : true)
cocoa_dep = dependency('appleframeworks', modules : 'Cocoa', required : true)
carbon_dep = dependency('appleframeworks', modules : 'Carbon', required : true)
quartzcore_dep = dependency('appleframeworks', modules : 'QuartzCore', required : true)
iosurface_dep = dependency('appleframeworks', modules: 'IOSurface', required: true)
gdk_quartz_deps = [ core_graphics_dep, appkit_dep, cocoa_dep, carbon_dep ]
gdk_quartz_deps = [ core_graphics_dep, appkit_dep, cocoa_dep, carbon_dep, quartzcore_dep, iosurface_dep ]
libgdk_quartz = static_library('gdk-quartz',
gdk_quartz_sources, gdkconfig, gdkenum_h,
+21 -1
View File
@@ -10,6 +10,7 @@ AM_CPPFLAGS = \
-DGDK_COMPILATION \
-I$(top_srcdir) \
-I$(top_srcdir)/gdk \
-I$(top_srcdir)/gdk/wayland/cursor \
-I$(top_builddir)/gdk \
$(GDK_HIDDEN_VISIBILITY_CFLAGS) \
$(GTK_DEBUG_FLAGS) \
@@ -43,6 +44,11 @@ BUILT_SOURCES = \
gtk-shell-protocol.c \
primary-selection-unstable-v1-client-protocol.h \
primary-selection-unstable-v1-protocol.c
if USE_XDG_ACTIVATION
BUILT_SOURCES += \
xdg-activation-v1-client-protocol.h \
xdg-activation-v1-protocol.c
endif
nodist_libgdk_wayland_la_SOURCES = \
$(BUILT_SOURCES)
@@ -72,6 +78,14 @@ libgdk_wayland_la_SOURCES = \
wm-button-layout-translation.c \
wm-button-layout-translation.h
libgdk_wayland_la_SOURCES += \
cursor/os-compatibility.c \
cursor/os-compatibility.h \
cursor/wayland-cursor.c \
cursor/wayland-cursor.h \
cursor/xcursor.c \
cursor/xcursor.h
libgdkinclude_HEADERS = \
gdkwayland.h
@@ -98,6 +112,11 @@ endef
%-client-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/$$(call protostability,$$*)/$$(call protoname,$$*)/$$*.xml
$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@
xdg-activation-v1-protocol.c : $(WAYLAND_PROTOCOLS_DATADIR)/staging/xdg-activation/xdg-activation-v1.xml
$(AM_V_GEN)$(WAYLAND_SCANNER) private-code < $< > $@
xdg-activation-v1-client-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/staging/xdg-activation/xdg-activation-v1.xml
$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@
%-protocol.c : $(srcdir)/protocol/%.xml
$(AM_V_GEN)$(WAYLAND_SCANNER) private-code < $< > $@
@@ -109,7 +128,8 @@ endef
EXTRA_DIST += \
protocol/gtk-primary-selection.xml \
protocol/gtk-shell.xml \
protocol/server-decoration.xml \
protocol/server-decoration.xml \
cursor/meson.build \
meson.build
-include $(top_srcdir)/git.mk
+12
View File
@@ -0,0 +1,12 @@
wayland_cursor_sources = files([
'wayland-cursor.c',
'xcursor.c',
'os-compatibility.c'
])
libwayland_cursor = static_library('wayland+cursor',
sources: wayland_cursor_sources,
include_directories: [ confinc, ],
dependencies: [ glib_dep, wlclientdep, ],
c_args: common_cflags,
)
+172
View File
@@ -0,0 +1,172 @@
/*
* Copyright © 2012 Collabora, Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include "config.h"
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#ifdef HAVE_MEMFD_CREATE
#include <sys/mman.h>
#endif
#include "os-compatibility.h"
#ifndef HAVE_MKOSTEMP
static int
set_cloexec_or_close(int fd)
{
long flags;
if (fd == -1)
return -1;
flags = fcntl(fd, F_GETFD);
if (flags == -1)
goto err;
if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1)
goto err;
return fd;
err:
close(fd);
return -1;
}
#endif
static int
create_tmpfile_cloexec(char *tmpname)
{
int fd;
#ifdef HAVE_MKOSTEMP
fd = mkostemp(tmpname, O_CLOEXEC);
if (fd >= 0)
unlink(tmpname);
#else
fd = mkstemp(tmpname);
if (fd >= 0) {
fd = set_cloexec_or_close(fd);
unlink(tmpname);
}
#endif
return fd;
}
/*
* Create a new, unique, anonymous file of the given size, and
* return the file descriptor for it. The file descriptor is set
* CLOEXEC. The file is immediately suitable for mmap()'ing
* the given size at offset zero.
*
* The file should not have a permanent backing store like a disk,
* but may have if XDG_RUNTIME_DIR is not properly implemented in OS.
*
* The file name is deleted from the file system.
*
* The file is suitable for buffer sharing between processes by
* transmitting the file descriptor over Unix sockets using the
* SCM_RIGHTS methods.
*
* If the C library implements posix_fallocate(), it is used to
* guarantee that disk space is available for the file at the
* given size. If disk space is insufficient, errno is set to ENOSPC.
* If posix_fallocate() is not supported, program may receive
* SIGBUS on accessing mmap()'ed file contents instead.
*
* If the C library implements memfd_create(), it is used to create the
* file purely in memory, without any backing file name on the file
* system, and then sealing off the possibility of shrinking it. This
* can then be checked before accessing mmap()'ed file contents, to
* make sure SIGBUS can't happen. It also avoids requiring
* XDG_RUNTIME_DIR.
*/
int
os_create_anonymous_file(off_t size)
{
static const char template[] = "/wayland-cursor-shared-XXXXXX";
const char *path;
char *name;
int fd;
int ret;
#ifdef HAVE_MEMFD_CREATE
fd = memfd_create("wayland-cursor", MFD_CLOEXEC | MFD_ALLOW_SEALING);
if (fd >= 0) {
/* We can add this seal before calling posix_fallocate(), as
* the file is currently zero-sized anyway.
*
* There is also no need to check for the return value, we
* couldn't do anything with it anyway.
*/
fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL);
} else
#endif
{
path = getenv("XDG_RUNTIME_DIR");
if (!path) {
errno = ENOENT;
return -1;
}
name = malloc(strlen(path) + sizeof(template));
if (!name)
return -1;
strcpy(name, path);
strcat(name, template);
fd = create_tmpfile_cloexec(name);
free(name);
if (fd < 0)
return -1;
}
#ifdef HAVE_POSIX_FALLOCATE
ret = posix_fallocate(fd, 0, size);
if (ret != 0) {
close(fd);
errno = ret;
return -1;
}
#else
ret = ftruncate(fd, size);
if (ret < 0) {
close(fd);
return -1;
}
#endif
return fd;
}
+34
View File
@@ -0,0 +1,34 @@
/*
* Copyright © 2012 Collabora, Ltd.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef OS_COMPATIBILITY_H
#define OS_COMPATIBILITY_H
#include <sys/types.h>
int
os_create_anonymous_file(off_t size);
#endif /* OS_COMPATIBILITY_H */
+423
View File
@@ -0,0 +1,423 @@
/*
* Copyright © 2012 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include "config.h"
#include "xcursor.h"
#include "wayland-cursor.h"
#include "wayland-client.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <errno.h>
#include <os-compatibility.h>
#include <glib.h>
#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
struct shm_pool {
struct wl_shm_pool *pool;
int fd;
unsigned int size;
unsigned int used;
char *data;
};
static struct shm_pool *
shm_pool_create(struct wl_shm *shm, int size)
{
struct shm_pool *pool;
pool = malloc(sizeof *pool);
if (!pool)
return NULL;
pool->fd = os_create_anonymous_file (size);
if (pool->fd < 0)
goto err_free;
pool->data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
pool->fd, 0);
if (pool->data == MAP_FAILED)
goto err_close;
pool->pool = wl_shm_create_pool(shm, pool->fd, size);
pool->size = size;
pool->used = 0;
return pool;
err_close:
close(pool->fd);
err_free:
free(pool);
return NULL;
}
static int
shm_pool_resize(struct shm_pool *pool, int size)
{
if (ftruncate(pool->fd, size) < 0)
return 0;
#ifdef HAVE_POSIX_FALLOCATE
errno = posix_fallocate(pool->fd, 0, size);
if (errno != 0)
return 0;
#endif
wl_shm_pool_resize(pool->pool, size);
munmap(pool->data, pool->size);
pool->data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
pool->fd, 0);
if (pool->data == (void *)-1)
return 0;
pool->size = size;
return 1;
}
static int
shm_pool_allocate(struct shm_pool *pool, int size)
{
int offset;
if (pool->used + size > pool->size)
if (!shm_pool_resize(pool, 2 * pool->size + size))
return -1;
offset = pool->used;
pool->used += size;
return offset;
}
static void
shm_pool_destroy(struct shm_pool *pool)
{
munmap(pool->data, pool->size);
wl_shm_pool_destroy(pool->pool);
close(pool->fd);
free(pool);
}
struct wl_cursor_theme {
unsigned int cursor_count;
struct wl_cursor **cursors;
struct wl_shm *shm;
struct shm_pool *pool;
int size;
char *path;
};
struct cursor_image {
struct wl_cursor_image image;
struct wl_cursor_theme *theme;
struct wl_buffer *buffer;
int offset; /* data offset of this image in the shm pool */
};
struct cursor {
struct wl_cursor cursor;
uint32_t total_delay; /* length of the animation in ms */
};
/** Get an shm buffer for a cursor image
*
* \param image The cursor image
* \return An shm buffer for the cursor image. The user should not destroy
* the returned buffer.
*/
struct wl_buffer *
wl_cursor_image_get_buffer(struct wl_cursor_image *_img)
{
struct cursor_image *image = (struct cursor_image *) _img;
struct wl_cursor_theme *theme = image->theme;
if (!image->buffer) {
image->buffer =
wl_shm_pool_create_buffer(theme->pool->pool,
image->offset,
_img->width, _img->height,
_img->width * 4,
WL_SHM_FORMAT_ARGB8888);
};
return image->buffer;
}
static void
wl_cursor_image_destroy(struct wl_cursor_image *_img)
{
struct cursor_image *image = (struct cursor_image *) _img;
if (image->buffer)
wl_buffer_destroy(image->buffer);
free(image);
}
static void
wl_cursor_destroy(struct wl_cursor *cursor)
{
unsigned int i;
for (i = 0; i < cursor->image_count; i++)
wl_cursor_image_destroy(cursor->images[i]);
free(cursor->images);
free(cursor->name);
free(cursor);
}
static struct wl_cursor *
wl_cursor_create_from_xcursor_images(struct wl_cursor_theme *theme,
const char *name,
unsigned int size,
unsigned int scale)
{
char *path;
XcursorImages *images;
struct cursor *cursor;
struct cursor_image *image;
int i, nbytes;
unsigned int load_size;
int load_scale = 1;
load_size = size * scale;
path = g_strconcat (theme->path, "/", name, NULL);
images = xcursor_load_images (path, load_size);
if (!images)
{
g_free (path);
return NULL;
}
if (images->images[0]->width != load_size ||
images->images[0]->height != load_size)
{
xcursor_images_destroy (images);
images = xcursor_load_images (path, size);
load_scale = scale;
}
g_free (path);
cursor = malloc(sizeof *cursor);
if (!cursor) {
xcursor_images_destroy (images);
return NULL;
}
cursor->cursor.images =
malloc(images->nimage * sizeof cursor->cursor.images[0]);
if (!cursor->cursor.images) {
free(cursor);
xcursor_images_destroy (images);
return NULL;
}
cursor->cursor.name = strdup(name);
cursor->cursor.size = load_size;
cursor->total_delay = 0;
for (i = 0; i < images->nimage; i++) {
image = malloc(sizeof *image);
if (image == NULL)
break;
image->theme = theme;
image->buffer = NULL;
image->image.width = images->images[i]->width * load_scale;
image->image.height = images->images[i]->height * load_scale;
image->image.hotspot_x = images->images[i]->xhot * load_scale;
image->image.hotspot_y = images->images[i]->yhot * load_scale;
image->image.delay = images->images[i]->delay;
nbytes = image->image.width * image->image.height * 4;
image->offset = shm_pool_allocate(theme->pool, nbytes);
if (image->offset < 0) {
free(image);
break;
}
if (load_scale == 1) {
/* copy pixels to shm pool */
memcpy(theme->pool->data + image->offset,
images->images[i]->pixels, nbytes);
}
else {
/* scale image up while copying it */
for (int y = 0; y < image->image.height; y++) {
char *p = theme->pool->data + image->offset + y * image->image.width * 4;
char *q = ((char *)images->images[i]->pixels) + (y / load_scale) * images->images[i]->width * 4;
for (int x = 0; x < image->image.width; x++) {
p[4 * x] = q[4 * (x/load_scale)];
p[4 * x + 1] = q[4 * (x/load_scale) + 1];
p[4 * x + 2] = q[4 * (x/load_scale) + 2];
p[4 * x + 3] = q[4 * (x/load_scale) + 3];
}
}
}
cursor->total_delay += image->image.delay;
cursor->cursor.images[i] = (struct wl_cursor_image *) image;
}
cursor->cursor.image_count = i;
if (cursor->cursor.image_count == 0) {
free(cursor->cursor.name);
free(cursor->cursor.images);
free(cursor);
xcursor_images_destroy (images);
return NULL;
}
xcursor_images_destroy (images);
return &cursor->cursor;
}
static void
load_cursor(struct wl_cursor_theme *theme,
const char *name,
unsigned int size,
unsigned int scale)
{
struct wl_cursor *cursor;
cursor = wl_cursor_create_from_xcursor_images(theme, name, size, scale);
if (cursor) {
theme->cursor_count++;
theme->cursors =
realloc(theme->cursors,
theme->cursor_count * sizeof theme->cursors[0]);
if (theme->cursors == NULL) {
theme->cursor_count--;
free(cursor);
} else {
theme->cursors[theme->cursor_count - 1] = cursor;
}
}
}
/** Load a cursor theme to memory shared with the compositor
*
* \param name The name of the cursor theme to load. If %NULL, the default
* theme will be loaded.
* \param size Desired size of the cursor images.
* \param shm The compositor's shm interface.
*
* \return An object representing the theme that should be destroyed with
* wl_cursor_theme_destroy() or %NULL on error. If no theme with the given
* name exists, a default theme will be loaded.
*/
struct wl_cursor_theme *
wl_cursor_theme_create(const char *path, int size, struct wl_shm *shm)
{
struct wl_cursor_theme *theme;
theme = malloc(sizeof *theme);
if (!theme)
return NULL;
theme->path = strdup (path);
theme->size = size;
theme->cursor_count = 0;
theme->cursors = NULL;
theme->pool = shm_pool_create(shm, size * size * 4);
if (!theme->pool) {
free (theme->path);
free (theme);
return NULL;
}
return theme;
}
/** Destroys a cursor theme object
*
* \param theme The cursor theme to be destroyed
*/
void
wl_cursor_theme_destroy(struct wl_cursor_theme *theme)
{
unsigned int i;
for (i = 0; i < theme->cursor_count; i++)
wl_cursor_destroy(theme->cursors[i]);
shm_pool_destroy(theme->pool);
free(theme->cursors);
free(theme->path);
free(theme);
}
/** Get the cursor for a given name from a cursor theme
*
* \param theme The cursor theme
* \param name Name of the desired cursor
* \return The theme's cursor of the given name or %NULL if there is no
* such cursor
*/
struct wl_cursor *
wl_cursor_theme_get_cursor(struct wl_cursor_theme *theme,
const char *name,
unsigned int scale)
{
unsigned int i;
unsigned int size;
size = theme->size * scale;
for (i = 0; i < theme->cursor_count; i++) {
if (size == theme->cursors[i]->size &&
strcmp(name, theme->cursors[i]->name) == 0)
return theme->cursors[i];
}
load_cursor (theme, name, theme->size, scale);
if (i < theme->cursor_count) {
if (size == theme->cursors[i]->size &&
strcmp (name, theme->cursors[theme->cursor_count - 1]->name) == 0)
return theme->cursors[theme->cursor_count - 1];
}
return NULL;
}
+72
View File
@@ -0,0 +1,72 @@
/*
* Copyright © 2012 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef WAYLAND_CURSOR_H
#define WAYLAND_CURSOR_H
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
struct wl_cursor_theme;
struct wl_buffer;
struct wl_shm;
struct wl_cursor_image {
uint32_t width; /* actual width */
uint32_t height; /* actual height */
uint32_t hotspot_x; /* hot spot x (must be inside image) */
uint32_t hotspot_y; /* hot spot y (must be inside image) */
uint32_t delay; /* animation delay to next frame (ms) */
};
struct wl_cursor {
unsigned int image_count;
struct wl_cursor_image **images;
char *name;
unsigned int size;
};
struct wl_cursor_theme *
wl_cursor_theme_create(const char *name, int size, struct wl_shm *shm);
void
wl_cursor_theme_destroy(struct wl_cursor_theme *theme);
struct wl_cursor *
wl_cursor_theme_get_cursor(struct wl_cursor_theme *theme,
const char *name,
unsigned int scale);
struct wl_buffer *
wl_cursor_image_get_buffer(struct wl_cursor_image *image);
#ifdef __cplusplus
}
#endif
#endif
+612
View File
@@ -0,0 +1,612 @@
/*
* Copyright © 2002 Keith Packard
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#include "xcursor.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
/*
* From libXcursor/include/X11/extensions/Xcursor.h
*/
#define XcursorTrue 1
#define XcursorFalse 0
/*
* Cursor files start with a header. The header
* contains a magic number, a version number and a
* table of contents which has type and offset information
* for the remaining tables in the file.
*
* File minor versions increment for compatible changes
* File major versions increment for incompatible changes (never, we hope)
*
* Chunks of the same type are always upward compatible. Incompatible
* changes are made with new chunk types; the old data can remain under
* the old type. Upward compatible changes can add header data as the
* header lengths are specified in the file.
*
* File:
* FileHeader
* LISTofChunk
*
* FileHeader:
* CARD32 magic magic number
* CARD32 header bytes in file header
* CARD32 version file version
* CARD32 ntoc number of toc entries
* LISTofFileToc toc table of contents
*
* FileToc:
* CARD32 type entry type
* CARD32 subtype entry subtype (size for images)
* CARD32 position absolute file position
*/
#define XCURSOR_MAGIC 0x72756358 /* "Xcur" LSBFirst */
/*
* Current Xcursor version number. Will be substituted by configure
* from the version in the libXcursor configure.ac file.
*/
#define XCURSOR_LIB_MAJOR 1
#define XCURSOR_LIB_MINOR 1
#define XCURSOR_LIB_REVISION 13
#define XCURSOR_LIB_VERSION ((XCURSOR_LIB_MAJOR * 10000) + \
(XCURSOR_LIB_MINOR * 100) + \
(XCURSOR_LIB_REVISION))
/*
* This version number is stored in cursor files; changes to the
* file format require updating this version number
*/
#define XCURSOR_FILE_MAJOR 1
#define XCURSOR_FILE_MINOR 0
#define XCURSOR_FILE_VERSION ((XCURSOR_FILE_MAJOR << 16) | (XCURSOR_FILE_MINOR))
#define XCURSOR_FILE_HEADER_LEN (4 * 4)
#define XCURSOR_FILE_TOC_LEN (3 * 4)
typedef struct _XcursorFileToc {
XcursorUInt type; /* chunk type */
XcursorUInt subtype; /* subtype (size for images) */
XcursorUInt position; /* absolute position in file */
} XcursorFileToc;
typedef struct _XcursorFileHeader {
XcursorUInt magic; /* magic number */
XcursorUInt header; /* byte length of header */
XcursorUInt version; /* file version number */
XcursorUInt ntoc; /* number of toc entries */
XcursorFileToc *tocs; /* table of contents */
} XcursorFileHeader;
/*
* The rest of the file is a list of chunks, each tagged by type
* and version.
*
* Chunk:
* ChunkHeader
* <extra type-specific header fields>
* <type-specific data>
*
* ChunkHeader:
* CARD32 header bytes in chunk header + type header
* CARD32 type chunk type
* CARD32 subtype chunk subtype
* CARD32 version chunk type version
*/
#define XCURSOR_CHUNK_HEADER_LEN (4 * 4)
typedef struct _XcursorChunkHeader {
XcursorUInt header; /* bytes in chunk header */
XcursorUInt type; /* chunk type */
XcursorUInt subtype; /* chunk subtype (size for images) */
XcursorUInt version; /* version of this type */
} XcursorChunkHeader;
/*
* Here's a list of the known chunk types
*/
/*
* Comments consist of a 4-byte length field followed by
* UTF-8 encoded text
*
* Comment:
* ChunkHeader header chunk header
* CARD32 length bytes in text
* LISTofCARD8 text UTF-8 encoded text
*/
#define XCURSOR_COMMENT_TYPE 0xfffe0001
#define XCURSOR_COMMENT_VERSION 1
#define XCURSOR_COMMENT_HEADER_LEN (XCURSOR_CHUNK_HEADER_LEN + (1 *4))
#define XCURSOR_COMMENT_COPYRIGHT 1
#define XCURSOR_COMMENT_LICENSE 2
#define XCURSOR_COMMENT_OTHER 3
#define XCURSOR_COMMENT_MAX_LEN 0x100000
typedef struct _XcursorComment {
XcursorUInt version;
XcursorUInt comment_type;
char *comment;
} XcursorComment;
/*
* Each cursor image occupies a separate image chunk.
* The length of the image header follows the chunk header
* so that future versions can extend the header without
* breaking older applications
*
* Image:
* ChunkHeader header chunk header
* CARD32 width actual width
* CARD32 height actual height
* CARD32 xhot hot spot x
* CARD32 yhot hot spot y
* CARD32 delay animation delay
* LISTofCARD32 pixels ARGB pixels
*/
#define XCURSOR_IMAGE_TYPE 0xfffd0002
#define XCURSOR_IMAGE_VERSION 1
#define XCURSOR_IMAGE_HEADER_LEN (XCURSOR_CHUNK_HEADER_LEN + (5*4))
#define XCURSOR_IMAGE_MAX_SIZE 0x7fff /* 32767x32767 max cursor size */
typedef struct _XcursorFile XcursorFile;
struct _XcursorFile {
void *closure;
int (*read) (XcursorFile *file, unsigned char *buf, int len);
int (*write) (XcursorFile *file, unsigned char *buf, int len);
int (*seek) (XcursorFile *file, long offset, int whence);
};
typedef struct _XcursorComments {
int ncomment; /* number of comments */
XcursorComment **comments; /* array of XcursorComment pointers */
} XcursorComments;
/*
* From libXcursor/src/file.c
*/
static XcursorImage *
XcursorImageCreate (int width, int height)
{
XcursorImage *image;
if (width < 0 || height < 0)
return NULL;
if (width > XCURSOR_IMAGE_MAX_SIZE || height > XCURSOR_IMAGE_MAX_SIZE)
return NULL;
image = malloc (sizeof (XcursorImage) +
width * height * sizeof (XcursorPixel));
if (!image)
return NULL;
image->version = XCURSOR_IMAGE_VERSION;
image->pixels = (XcursorPixel *) (image + 1);
image->size = width > height ? width : height;
image->width = width;
image->height = height;
image->delay = 0;
return image;
}
static void
XcursorImageDestroy (XcursorImage *image)
{
free (image);
}
static XcursorImages *
XcursorImagesCreate (int size)
{
XcursorImages *images;
images = malloc (sizeof (XcursorImages) +
size * sizeof (XcursorImage *));
if (!images)
return NULL;
images->nimage = 0;
images->images = (XcursorImage **) (images + 1);
images->name = NULL;
return images;
}
static void
XcursorImagesDestroy (XcursorImages *images)
{
int n;
if (!images)
return;
for (n = 0; n < images->nimage; n++)
XcursorImageDestroy (images->images[n]);
if (images->name)
free (images->name);
free (images);
}
static XcursorBool
_XcursorReadUInt (XcursorFile *file, XcursorUInt *u)
{
unsigned char bytes[4];
if (!file || !u)
return XcursorFalse;
if ((*file->read) (file, bytes, 4) != 4)
return XcursorFalse;
*u = ((bytes[0] << 0) |
(bytes[1] << 8) |
(bytes[2] << 16) |
(bytes[3] << 24));
return XcursorTrue;
}
static void
_XcursorFileHeaderDestroy (XcursorFileHeader *fileHeader)
{
free (fileHeader);
}
static XcursorFileHeader *
_XcursorFileHeaderCreate (int ntoc)
{
XcursorFileHeader *fileHeader;
if (ntoc > 0x10000)
return NULL;
fileHeader = malloc (sizeof (XcursorFileHeader) +
ntoc * sizeof (XcursorFileToc));
if (!fileHeader)
return NULL;
fileHeader->magic = XCURSOR_MAGIC;
fileHeader->header = XCURSOR_FILE_HEADER_LEN;
fileHeader->version = XCURSOR_FILE_VERSION;
fileHeader->ntoc = ntoc;
fileHeader->tocs = (XcursorFileToc *) (fileHeader + 1);
return fileHeader;
}
static XcursorFileHeader *
_XcursorReadFileHeader (XcursorFile *file)
{
XcursorFileHeader head, *fileHeader;
XcursorUInt skip;
unsigned int n;
if (!file)
return NULL;
if (!_XcursorReadUInt (file, &head.magic))
return NULL;
if (head.magic != XCURSOR_MAGIC)
return NULL;
if (!_XcursorReadUInt (file, &head.header))
return NULL;
if (!_XcursorReadUInt (file, &head.version))
return NULL;
if (!_XcursorReadUInt (file, &head.ntoc))
return NULL;
skip = head.header - XCURSOR_FILE_HEADER_LEN;
if (skip)
if ((*file->seek) (file, skip, SEEK_CUR) == EOF)
return NULL;
fileHeader = _XcursorFileHeaderCreate (head.ntoc);
if (!fileHeader)
return NULL;
fileHeader->magic = head.magic;
fileHeader->header = head.header;
fileHeader->version = head.version;
fileHeader->ntoc = head.ntoc;
for (n = 0; n < fileHeader->ntoc; n++)
{
if (!_XcursorReadUInt (file, &fileHeader->tocs[n].type))
break;
if (!_XcursorReadUInt (file, &fileHeader->tocs[n].subtype))
break;
if (!_XcursorReadUInt (file, &fileHeader->tocs[n].position))
break;
}
if (n != fileHeader->ntoc)
{
_XcursorFileHeaderDestroy (fileHeader);
return NULL;
}
return fileHeader;
}
static XcursorBool
_XcursorSeekToToc (XcursorFile *file,
XcursorFileHeader *fileHeader,
int toc)
{
if (!file || !fileHeader || \
(*file->seek) (file, fileHeader->tocs[toc].position, SEEK_SET) == EOF)
return XcursorFalse;
return XcursorTrue;
}
static XcursorBool
_XcursorFileReadChunkHeader (XcursorFile *file,
XcursorFileHeader *fileHeader,
int toc,
XcursorChunkHeader *chunkHeader)
{
if (!file || !fileHeader || !chunkHeader)
return XcursorFalse;
if (!_XcursorSeekToToc (file, fileHeader, toc))
return XcursorFalse;
if (!_XcursorReadUInt (file, &chunkHeader->header))
return XcursorFalse;
if (!_XcursorReadUInt (file, &chunkHeader->type))
return XcursorFalse;
if (!_XcursorReadUInt (file, &chunkHeader->subtype))
return XcursorFalse;
if (!_XcursorReadUInt (file, &chunkHeader->version))
return XcursorFalse;
/* sanity check */
if (chunkHeader->type != fileHeader->tocs[toc].type ||
chunkHeader->subtype != fileHeader->tocs[toc].subtype)
return XcursorFalse;
return XcursorTrue;
}
#define dist(a,b) ((a) > (b) ? (a) - (b) : (b) - (a))
static XcursorDim
_XcursorFindBestSize (XcursorFileHeader *fileHeader,
XcursorDim size,
int *nsizesp)
{
unsigned int n;
int nsizes = 0;
XcursorDim bestSize = 0;
XcursorDim thisSize;
if (!fileHeader || !nsizesp)
return 0;
for (n = 0; n < fileHeader->ntoc; n++)
{
if (fileHeader->tocs[n].type != XCURSOR_IMAGE_TYPE)
continue;
thisSize = fileHeader->tocs[n].subtype;
if (!bestSize || dist (thisSize, size) < dist (bestSize, size))
{
bestSize = thisSize;
nsizes = 1;
}
else if (thisSize == bestSize)
nsizes++;
}
*nsizesp = nsizes;
return bestSize;
}
static int
_XcursorFindImageToc (XcursorFileHeader *fileHeader,
XcursorDim size,
int count)
{
unsigned int toc;
XcursorDim thisSize;
if (!fileHeader)
return 0;
for (toc = 0; toc < fileHeader->ntoc; toc++)
{
if (fileHeader->tocs[toc].type != XCURSOR_IMAGE_TYPE)
continue;
thisSize = fileHeader->tocs[toc].subtype;
if (thisSize != size)
continue;
if (!count)
break;
count--;
}
if (toc == fileHeader->ntoc)
return -1;
return toc;
}
static XcursorImage *
_XcursorReadImage (XcursorFile *file,
XcursorFileHeader *fileHeader,
int toc)
{
XcursorChunkHeader chunkHeader;
XcursorImage head;
XcursorImage *image;
int n;
XcursorPixel *p;
if (!file || !fileHeader)
return NULL;
if (!_XcursorFileReadChunkHeader (file, fileHeader, toc, &chunkHeader))
return NULL;
if (!_XcursorReadUInt (file, &head.width))
return NULL;
if (!_XcursorReadUInt (file, &head.height))
return NULL;
if (!_XcursorReadUInt (file, &head.xhot))
return NULL;
if (!_XcursorReadUInt (file, &head.yhot))
return NULL;
if (!_XcursorReadUInt (file, &head.delay))
return NULL;
/* sanity check data */
if (head.width > XCURSOR_IMAGE_MAX_SIZE ||
head.height > XCURSOR_IMAGE_MAX_SIZE)
return NULL;
if (head.width == 0 || head.height == 0)
return NULL;
if (head.xhot > head.width || head.yhot > head.height)
return NULL;
/* Create the image and initialize it */
image = XcursorImageCreate (head.width, head.height);
if (image == NULL)
return NULL;
if (chunkHeader.version < image->version)
image->version = chunkHeader.version;
image->size = chunkHeader.subtype;
image->xhot = head.xhot;
image->yhot = head.yhot;
image->delay = head.delay;
n = image->width * image->height;
p = image->pixels;
while (n--)
{
if (!_XcursorReadUInt (file, p))
{
XcursorImageDestroy (image);
return NULL;
}
p++;
}
return image;
}
static XcursorImages *
XcursorXcFileLoadImages (XcursorFile *file, int size)
{
XcursorFileHeader *fileHeader;
XcursorDim bestSize;
int nsize;
XcursorImages *images;
int n;
int toc;
if (!file || size < 0)
return NULL;
fileHeader = _XcursorReadFileHeader (file);
if (!fileHeader)
return NULL;
bestSize = _XcursorFindBestSize (fileHeader, (XcursorDim) size, &nsize);
if (!bestSize)
{
_XcursorFileHeaderDestroy (fileHeader);
return NULL;
}
images = XcursorImagesCreate (nsize);
if (!images)
{
_XcursorFileHeaderDestroy (fileHeader);
return NULL;
}
for (n = 0; n < nsize; n++)
{
toc = _XcursorFindImageToc (fileHeader, bestSize, n);
if (toc < 0)
break;
images->images[images->nimage] = _XcursorReadImage (file, fileHeader,
toc);
if (!images->images[images->nimage])
break;
images->nimage++;
}
_XcursorFileHeaderDestroy (fileHeader);
if (images->nimage != nsize)
{
XcursorImagesDestroy (images);
images = NULL;
}
return images;
}
static int
_XcursorStdioFileRead (XcursorFile *file, unsigned char *buf, int len)
{
FILE *f = file->closure;
return fread (buf, 1, len, f);
}
static int
_XcursorStdioFileWrite (XcursorFile *file, unsigned char *buf, int len)
{
FILE *f = file->closure;
return fwrite (buf, 1, len, f);
}
static int
_XcursorStdioFileSeek (XcursorFile *file, long offset, int whence)
{
FILE *f = file->closure;
return fseek (f, offset, whence);
}
static void
_XcursorStdioFileInitialize (FILE *stdfile, XcursorFile *file)
{
file->closure = stdfile;
file->read = _XcursorStdioFileRead;
file->write = _XcursorStdioFileWrite;
file->seek = _XcursorStdioFileSeek;
}
static XcursorImages *
XcursorFileLoadImages (FILE *file, int size)
{
XcursorFile f;
if (!file)
return NULL;
_XcursorStdioFileInitialize (file, &f);
return XcursorXcFileLoadImages (&f, size);
}
XcursorImages *
xcursor_load_images (const char *path, int size)
{
FILE *f;
XcursorImages *images;
f = fopen (path, "r");
if (!f)
return NULL;
images = XcursorFileLoadImages (f, size);
fclose (f);
return images;
}
void
xcursor_images_destroy (XcursorImages *images)
{
XcursorImagesDestroy (images);
}
+61
View File
@@ -0,0 +1,61 @@
/*
* Copyright © 2002 Keith Packard
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial
* portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
#ifndef XCURSOR_H
#define XCURSOR_H
typedef int XcursorBool;
typedef unsigned int XcursorUInt;
typedef XcursorUInt XcursorDim;
typedef XcursorUInt XcursorPixel;
typedef struct _XcursorImage {
XcursorUInt version; /* version of the image data */
XcursorDim size; /* nominal size for matching */
XcursorDim width; /* actual width */
XcursorDim height; /* actual height */
XcursorDim xhot; /* hot spot x (must be inside image) */
XcursorDim yhot; /* hot spot y (must be inside image) */
XcursorUInt delay; /* animation delay to next frame (ms) */
XcursorPixel *pixels; /* pointer to pixels */
} XcursorImage;
/*
* Other data structures exposed by the library API
*/
typedef struct _XcursorImages {
int nimage; /* number of images */
XcursorImage **images; /* array of XcursorImage pointers */
char *name; /* name used to load images */
} XcursorImages;
void
xcursor_images_destroy (XcursorImages *images);
XcursorImages *
xcursor_load_images (const char *path, int size);
#endif
+60
View File
@@ -30,6 +30,26 @@
#include "gdkinternals.h"
#include "gdkintl.h"
#ifdef HAVE_XDG_ACTIVATION
typedef struct {
gchar *token;
} AppLaunchData;
static void
token_done (gpointer data,
struct xdg_activation_token_v1 *provider,
const char *token)
{
AppLaunchData *app_launch_data = data;
app_launch_data->token = g_strdup (token);
}
static const struct xdg_activation_token_v1_listener token_listener = {
token_done,
};
#endif
static char *
gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context,
GAppInfo *info,
@@ -40,6 +60,46 @@ gdk_wayland_app_launch_context_get_startup_notify_id (GAppLaunchContext *context
g_object_get (context, "display", &display, NULL);
#ifdef HAVE_XDG_ACTIVATION
if (display->xdg_activation)
{
struct xdg_activation_token_v1 *token;
struct wl_event_queue *event_queue;
struct wl_surface *wl_surface = NULL;
GdkSeat *seat;
GdkWindow *focus_window;
AppLaunchData app_launch_data = { 0 };
event_queue = wl_display_create_queue (display->wl_display);
seat = gdk_display_get_default_seat (GDK_DISPLAY (display));
token = xdg_activation_v1_get_activation_token (display->xdg_activation);
wl_proxy_set_queue ((struct wl_proxy *) token, event_queue);
xdg_activation_token_v1_add_listener (token,
&token_listener,
&app_launch_data);
xdg_activation_token_v1_set_serial (token,
_gdk_wayland_seat_get_last_implicit_grab_serial (seat, NULL),
gdk_wayland_seat_get_wl_seat (seat));
focus_window = gdk_wayland_device_get_focus (gdk_seat_get_keyboard (seat));
if (focus_window)
wl_surface = gdk_wayland_window_get_wl_surface (focus_window);
if (wl_surface)
xdg_activation_token_v1_set_surface (token, wl_surface);
xdg_activation_token_v1_commit (token);
while (app_launch_data.token == NULL)
wl_display_dispatch_queue (display->wl_display, event_queue);
xdg_activation_token_v1_destroy (token);
id = app_launch_data.token;
wl_event_queue_destroy (event_queue);
}
else
#endif
if (display->gtk_shell_version >= 3)
{
id = g_uuid_string_random ();
+7 -12
View File
@@ -34,7 +34,7 @@
#include "gdkwayland.h"
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <wayland-cursor.h>
#include <cursor/wayland-cursor.h>
#define GDK_TYPE_WAYLAND_CURSOR (_gdk_wayland_cursor_get_type ())
#define GDK_WAYLAND_CURSOR(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_WAYLAND_CURSOR, GdkWaylandCursor))
@@ -149,9 +149,8 @@ _gdk_wayland_cursor_update (GdkWaylandDisplay *display_wayland,
if (cursor->name == NULL)
return FALSE;
theme = _gdk_wayland_display_get_scaled_cursor_theme (display_wayland,
cursor->scale);
c = wl_cursor_theme_get_cursor (theme, cursor->name);
theme = _gdk_wayland_display_get_cursor_theme (display_wayland);
c = wl_cursor_theme_get_cursor (theme, cursor->name, cursor->scale);
if (!c)
{
const char *fallback;
@@ -159,9 +158,9 @@ _gdk_wayland_cursor_update (GdkWaylandDisplay *display_wayland,
fallback = name_fallback (cursor->name);
if (fallback)
{
c = wl_cursor_theme_get_cursor (theme, name_fallback (cursor->name));
c = wl_cursor_theme_get_cursor (theme, fallback, cursor->scale);
if (!c)
c = wl_cursor_theme_get_cursor (theme, "left_ptr");
c = wl_cursor_theme_get_cursor (theme, "left_ptr", cursor->scale);
}
}
@@ -305,12 +304,6 @@ _gdk_wayland_cursor_set_scale (GdkCursor *cursor,
GDK_WAYLAND_DISPLAY (gdk_cursor_get_display (cursor));
GdkWaylandCursor *wayland_cursor = GDK_WAYLAND_CURSOR (cursor);
if (scale > GDK_WAYLAND_MAX_THEME_SCALE)
{
g_warning (G_STRLOC ": cursor theme size %u too large", scale);
scale = GDK_WAYLAND_MAX_THEME_SCALE;
}
if (wayland_cursor->scale == scale)
return;
@@ -465,6 +458,8 @@ _gdk_wayland_display_get_cursor_for_surface (GdkDisplay *display,
cursor->surface.scale = (int)sx;
cursor->surface.width = cairo_image_surface_get_width (surface);
cursor->surface.height = cairo_image_surface_get_height (surface);
cursor->surface.hotspot_x *= sx;
cursor->surface.hotspot_y *= sx;
}
else
{
+9 -9
View File
@@ -732,7 +732,7 @@ device_emit_grab_crossing (GdkDevice *device,
}
}
static GdkWindow *
GdkWindow *
gdk_wayland_device_get_focus (GdkDevice *device)
{
GdkWaylandSeat *wayland_seat = GDK_WAYLAND_SEAT (gdk_device_get_seat (device));
@@ -1188,14 +1188,16 @@ data_device_enter (void *data,
seat->pointer_info.surface_x = wl_fixed_to_double (x);
seat->pointer_info.surface_y = wl_fixed_to_double (y);
gdk_wayland_drop_context_update_targets (seat->drop_context);
selection = gdk_drag_get_selection (seat->drop_context);
dnd_owner = gdk_selection_owner_get_for_display (seat->display, selection);
if (!dnd_owner)
dnd_owner = seat->foreign_dnd_window;
gdk_wayland_selection_set_offer (seat->display, selection, offer);
gdk_wayland_drop_context_update_targets (seat->drop_context);
_gdk_wayland_drag_context_set_source_window (seat->drop_context, dnd_owner);
_gdk_wayland_drag_context_set_dest_window (seat->drop_context,
@@ -1206,8 +1208,6 @@ data_device_enter (void *data,
_gdk_wayland_drag_context_emit_event (seat->drop_context, GDK_DRAG_ENTER,
GDK_CURRENT_TIME);
gdk_wayland_selection_set_offer (seat->display, selection, offer);
emit_selection_owner_change (dest_window, selection);
}
@@ -4937,7 +4937,7 @@ gdk_wayland_seat_grab (GdkSeat *seat,
native,
GDK_OWNERSHIP_NONE,
owner_events,
GDK_ALL_EVENTS_MASK,
GDK_ALL_EVENTS_MASK & ~GDK_POINTER_MOTION_HINT_MASK,
_gdk_display_get_next_serial (display),
evtime,
FALSE);
@@ -4959,7 +4959,7 @@ gdk_wayland_seat_grab (GdkSeat *seat,
native,
GDK_OWNERSHIP_NONE,
owner_events,
GDK_ALL_EVENTS_MASK,
GDK_ALL_EVENTS_MASK & ~GDK_POINTER_MOTION_HINT_MASK,
_gdk_display_get_next_serial (display),
evtime,
FALSE);
@@ -4977,7 +4977,7 @@ gdk_wayland_seat_grab (GdkSeat *seat,
native,
GDK_OWNERSHIP_NONE,
owner_events,
GDK_ALL_EVENTS_MASK,
GDK_ALL_EVENTS_MASK & ~GDK_POINTER_MOTION_HINT_MASK,
_gdk_display_get_next_serial (display),
evtime,
FALSE);
@@ -5003,7 +5003,7 @@ gdk_wayland_seat_grab (GdkSeat *seat,
native,
GDK_OWNERSHIP_NONE,
owner_events,
GDK_ALL_EVENTS_MASK,
GDK_ALL_EVENTS_MASK & ~GDK_POINTER_MOTION_HINT_MASK,
_gdk_display_get_next_serial (display),
evtime,
FALSE);
+80 -63
View File
@@ -84,7 +84,10 @@
#define MIN_SYSTEM_BELL_DELAY_MS 20
#define GTK_SHELL1_VERSION 4
#define GTK_SHELL1_VERSION 5
#ifdef HAVE_XDG_ACTIVATION
#define XDG_ACTIVATION_VERSION 1
#endif
static void _gdk_wayland_display_load_cursor_theme (GdkWaylandDisplay *display_wayland);
@@ -124,10 +127,6 @@ xdg_wm_base_ping (void *data,
struct xdg_wm_base *xdg_wm_base,
uint32_t serial)
{
GdkWaylandDisplay *display_wayland = data;
_gdk_wayland_display_update_serial (display_wayland, serial);
GDK_NOTE (EVENTS,
g_message ("ping, shell %p, serial %u\n", xdg_wm_base, serial));
@@ -434,26 +433,19 @@ gdk_registry_handle_global (void *data,
}
else if (strcmp (interface, "wl_seat") == 0)
{
SeatAddedClosure *closure;
static const char *required_device_manager_globals[] = {
"wl_compositor",
"wl_data_device_manager",
NULL
};
if (has_required_globals (display_wayland,
required_device_manager_globals))
_gdk_wayland_display_add_seat (display_wayland, id, version);
else
{
SeatAddedClosure *closure;
closure = g_new0 (SeatAddedClosure, 1);
closure->base.handler = seat_added_closure_run;
closure->base.required_globals = required_device_manager_globals;
closure->id = id;
closure->version = version;
postpone_on_globals_closure (display_wayland, &closure->base);
}
closure = g_new0 (SeatAddedClosure, 1);
closure->base.handler = seat_added_closure_run;
closure->base.required_globals = required_device_manager_globals;
closure->id = id;
closure->version = version;
postpone_on_globals_closure (display_wayland, &closure->base);
}
else if (strcmp (interface, "wl_data_device_manager") == 0)
{
@@ -467,12 +459,12 @@ gdk_registry_handle_global (void *data,
display_wayland->subcompositor =
wl_registry_bind (display_wayland->wl_registry, id, &wl_subcompositor_interface, 1);
}
else if (strcmp (interface, "zwp_pointer_gestures_v1") == 0 &&
version == GDK_ZWP_POINTER_GESTURES_V1_VERSION)
else if (strcmp (interface, "zwp_pointer_gestures_v1") == 0)
{
display_wayland->pointer_gestures =
wl_registry_bind (display_wayland->wl_registry,
id, &zwp_pointer_gestures_v1_interface, version);
id, &zwp_pointer_gestures_v1_interface,
MIN (version, GDK_ZWP_POINTER_GESTURES_V1_VERSION));
}
else if (strcmp (interface, "gtk_primary_selection_device_manager") == 0)
{
@@ -530,11 +522,20 @@ gdk_registry_handle_global (void *data,
_gdk_wayland_screen_init_xdg_output (display_wayland->screen);
_gdk_wayland_display_async_roundtrip (display_wayland);
}
#ifdef HAVE_XDG_ACTIVATION
else if (strcmp (interface, "xdg_activation_v1") == 0)
{
display_wayland->xdg_activation_version =
MIN (version, XDG_ACTIVATION_VERSION);
display_wayland->xdg_activation =
wl_registry_bind (display_wayland->wl_registry, id,
&xdg_activation_v1_interface,
display_wayland->xdg_activation_version);
}
#endif
g_hash_table_insert (display_wayland->known_globals,
GUINT_TO_POINTER (id), g_strdup (interface));
process_on_globals_closures (display_wayland);
}
static void
@@ -625,8 +626,13 @@ _gdk_wayland_display_open (const gchar *display_name)
display_wayland->wl_registry = wl_display_get_registry (display_wayland->wl_display);
wl_registry_add_listener (display_wayland->wl_registry, &registry_listener, display_wayland);
if (wl_display_roundtrip (display_wayland->wl_display) < 0)
{
g_object_unref (display);
return NULL;
}
_gdk_wayland_display_async_roundtrip (display_wayland);
process_on_globals_closures (display_wayland);
/* Wait for initializing to complete. This means waiting for all
* asynchrounous roundtrips that were triggered during initial roundtrip. */
@@ -714,7 +720,6 @@ static void
gdk_wayland_display_finalize (GObject *object)
{
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (object);
guint i;
_gdk_wayland_display_finalize_cursors (display_wayland);
@@ -724,13 +729,10 @@ gdk_wayland_display_finalize (GObject *object)
g_free (display_wayland->cursor_theme_name);
xkb_context_unref (display_wayland->xkb_context);
for (i = 0; i < GDK_WAYLAND_THEME_SCALES_COUNT; i++)
if (display_wayland->cursor_theme)
{
if (display_wayland->scaled_cursor_themes[i])
{
wl_cursor_theme_destroy (display_wayland->scaled_cursor_themes[i]);
display_wayland->scaled_cursor_themes[i] = NULL;
}
wl_cursor_theme_destroy (display_wayland->cursor_theme);
display_wayland->cursor_theme = NULL;
}
g_ptr_array_free (display_wayland->monitors, TRUE);
@@ -943,6 +945,12 @@ gdk_wayland_display_notify_startup_complete (GdkDisplay *display,
{
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
#ifdef HAVE_XDG_ACTIVATION
/* Will be signaled with focus activation */
if (display_wayland->xdg_activation)
return;
#endif
if (startup_id == NULL)
{
startup_id = display_wayland->startup_notification_id;
@@ -951,6 +959,10 @@ gdk_wayland_display_notify_startup_complete (GdkDisplay *display,
return;
}
#ifdef HAVE_XDG_ACTIVATION
if (display_wayland->xdg_activation) /* FIXME: Isn't this redundant? */
return;
#endif
if (display_wayland->gtk_shell)
gtk_shell1_set_startup_id (display_wayland->gtk_shell, startup_id);
}
@@ -1100,6 +1112,33 @@ gdk_wayland_display_init (GdkWaylandDisplay *display)
display->monitors = g_ptr_array_new_with_free_func (g_object_unref);
}
static struct wl_cursor_theme *
get_cursor_theme (GdkWaylandDisplay *display_wayland,
const char *name,
int size)
{
const char * const *xdg_data_dirs;
struct wl_cursor_theme *theme = NULL;
int i;
xdg_data_dirs = g_get_system_data_dirs ();
for (i = 0; xdg_data_dirs[i]; i++)
{
char *path = g_build_filename (xdg_data_dirs[i], "icons", name, "cursors", NULL);
if (g_file_test (path, G_FILE_TEST_IS_DIR))
theme = wl_cursor_theme_create (path, size, display_wayland->shm);
g_free (path);
if (theme)
return theme;
}
/* This may fall back to builtin cursors */
return wl_cursor_theme_create ("/usr/share/icons/default/cursors", size, display_wayland->shm);
}
void
gdk_wayland_display_set_cursor_theme (GdkDisplay *display,
const gchar *name,
@@ -1107,7 +1146,6 @@ gdk_wayland_display_set_cursor_theme (GdkDisplay *display,
{
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY(display);
struct wl_cursor_theme *theme;
int i;
g_assert (display_wayland);
g_assert (display_wayland->shm);
@@ -1116,22 +1154,21 @@ gdk_wayland_display_set_cursor_theme (GdkDisplay *display,
display_wayland->cursor_theme_size == size)
return;
theme = wl_cursor_theme_load (name, size, display_wayland->shm);
theme = get_cursor_theme (display_wayland, name, size);
if (theme == NULL)
{
g_warning ("Failed to load cursor theme %s", name);
return;
}
for (i = 0; i < GDK_WAYLAND_THEME_SCALES_COUNT; i++)
if (display_wayland->cursor_theme)
{
if (display_wayland->scaled_cursor_themes[i])
{
wl_cursor_theme_destroy (display_wayland->scaled_cursor_themes[i]);
display_wayland->scaled_cursor_themes[i] = NULL;
}
wl_cursor_theme_destroy (display_wayland->cursor_theme);
display_wayland->cursor_theme = NULL;
}
display_wayland->scaled_cursor_themes[0] = theme;
display_wayland->cursor_theme = theme;
if (display_wayland->cursor_theme_name != NULL)
g_free (display_wayland->cursor_theme_name);
display_wayland->cursor_theme_name = g_strdup (name);
@@ -1141,31 +1178,11 @@ gdk_wayland_display_set_cursor_theme (GdkDisplay *display,
}
struct wl_cursor_theme *
_gdk_wayland_display_get_scaled_cursor_theme (GdkWaylandDisplay *display_wayland,
guint scale)
_gdk_wayland_display_get_cursor_theme (GdkWaylandDisplay *display_wayland)
{
struct wl_cursor_theme *theme;
g_assert (display_wayland->cursor_theme_name);
g_assert (scale <= GDK_WAYLAND_MAX_THEME_SCALE);
g_assert (scale >= 1);
theme = display_wayland->scaled_cursor_themes[scale - 1];
if (!theme)
{
theme = wl_cursor_theme_load (display_wayland->cursor_theme_name,
display_wayland->cursor_theme_size * scale,
display_wayland->shm);
if (theme == NULL)
{
g_warning ("Failed to load cursor theme %s with scale %u",
display_wayland->cursor_theme_name, scale);
return NULL;
}
display_wayland->scaled_cursor_themes[scale - 1] = theme;
}
return theme;
return display_wayland->cursor_theme;
}
static void
+11 -5
View File
@@ -25,7 +25,6 @@
#include <config.h>
#include <stdint.h>
#include <wayland-client.h>
#include <wayland-cursor.h>
#include <wayland-egl.h>
#include <gdk/wayland/tablet-unstable-v2-client-protocol.h>
#include <gdk/wayland/gtk-shell-client-protocol.h>
@@ -36,6 +35,10 @@
#include <gdk/wayland/server-decoration-client-protocol.h>
#include <gdk/wayland/xdg-output-unstable-v1-client-protocol.h>
#include <gdk/wayland/primary-selection-unstable-v1-client-protocol.h>
#ifdef HAVE_XDG_ACTIVATION
#include <gdk/wayland/xdg-activation-v1-client-protocol.h>
#endif
#include <gdk/wayland/cursor/wayland-cursor.h>
#include <glib.h>
#include <gdk/gdkkeys.h>
@@ -49,9 +52,6 @@
G_BEGIN_DECLS
#define GDK_WAYLAND_MAX_THEME_SCALE 4
#define GDK_WAYLAND_THEME_SCALES_COUNT GDK_WAYLAND_MAX_THEME_SCALE
#define GDK_ZWP_POINTER_GESTURES_V1_VERSION 1
typedef struct _GdkWaylandSelection GdkWaylandSelection;
@@ -98,6 +98,9 @@ struct _GdkWaylandDisplay
struct org_kde_kwin_server_decoration_manager *server_decoration_manager;
struct zxdg_output_manager_v1 *xdg_output_manager;
uint32_t xdg_output_version;
#ifdef HAVE_XDG_ACTIVATION
struct xdg_activation_v1 *xdg_activation;
#endif
GList *async_roundtrips;
@@ -113,7 +116,7 @@ struct _GdkWaylandDisplay
GList *current_popups;
struct wl_cursor_theme *scaled_cursor_themes[GDK_WAYLAND_THEME_SCALES_COUNT];
struct wl_cursor_theme *cursor_theme;
gchar *cursor_theme_name;
int cursor_theme_size;
GHashTable *cursor_cache;
@@ -125,6 +128,9 @@ struct _GdkWaylandDisplay
int data_device_manager_version;
int gtk_shell_version;
int xdg_output_manager_version;
#ifdef HAVE_XDG_ACTIVATION
int xdg_activation_version;
#endif
uint32_t server_decoration_mode;
+8 -4
View File
@@ -309,11 +309,13 @@ gdk_wayland_get_display (GdkWaylandDisplay *display_wayland)
}
gboolean
gdk_wayland_display_init_gl (GdkDisplay *display)
gdk_wayland_display_init_gl (GdkDisplay *display,
GdkGLContext *share)
{
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
EGLint major, minor;
EGLDisplay dpy;
gboolean use_es;
if (display_wayland->have_egl)
return TRUE;
@@ -326,8 +328,10 @@ gdk_wayland_display_init_gl (GdkDisplay *display)
if (!eglInitialize (dpy, &major, &minor))
return FALSE;
if (!eglBindAPI (EGL_OPENGL_API))
return FALSE;
use_es = (_gdk_gl_flags & GDK_GL_GLES) != 0 ||
(share != NULL && gdk_gl_context_get_use_es (share));
if (!eglBindAPI (use_es ? EGL_OPENGL_ES_API : EGL_OPENGL_API))
return FALSE;
display_wayland->egl_display = dpy;
display_wayland->egl_major_version = major;
@@ -461,7 +465,7 @@ gdk_wayland_window_create_gl_context (GdkWindow *window,
GdkWaylandGLContext *context;
EGLConfig config;
if (!gdk_wayland_display_init_gl (display))
if (!gdk_wayland_display_init_gl (display, share))
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_NOT_AVAILABLE,
+2 -1
View File
@@ -47,7 +47,8 @@ struct _GdkWaylandGLContextClass
GdkGLContextClass parent_class;
};
gboolean gdk_wayland_display_init_gl (GdkDisplay *display);
gboolean gdk_wayland_display_init_gl (GdkDisplay *display,
GdkGLContext *share);
GdkGLContext * gdk_wayland_window_create_gl_context (GdkWindow *window,
gboolean attach,
GdkGLContext *share,
+2 -2
View File
@@ -60,8 +60,7 @@ void _gdk_wayland_display_init_cursors (GdkWaylandDisplay *display);
void _gdk_wayland_display_finalize_cursors (GdkWaylandDisplay *display);
void _gdk_wayland_display_update_cursors (GdkWaylandDisplay *display);
struct wl_cursor_theme * _gdk_wayland_display_get_scaled_cursor_theme (GdkWaylandDisplay *display_wayland,
guint scale);
struct wl_cursor_theme * _gdk_wayland_display_get_cursor_theme (GdkWaylandDisplay *display_wayland);
GdkCursor *_gdk_wayland_display_get_cursor_for_type (GdkDisplay *display,
GdkCursorType cursor_type);
@@ -187,6 +186,7 @@ uint32_t _gdk_wayland_device_get_implicit_grab_serial(GdkWaylandDevice *device,
const GdkEvent *event);
uint32_t _gdk_wayland_seat_get_last_implicit_grab_serial (GdkSeat *seat,
GdkEventSequence **seqence);
GdkWindow * gdk_wayland_device_get_focus (GdkDevice *device);
struct wl_data_device * gdk_wayland_device_get_data_device (GdkDevice *gdk_device);
void gdk_wayland_seat_set_selection (GdkSeat *seat,
struct wl_data_source *source);
+71 -7
View File
@@ -542,19 +542,20 @@ static TranslationEntry translations[] = {
{ FALSE, "org.gnome.desktop.privacy", "remember-recent-files", "gtk-recent-files-enabled", G_TYPE_BOOLEAN, { .b = TRUE } },
{ FALSE, WM_SETTINGS_SCHEMA, "button-layout", "gtk-decoration-layout", G_TYPE_STRING, { .s = "menu:close" } },
{ FALSE, CLASSIC_WM_SETTINGS_SCHEMA, "button-layout", "gtk-decoration-layout", G_TYPE_STRING, { .s = "menu:close" } },
{ FALSE, "org.gnome.desktop.interface", "font-antialiasing", "gtk-xft-antialias", G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.desktop.interface", "font-hinting", "gtk-xft-hinting", G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.desktop.interface", "font-hinting", "gtk-xft-hintstyle", G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.desktop.interface", "font-antialiasing", "gtk-xft-antialias", G_TYPE_NONE, { .i = 1 } },
{ FALSE, "org.gnome.desktop.interface", "font-hinting", "gtk-xft-hinting", G_TYPE_NONE, { .i = 1 } },
{ FALSE, "org.gnome.desktop.interface", "font-hinting", "gtk-xft-hintstyle", G_TYPE_NONE, { .i = 1 } },
{ FALSE, "org.gnome.desktop.interface", "font-rgba-order", "gtk-xft-rgba", G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.settings-daemon.plugins.xsettings", "antialiasing", "gtk-xft-antialias", G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.settings-daemon.plugins.xsettings", "hinting", "gtk-xft-hinting", G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.settings-daemon.plugins.xsettings", "hinting", "gtk-xft-hintstyle", G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.settings-daemon.plugins.xsettings", "antialiasing", "gtk-xft-antialias", G_TYPE_NONE, { .i = 1 } },
{ FALSE, "org.gnome.settings-daemon.plugins.xsettings", "hinting", "gtk-xft-hinting", G_TYPE_NONE, { .i = 1 } },
{ FALSE, "org.gnome.settings-daemon.plugins.xsettings", "hinting", "gtk-xft-hintstyle", G_TYPE_NONE, { .i = 1 } },
{ FALSE, "org.gnome.settings-daemon.plugins.xsettings", "rgba-order", "gtk-xft-rgba", G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.desktop.interface", "text-scaling-factor", "gtk-xft-dpi" , G_TYPE_NONE, { .i = 0 } },
{ FALSE, "org.gnome.desktop.wm.preferences", "action-double-click-titlebar", "gtk-titlebar-double-click", G_TYPE_STRING, { .s = "toggle-maximize" } },
{ FALSE, "org.gnome.desktop.wm.preferences", "action-middle-click-titlebar", "gtk-titlebar-middle-click", G_TYPE_STRING, { .s = "none" } },
{ FALSE, "org.gnome.desktop.wm.preferences", "action-right-click-titlebar", "gtk-titlebar-right-click", G_TYPE_STRING, { .s = "menu" } },
{ FALSE, "org.gnome.desktop.a11y", "always-show-text-caret", "gtk-keynav-use-caret", G_TYPE_BOOLEAN, { .b = FALSE } },
{ FALSE, "org.gnome.desktop.a11y.interface", "high-contrast", "high-contrast", G_TYPE_NONE, { .b = FALSE } },
{ FALSE, "org.gnome.fontconfig", "serial", "gtk-fontconfig-timestamp", G_TYPE_INT, { .i = 0 } }
};
@@ -602,6 +603,13 @@ find_translation_entry_by_setting (const gchar *setting)
return NULL;
}
static void
high_contrast_changed (GdkScreen *screen)
{
notify_setting (screen, "gtk-theme-name");
notify_setting (screen, "gtk-icon-theme-name");
}
static void
settings_changed (GSettings *settings,
const gchar *key,
@@ -615,6 +623,8 @@ settings_changed (GSettings *settings,
{
if (entry->type != G_TYPE_NONE)
notify_setting (screen, entry->setting);
else if (strcmp (key, "high-contrast") == 0)
high_contrast_changed (screen);
else
update_xft_settings (screen);
}
@@ -745,6 +755,14 @@ init_settings (GdkScreen *screen)
goto fallback;
}
if (g_variant_n_children (ret) == 0)
{
g_debug ("Received no portal settings");
g_clear_pointer (&ret, g_variant_unref);
goto fallback;
}
g_variant_get (ret, "(a{sa{sv}})", &iter);
while (g_variant_iter_loop (iter, "{s@a{sv}}", &schema, &val))
@@ -989,6 +1007,36 @@ set_decoration_layout_from_entry (GdkScreen *screen,
}
}
static void
set_theme_from_entry (GdkScreen *screen,
TranslationEntry *entry,
GValue *value)
{
GdkWaylandScreen *screen_wayland = GDK_WAYLAND_SCREEN (screen);
GSettings *settings = NULL;
GSettingsSchema *schema = NULL;
gboolean hc = FALSE;
if (screen_wayland->settings_portal == NULL)
{
settings = (GSettings *)g_hash_table_lookup (screen_wayland->settings,
"org.gnome.desktop.a11y.interface");
}
if (settings)
g_object_get (settings, "settings-schema", &schema, NULL);
if (schema && g_settings_schema_has_key (schema, "high-contrast"))
hc = g_settings_get_boolean (settings, "high-contrast");
g_clear_pointer (&schema, g_settings_schema_unref);
if (hc)
g_value_set_static_string (value, "HighContrast");
else
set_value_from_entry (screen, entry, value);
}
static gboolean
set_capability_setting (GdkScreen *screen,
GValue *value,
@@ -1020,6 +1068,8 @@ gdk_wayland_screen_get_setting (GdkScreen *screen,
{
if (strcmp (name, "gtk-decoration-layout") == 0)
set_decoration_layout_from_entry (screen, entry, value);
else if (strcmp (name, "gtk-theme-name") == 0)
set_theme_from_entry (screen, entry, value);
else
set_value_from_entry (screen, entry, value);
return TRUE;
@@ -1630,7 +1680,21 @@ output_handle_geometry (void *data,
monitor->x = x;
monitor->y = y;
gdk_monitor_set_physical_size (GDK_MONITOR (monitor), physical_width, physical_height);
switch (transform)
{
case WL_OUTPUT_TRANSFORM_90:
case WL_OUTPUT_TRANSFORM_270:
case WL_OUTPUT_TRANSFORM_FLIPPED_90:
case WL_OUTPUT_TRANSFORM_FLIPPED_270:
gdk_monitor_set_physical_size (GDK_MONITOR (monitor),
physical_height, physical_width);
break;
default:
gdk_monitor_set_physical_size (GDK_MONITOR (monitor),
physical_width, physical_height);
}
gdk_monitor_set_subpixel_layout (GDK_MONITOR (monitor), subpixel);
gdk_monitor_set_manufacturer (GDK_MONITOR (monitor), make);
gdk_monitor_set_model (GDK_MONITOR (monitor), model);
+51 -20
View File
@@ -34,6 +34,9 @@
#include <string.h>
#define STRING_MIMETYPE "text/plain"
#define UTF8_STRING_MIMETYPE "text/plain;charset=utf-8"
typedef struct _SelectionBuffer SelectionBuffer;
typedef struct _SelectionData SelectionData;
typedef struct _StoredSelection StoredSelection;
@@ -100,7 +103,7 @@ struct _GdkWaylandSelection
/* Source-side data */
GPtrArray *stored_selections; /* Array of StoredSelection */
GdkAtom current_request_selection;
StoredSelection *current_request_selection;
GArray *source_targets;
GdkAtom requested_target;
@@ -858,7 +861,12 @@ gdk_wayland_selection_reset_selection (GdkWaylandSelection *wayland_selection,
stored_selection = g_ptr_array_index (wayland_selection->stored_selections, i);
if (stored_selection->selection_atom == selection)
g_ptr_array_remove_index_fast (wayland_selection->stored_selections, i);
{
if (wayland_selection->current_request_selection == stored_selection)
wayland_selection->current_request_selection = NULL;
g_ptr_array_remove_index_fast (wayland_selection->stored_selections, i);
}
else
i++;
}
@@ -877,21 +885,10 @@ gdk_wayland_selection_store (GdkWindow *window,
if (type == gdk_atom_intern_static_string ("NULL"))
return;
if (selection->current_request_selection == GDK_NONE)
if (!selection->current_request_selection)
return;
stored_selection =
gdk_wayland_selection_find_stored_selection (selection, window,
selection->current_request_selection,
type);
if (!stored_selection)
{
stored_selection = stored_selection_new (selection, window,
selection->current_request_selection,
type);
g_ptr_array_add (selection->stored_selections, stored_selection);
}
stored_selection = selection->current_request_selection;
if ((mode == GDK_PROP_MODE_PREPEND ||
mode == GDK_PROP_MODE_REPLACE) &&
@@ -915,7 +912,7 @@ gdk_wayland_selection_store (GdkWindow *window,
}
/* Handle the next GDK_SELECTION_REQUEST / store, if any */
selection->current_request_selection = GDK_NONE;
selection->current_request_selection = NULL;
gdk_wayland_selection_handle_next_request (selection);
}
@@ -979,7 +976,7 @@ gdk_wayland_selection_handle_next_request (GdkWaylandSelection *wayland_selectio
gdk_wayland_selection_emit_request (stored_selection->source,
stored_selection->selection_atom,
stored_selection->type);
wayland_selection->current_request_selection = stored_selection->selection_atom;
wayland_selection->current_request_selection = stored_selection;
break;
}
}
@@ -1023,7 +1020,7 @@ gdk_wayland_selection_request_target (GdkWaylandSelection *wayland_selection,
write_data = async_write_data_new (stored_selection, fd);
if (wayland_selection->current_request_selection == GDK_NONE)
if (!wayland_selection->current_request_selection)
gdk_wayland_selection_handle_next_request (wayland_selection);
return TRUE;
@@ -1435,13 +1432,29 @@ _gdk_wayland_display_set_selection_owner (GdkDisplay *display,
}
void
_gdk_wayland_display_send_selection_notify (GdkDisplay *dispay,
_gdk_wayland_display_send_selection_notify (GdkDisplay *display,
GdkWindow *requestor,
GdkAtom selection,
GdkAtom target,
GdkAtom property,
guint32 time)
{
GdkWaylandSelection *wayland_selection;
if (property != GDK_NONE)
return;
wayland_selection = gdk_wayland_display_get_selection (display);
if (!wayland_selection->current_request_selection)
return;
g_ptr_array_remove_fast (wayland_selection->stored_selections,
wayland_selection->current_request_selection);
/* Handle the next GDK_SELECTION_REQUEST / store, if any */
wayland_selection->current_request_selection = NULL;
gdk_wayland_selection_handle_next_request (wayland_selection);
}
gint
@@ -1773,7 +1786,25 @@ gdk_wayland_selection_add_targets (GdkWindow *window,
{
gchar *mimetype = gdk_atom_name (targets[i]);
wl_data_source_offer (data_source, mimetype);
if (selection == atoms[ATOM_PRIMARY])
{
if (g_strcmp0 (mimetype, "STRING") == 0)
zwp_primary_selection_source_v1_offer (data_source, STRING_MIMETYPE);
else if (g_strcmp0 (mimetype, "UTF8_STRING") == 0)
zwp_primary_selection_source_v1_offer (data_source, UTF8_STRING_MIMETYPE);
zwp_primary_selection_source_v1_offer (data_source, mimetype);
}
else
{
if (g_strcmp0 (mimetype, "STRING") == 0)
wl_data_source_offer (data_source, STRING_MIMETYPE);
else if (g_strcmp0 (mimetype, "UTF8_STRING") == 0)
wl_data_source_offer (data_source, UTF8_STRING_MIMETYPE);
wl_data_source_offer (data_source, mimetype);
}
g_free (mimetype);
}
+173 -18
View File
@@ -753,12 +753,23 @@ window_update_scale (GdkWindow *window)
return;
}
scale = 1;
for (l = impl->display_server.outputs; l != NULL; l = l->next)
if (!impl->display_server.outputs)
{
guint32 output_scale =
_gdk_wayland_screen_get_output_scale (display_wayland->screen, l->data);
scale = MAX (scale, output_scale);
scale = impl->scale;
}
else
{
scale = 1;
for (l = impl->display_server.outputs; l != NULL; l = l->next)
{
struct wl_output *output = l->data;
uint32_t output_scale;
output_scale =
_gdk_wayland_screen_get_output_scale (display_wayland->screen,
output);
scale = MAX (scale, output_scale);
}
}
/* Notify app that scale changed */
@@ -1199,6 +1210,7 @@ gdk_wayland_window_maybe_configure (GdkWindow *window,
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
gboolean is_xdg_popup;
gboolean is_visible;
gboolean size_changed;
impl->unconfigured_width = calculate_width_without_margin (window, width);
impl->unconfigured_height = calculate_height_without_margin (window, height);
@@ -1206,9 +1218,8 @@ gdk_wayland_window_maybe_configure (GdkWindow *window,
if (should_inhibit_resize (window))
return;
if (window->width == width &&
window->height == height &&
impl->scale == scale)
size_changed = (window->width != width || window->height != height);
if (!size_changed && impl->scale == scale)
return;
/* For xdg_popup using an xdg_positioner, there is a race condition if
@@ -1222,6 +1233,7 @@ gdk_wayland_window_maybe_configure (GdkWindow *window,
if (is_xdg_popup &&
is_visible &&
size_changed &&
!impl->initial_configure_received &&
!impl->configuring_popup)
gdk_window_hide (window);
@@ -1230,6 +1242,7 @@ gdk_wayland_window_maybe_configure (GdkWindow *window,
if (is_xdg_popup &&
is_visible &&
size_changed &&
!impl->initial_configure_received &&
!impl->configuring_popup)
gdk_window_show (window);
@@ -1520,6 +1533,14 @@ surface_enter (void *data,
{
GdkWindow *window = GDK_WINDOW (data);
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkWaylandDisplay *display_wayland =
GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
gboolean output_is_unmanaged;
output_is_unmanaged =
_gdk_wayland_screen_get_output_scale (display_wayland->screen, output) == 0;
if (output_is_unmanaged)
return;
GDK_NOTE (EVENTS,
g_message ("surface enter, window %p output %p", window, output));
@@ -1985,6 +2006,13 @@ create_zxdg_toplevel_v6_resources (GdkWindow *window)
window);
}
/**
* gdk_wayland_window_set_application_id:
* @window:
* @application_id:
*
* Since: 3.24.22
*/
void
gdk_wayland_window_set_application_id (GdkWindow *window, const char* application_id)
{
@@ -3330,6 +3358,12 @@ gdk_wayland_window_hide_surface (GdkWindow *window)
impl->display_server.xdg_popup = NULL;
display_wayland->current_popups =
g_list_remove (display_wayland->current_popups, window);
if (impl->position_method == POSITION_METHOD_MOVE_TO_RECT)
{
window->x = 0;
window->y = 0;
}
}
if (impl->display_server.xdg_surface)
{
@@ -3352,6 +3386,12 @@ gdk_wayland_window_hide_surface (GdkWindow *window)
impl->display_server.zxdg_popup_v6 = NULL;
display_wayland->current_popups =
g_list_remove (display_wayland->current_popups, window);
if (impl->position_method == POSITION_METHOD_MOVE_TO_RECT)
{
window->x = 0;
window->y = 0;
}
}
if (impl->display_server.zxdg_surface_v6)
{
@@ -3771,29 +3811,84 @@ gdk_wayland_window_get_input_shape (GdkWindow *window)
return NULL;
}
#ifdef HAVE_XDG_ACTIVATION
static void
token_done (gpointer data,
struct xdg_activation_token_v1 *provider,
const char *token)
{
char **token_out = data;
*token_out = g_strdup (token);
}
static const struct xdg_activation_token_v1_listener token_listener = {
token_done,
};
#endif
static void
gdk_wayland_window_focus (GdkWindow *window,
guint32 timestamp)
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
GdkDisplay *display = gdk_window_get_display (window);
GdkWaylandDisplay *display_wayland = GDK_WAYLAND_DISPLAY (display);
gchar *startup_id = NULL;
if (!impl->display_server.gtk_surface)
return;
startup_id = g_steal_pointer (&display_wayland->startup_notification_id);
if (timestamp == GDK_CURRENT_TIME)
#ifdef HAVE_XDG_ACTIVATION
if (display_wayland->xdg_activation)
{
GdkWaylandDisplay *display_wayland =
GDK_WAYLAND_DISPLAY (gdk_window_get_display (window));
GdkSeat *seat = gdk_display_get_default_seat (display);
if (display_wayland->gtk_shell_version >= 3)
/* If the focus request does not have a startup ID associated, get a
* new token to activate the window.
*/
if (!startup_id)
{
gtk_surface1_request_focus (impl->display_server.gtk_surface,
display_wayland->startup_notification_id);
g_clear_pointer (&display_wayland->startup_notification_id, g_free);
struct xdg_activation_token_v1 *token;
struct wl_event_queue *event_queue;
event_queue = wl_display_create_queue (display_wayland->wl_display);
token = xdg_activation_v1_get_activation_token (display_wayland->xdg_activation);
wl_proxy_set_queue ((struct wl_proxy *) token, event_queue);
xdg_activation_token_v1_add_listener (token,
&token_listener,
&startup_id);
xdg_activation_token_v1_set_serial (token,
_gdk_wayland_seat_get_last_implicit_grab_serial (seat, NULL),
gdk_wayland_seat_get_wl_seat (seat));
xdg_activation_token_v1_set_surface (token,
gdk_wayland_window_get_wl_surface (window));
xdg_activation_token_v1_commit (token);
while (startup_id == NULL)
wl_display_dispatch_queue (display_wayland->wl_display, event_queue);
xdg_activation_token_v1_destroy (token);
wl_event_queue_destroy (event_queue);
}
xdg_activation_v1_activate (display_wayland->xdg_activation,
startup_id,
impl->display_server.wl_surface);
}
else
gtk_surface1_present (impl->display_server.gtk_surface, timestamp);
#endif
if (impl->display_server.gtk_surface)
{
if (timestamp != GDK_CURRENT_TIME)
gtk_surface1_present (impl->display_server.gtk_surface, timestamp);
else if (startup_id && display_wayland->gtk_shell_version >= 3)
gtk_surface1_request_focus (impl->display_server.gtk_surface,
startup_id);
}
g_free (startup_id);
}
static void
@@ -4755,6 +4850,65 @@ gdk_wayland_window_show_window_menu (GdkWindow *window,
return TRUE;
}
static gboolean
translate_gesture (GdkTitlebarGesture gesture,
enum gtk_surface1_gesture *out_gesture)
{
switch (gesture)
{
case GDK_TITLEBAR_GESTURE_DOUBLE_CLICK:
*out_gesture = GTK_SURFACE1_GESTURE_DOUBLE_CLICK;
break;
case GDK_TITLEBAR_GESTURE_RIGHT_CLICK:
*out_gesture = GTK_SURFACE1_GESTURE_RIGHT_CLICK;
break;
case GDK_TITLEBAR_GESTURE_MIDDLE_CLICK:
*out_gesture = GTK_SURFACE1_GESTURE_MIDDLE_CLICK;
break;
default:
g_warning ("Not handling unknown titlebar gesture %u", gesture);
return FALSE;
}
return TRUE;
}
static gboolean
gdk_wayland_window_titlebar_gesture (GdkWindow *window,
GdkTitlebarGesture gesture)
{
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
struct gtk_surface1 *gtk_surface = impl->display_server.gtk_surface;
enum gtk_surface1_gesture gtk_gesture;
GdkSeat *seat;
struct wl_seat *wl_seat;
uint32_t serial;
if (!gtk_surface)
return FALSE;
if (gtk_surface1_get_version (gtk_surface) < GTK_SURFACE1_TITLEBAR_GESTURE_SINCE_VERSION)
return FALSE;
if (!translate_gesture (gesture, &gtk_gesture))
return FALSE;
seat = gdk_display_get_default_seat (gdk_window_get_display (window));
wl_seat = gdk_wayland_seat_get_wl_seat (seat);
serial = _gdk_wayland_seat_get_last_implicit_grab_serial (seat, NULL);
gtk_surface1_titlebar_gesture (impl->display_server.gtk_surface,
serial,
wl_seat,
gtk_gesture);
return TRUE;
}
static void
_gdk_window_impl_wayland_class_init (GdkWindowImplWaylandClass *klass)
{
@@ -4846,6 +5000,7 @@ _gdk_window_impl_wayland_class_init (GdkWindowImplWaylandClass *klass)
impl_class->show_window_menu = gdk_wayland_window_show_window_menu;
impl_class->create_gl_context = gdk_wayland_window_create_gl_context;
impl_class->invalidate_for_new_frame = gdk_wayland_window_invalidate_for_new_frame;
impl_class->titlebar_gesture = gdk_wayland_window_titlebar_gesture;
signals[COMMITTED] = g_signal_new ("committed",
G_TYPE_FROM_CLASS (object_class),
+12 -2
View File
@@ -1,3 +1,5 @@
subdir('cursor')
gdk_wayland_sources = files(
'gdkapplaunchcontext-wayland.c',
'gdkcursor-wayland.c',
@@ -31,12 +33,12 @@ gdk_wayland_deps = [
xkbdep,
wlclientdep,
wlprotocolsdep,
wlcursordep,
wlegldep,
]
# wayland protocols
proto_dir = dependency('wayland-protocols').get_pkgconfig_variable('pkgdatadir')
wlprotocolsdep = dependency('wayland-protocols')
proto_dir = wlprotocolsdep.get_pkgconfig_variable('pkgdatadir')
assert(proto_dir != '', 'Could not get pkgdatadir from wayland-protocols.pc')
wayland_scanner = find_program('wayland-scanner')
@@ -58,6 +60,9 @@ proto_sources = [
['xdg-output', 'unstable', 'v1', ],
['primary-selection', 'unstable', 'v1', ],
]
if wlprotocolsdep.version().version_compare('>=1.21')
proto_sources += [['xdg-activation', 'staging', 'v1', ]]
endif
gdk_wayland_gen_headers = []
@@ -68,6 +73,10 @@ foreach p: proto_sources
if proto_stability == 'stable'
output_base = proto_name
input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
elif proto_stability == 'staging'
proto_version = p.get(2)
output_base = '@0@-@1@'.format(proto_name, proto_version)
input = join_paths(proto_dir, '@0@/@1@/@2@.xml'.format(proto_stability, proto_name, output_base))
elif proto_stability == 'private'
output_base = proto_name
input = 'protocol/@0@.xml'.format(proto_name)
@@ -104,4 +113,5 @@ libgdk_wayland = static_library('gdk-wayland',
'-DG_LOG_DOMAIN="Gdk"',
] + common_cflags,
link_args: common_ldflags,
link_with: [libwayland_cursor, ],
dependencies: [ gdk_deps, gdk_wayland_deps, ])
+19 -2
View File
@@ -1,6 +1,6 @@
<protocol name="gtk">
<interface name="gtk_shell1" version="4">
<interface name="gtk_shell1" version="5">
<description summary="gtk specific extensions">
gtk_shell is a protocol extension providing additional features for
clients implementing it.
@@ -35,7 +35,7 @@
</request>
</interface>
<interface name="gtk_surface1" version="4">
<interface name="gtk_surface1" version="5">
<request name="set_dbus_properties">
<arg name="application_id" type="string" allow-null="true"/>
<arg name="app_menu_path" type="string" allow-null="true"/>
@@ -85,6 +85,23 @@
<!-- Version 4 additions -->
<request name="release" type="destructor" since="4"/>
<!-- Version 5 additions -->
<enum name="gesture" since="5">
<entry name="double_click" value="1"/>
<entry name="right_click" value="2"/>
<entry name="middle_click" value="3"/>
</enum>
<enum name="error" since="5">
<entry name="invalid_gesture" value="0"/>
</enum>
<request name="titlebar_gesture" since="5">
<arg name="serial" type="uint"/>
<arg name="seat" type="object" interface="wl_seat"/>
<arg name="gesture" type="uint" enum="gesture"/>
</request>
</interface>
</protocol>
+10 -70
View File
@@ -1,5 +1,6 @@
## Process this file with automake to produce Makefile.in
include $(top_srcdir)/Makefile.decl
include gdk-win32-sources.inc
libgdkincludedir = $(includedir)/gtk-3.0/gdk
libgdkwin32includedir = $(includedir)/gtk-3.0/gdk/win32
@@ -21,7 +22,10 @@ if WIN32_GLES
AM_CPPFLAGS += "-DGDK_WIN32_ENABLE_EGL=1"
endif #WIN32_GLES
LDADDS = $(GDK_DEP_LIBS)
libgdk_win32_DEP_LIBS = \
-lhid
LDADDS = $(libgdk_win32_DEP_LIBS) $(GDK_DEP_LIBS)
noinst_LTLIBRARIES = libgdk-win32.la
@@ -32,85 +36,21 @@ EXTRA_DIST += \
makefile.msc \
meson.build
libgdk_win32_la_SOURCES = \
gdkcursor-win32.c \
gdkdevicemanager-win32.c \
gdkdevicemanager-win32.h \
gdkdevice-virtual.c \
gdkdevice-virtual.h \
gdkdevice-win32.c \
gdkdevice-win32.h \
gdkdevice-wintab.c \
gdkdevice-wintab.h \
gdkdisplay-win32.c \
gdkdisplay-win32.h \
gdkdisplaymanager-win32.c \
gdkdnd-win32.c \
gdkevents-win32.c \
gdkgeometry-win32.c \
gdkglcontext-win32.c \
gdkglcontext-win32.h \
gdkglobals-win32.c \
gdkkeys-win32.c \
gdkmain-win32.c \
gdkmonitor-win32.c \
gdkmonitor-win32.h \
gdkprivate-win32.h \
gdkproperty-win32.c \
gdkscreen-win32.c \
gdkselection-win32.c \
gdkselection-win32.h \
gdktestutils-win32.c \
gdkwin32cursor.h \
gdkwin32display.h \
gdkwin32displaymanager.h \
gdkwin32dnd.h \
gdkwin32dnd-private.h \
gdkwin32glcontext.h \
gdkwin32langnotification.c \
gdkwin32langnotification.h \
gdkwin32.h \
gdkwin32id.c \
gdkwin32keys.h \
gdkwin32monitor.h \
gdkwin32screen.h \
gdkwin32window.h \
gdkwindow-win32.c \
gdkwindow-win32.h \
pktdef.h \
wintab.h \
xcursors.h
libgdk_win32_la_LIBADD = \
$(LDADDS) \
$(NULL)
libgdkinclude_HEADERS = \
gdkwin32.h
libgdkwin32include_HEADERS = \
gdkwin32cursor.h \
gdkwin32display.h \
gdkwin32displaymanager.h\
gdkwin32dnd.h \
gdkwin32glcontext.h \
gdkwin32keys.h \
gdkwin32misc.h \
gdkwin32monitor.h \
gdkwin32screen.h \
gdkwin32window.h
libgdkinclude_HEADERS = $(GDK_PUBLIC_H_SRCS_WIN32)
# ------------------- MSVC Build Items ----------------
MSVCPROJS = gdk3-win32
gdk3_win32_FILES = $(libgdk_win32_la_SOURCES)
gdk3_win32_EXCLUDES = dummy
gdk3_win32_HEADERS_DIR = $(libgdkwin32includedir)
gdk3_win32_HEADERS_INST = $(libgdkwin32include_HEADERS)
gdk3_win32_HEADERS_EXCLUDES = dummy
include $(top_srcdir)/win32/Makefile.msvcproj
dist-hook: \
$(top_builddir)/win32/vs9/gdk3-win32.vcproj \
$(top_builddir)/win32/vs9/gdk3-win32.headers
$(top_builddir)/win32/vs9/gdk3-win32.vcproj
-include $(top_srcdir)/git.mk
+72
View File
@@ -0,0 +1,72 @@
# Public header list for GdkWin32
GDK_PUBLIC_H_SRCS_WIN32 = \
gdkwin32.h
libgdkwin32include_HEADERS = \
gdkwin32cursor.h \
gdkwin32display.h \
gdkwin32displaymanager.h\
gdkwin32dnd.h \
gdkwin32glcontext.h \
gdkwin32keys.h \
gdkwin32misc.h \
gdkwin32monitor.h \
gdkwin32screen.h \
gdkwin32window.h
# Sources list for GdkWin32
libgdk_win32_la_SOURCES = \
gdkcursor-win32.c \
gdkdevicemanager-win32.c \
gdkdevicemanager-win32.h \
gdkdevice-virtual.c \
gdkdevice-virtual.h \
gdkdevice-win32.c \
gdkdevice-win32.h \
gdkdevice-winpointer.c \
gdkdevice-winpointer.h \
gdkdevice-wintab.c \
gdkdevice-wintab.h \
gdkdisplay-win32.c \
gdkdisplay-win32.h \
gdkdisplaymanager-win32.c \
gdkdnd-win32.c \
gdkevents-win32.c \
gdkgeometry-win32.c \
gdkglcontext-win32.c \
gdkglcontext-win32.h \
gdkglobals-win32.c \
gdkkeys-win32.c \
gdkkeys-win32.h \
gdkkeys-win32-impl.c \
gdkkeys-win32-impl-wow64.c \
gdkmain-win32.c \
gdkmonitor-win32.c \
gdkmonitor-win32.h \
gdkprivate-win32.h \
gdkproperty-win32.c \
gdkscreen-win32.c \
gdkselection-win32.c \
gdkselection-win32.h \
gdktestutils-win32.c \
gdkwin32cursor.h \
gdkwin32display.h \
gdkwin32displaymanager.h \
gdkwin32dnd.h \
gdkwin32dnd-private.h \
gdkwin32glcontext.h \
gdkwin32langnotification.c \
gdkwin32langnotification.h \
gdkwin32.h \
gdkwin32id.c \
gdkwin32keys.h \
gdkwin32monitor.h \
gdkwin32screen.h \
gdkwin32window.h \
gdkwindow-win32.c \
gdkwindow-win32.h \
pktdef.h \
winpointer.h \
wintab.h \
xcursors.h

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