Compare commits

..

606 Commits

Author SHA1 Message Date
Matthias Clasen
e9ce1959b4 fixup: use cache dir 2021-06-03 10:24:47 -04:00
Matthias Clasen
a7edd0992e exampleapp9: Add state saving
This tests the GtkApplication state saving support.
2021-06-03 10:07:43 -04:00
Matthias Clasen
9f35250330 application: Add state saving
Add the necessary plumbing to save and restore application
windows and their state.
2021-06-03 10:07:43 -04:00
Matthias Clasen
7e8dfd5bda Add a state-saving test 2021-06-03 10:07:43 -04:00
Matthias Clasen
aa0df60606 window: Add default state saving
This is somewhat temporary, since need compositor
support to do this properly.
2021-06-03 10:07:43 -04:00
Matthias Clasen
9ee07d3974 togglebutton: Add default state saving 2021-06-03 10:07:43 -04:00
Matthias Clasen
1f7ca109c9 checkbutton: Add default state saving 2021-06-03 10:07:43 -04:00
Matthias Clasen
bc2d8bfa33 passwordentry: Add default state saving
In addition to the text, save the visibility.
2021-06-03 10:07:43 -04:00
Matthias Clasen
ee0e82610c stack: Add default state saving
Save the current child.
2021-06-03 10:07:43 -04:00
Matthias Clasen
26c5240dcb paned: Add default state saving
Save the paned position.
2021-06-03 10:07:43 -04:00
Matthias Clasen
ecf6c354b5 switch: Add default state saving 2021-06-03 10:07:43 -04:00
Matthias Clasen
fd499188bd colorchooserwidget: Add default state saving
Save the rgba and the show-editor state. We
currently don't save the contents of the entry.
2021-06-03 10:07:43 -04:00
Matthias Clasen
0c6fb610e6 text: Add default state saving
Add default handlers for ::save/restore-state. Also,
since GtkText is usually used inside other widgets,
set a save-id.
2021-06-03 10:07:43 -04:00
Matthias Clasen
1962f535e8 range: Add default state saving
Add default handlers for ::save/restore-state. All that is
needed to make state saving work now is setting save-id.
2021-06-03 10:07:43 -04:00
Matthias Clasen
8db1b89ace widget: Add state saving plumbing
Add ::save-state and ::restore signals that let widgets
save and restore their state to a GVariant.
2021-06-03 10:07:43 -04:00
Matthias Clasen
a1789ee2b8 Merge branch 'wip/chergert/fix-use-after-free-switcher' into 'master'
stackswitcher: clear timer when widget id disposed

See merge request GNOME/gtk!3621
2021-06-02 20:21:57 +00:00
Matthias Clasen
ffb7df2cc4 Merge branch 'macos-menubar' into 'master'
macos: fix weird menubar rendering.

Closes #3967

See merge request GNOME/gtk!3607
2021-06-02 20:13:16 +00:00
Christian Hergert
c2ca246aee stackswitcher: clear timer when widget id disposed
If the widget is disposed while the cursor has a drag timeout queued, it
can activate after finalization.
2021-06-02 10:20:32 -07:00
Matthias Clasen
80c33ca2dd Merge branch 'wip/otte/for-master' into 'master'
x11: Be more careful with NVIDIA workaround

See merge request GNOME/gtk!3620
2021-06-02 14:57:52 +00:00
Matthias Clasen
7307c6fdfb Merge branch 'entry-docs-typo' into 'master'
entry: Fix a typo in the docs

See merge request GNOME/gtk!3619
2021-06-02 11:15:10 +00:00
Matthias Clasen
039fc2e567 entry: Fix a typo in the docs 2021-06-02 06:47:27 -04:00
Matthias Clasen
1dcf9d5c95 Merge branch 'wip/exalm/treeview-click' into 'master'
treeview: Don't handle clicks on any child widgets

Closes #3996

See merge request GNOME/gtk!3618
2021-06-02 10:33:50 +00:00
Matthias Clasen
742482e0e1 Merge branch 'box-orientation' into 'master'
progressbar: Avoid redundant storage

See merge request GNOME/gtk!3617
2021-06-02 10:16:17 +00:00
Alexander Mikhaylenko
80497debbb treeview: Don't handle clicks on any child widgets
We already skip them on the edited cell widget, but it's also a problem for
header buttons. Overall, there's no real reason to let it propagate here.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3996
2021-06-02 13:49:11 +05:00
Matthias Clasen
bffc6c5b9a spinbutton: Avoid redundant storage
GtkBoxLayout stores the orientation; no need for
GtkSpinButton to duplicate that.
2021-06-01 17:37:07 -04:00
Matthias Clasen
95747b1a40 progressbar: Avoid redundant storage
GtkBoxLayout stores the orientation; no need for
GtkProgressBar to duplicate that.
2021-06-01 17:37:01 -04:00
Matthias Clasen
775dbec2e6 Merge branch 'demo-appdata' into 'master'
demos: Generate appdata

Closes #3993

See merge request GNOME/gtk!3613
2021-06-01 20:17:16 +00:00
Matthias Clasen
25ee6d3f47 demos: Generate appdata
We don't maintain a release history here, but at least
we can put in the right version and date for the current
build.

Fixes: #3993
2021-06-01 15:36:33 -04:00
Matthias Clasen
1f3f2f1dca Merge branch 'wip/chergert/switcher-orientable' into 'master'
stackswitcher: implement GtkOrientable

Closes #3988

See merge request GNOME/gtk!3606
2021-06-01 18:28:23 +00:00
Christian Hergert
c848a51395 stackswitcher: implement GtkOrientable
In GTK 3, GtkStackSwitcher implemented GtkOrientable via the parent GtkBox
type. In GTK 4, that was changed to inherit from GtkWidget and lost this
interface implementation.

This adds that back, along with a note in the documentation that the
interface was added in GTK 4.4.

Fixes #3988
2021-06-01 10:57:27 -07:00
Matthias Clasen
7d3c3cb653 Merge branch 'fix_cast_warning_adding_notebook_page' into 'master'
invalid cast from 'GtkButton' to 'GtkBox'

See merge request GNOME/gtk!3615
2021-06-01 16:18:31 +00:00
Caolán McNamara
9c79b8b877 invalid cast from 'GtkButton' to 'GtkBox'
on adding a page to a GtkNotebook

(soffice): Gtk-CRITICAL **: gtk_box_remove: assertion 'GTK_IS_BOX (box)' failed
2021-06-01 14:56:53 +01:00
Matthias Clasen
c137f4017f Merge branch 'screensaver-async-4' into 'master'
gtkapplication-dbus: Fetch inital screen saver state async

See merge request GNOME/gtk!3599
2021-06-01 11:14:38 +00:00
Matthias Clasen
c92b21b5fd Merge branch 'fix-has-actionable-function' into 'master'
texthistory: fix has_actionable function

See merge request GNOME/gtk!3612
2021-06-01 11:04:56 +00:00
liferooter
44f07f7708 texthistory: fix has_actionable function 2021-06-01 11:04:55 +00:00
Matthias Clasen
b85b4f2cd6 Merge branch 'box-orientation' into 'master'
box: Avoid redundant storage

See merge request GNOME/gtk!3611
2021-05-31 23:05:11 +00:00
Matthias Clasen
d1a7a55d7e box: Avoid redundant storage
GtkBoxLayout stores the orientation; no need for
GtkBox to duplicate that.
2021-05-31 18:38:52 -04:00
Zhi
75868dfee4 macos: fix weird menubar rendering.
As app menu has been deprecated, the function of app menu should be
merged into the menubar, which behaves like the original API of NSApp.

This also brings back the default app menu, which looks like native
macOS apps.

For future refactoring, please note that the menubar must contain at
least one menu before being set to NSApp to avoid weird menubar
rendering.

Fixes #3967.
2021-05-30 21:59:57 +08:00
Fabio Tomat
44bc9a24f8 Update Friulian translation
(cherry picked from commit a80804ccef)
2021-05-27 16:13:50 +00:00
Matthias Clasen
c9785c4cd3 Merge branch 'placeholder-alignment' into 'master'
text: Propagate xalign to the placeholder

Closes #3979

See merge request GNOME/gtk!3604
2021-05-27 11:44:33 +00:00
Matthias Clasen
9f93883dc9 text: Propagate xalign to the placeholder
This is what we were doing in GTK 3, and there's
no reason not to continue.

Fixes: #3979
2021-05-27 06:57:23 -04:00
Matthias Clasen
4362f7e6e2 Merge branch 'bilelmoussaoui/for-gi-docgen-grid' into 'master'
docs: fix gtk grid formatting

See merge request GNOME/gtk!3603
2021-05-27 10:31:24 +00:00
Bilal Elmoussaoui
90a829f25a docs: fix gtk grid formatting 2021-05-27 09:58:42 +00:00
Emmanuele Bassi
d0e29cc901 Merge branch 'bilelmoussaoui/for-gi-docgen' into 'master'
docs: fix broken links

See merge request GNOME/gtk!3601
2021-05-27 00:43:31 +00:00
Bilal Elmoussaoui
8ebdd256a5 docs: fix broken links 2021-05-27 00:18:23 +00:00
Matthias Clasen
4b5f8e6ceb Merge branch 'test-text-buffer-undo' into 'master'
Add a test for text buffer history

See merge request GNOME/gtk!3596
2021-05-26 19:33:58 +00:00
Matthias Clasen
ffbfafb189 textbuffer: Add some docs for undo
Mention what is undoable and what isn't.
2021-05-26 14:36:16 -04:00
Matthias Clasen
994a38c7ad textbuffer: Improve the docs
Add getter/setter annotations.
2021-05-26 14:36:16 -04:00
Matthias Clasen
0268c9d642 Add tests for text buffer history
Check that things can be undone.
2021-05-26 14:36:16 -04:00
Matthias Clasen
f729912913 Merge branch 'wip/chergert/fix-3977' into 'master'
textbuffer: ensure user actions are propagated to history

Closes #3977

See merge request GNOME/gtk!3600
2021-05-26 17:43:34 +00:00
Christian Hergert
6179886b14 textbuffer: ensure user actions are propagated to history
This was an oversight when porting the GtkTextHistory into GTK. We simply
need to bind the GtkTextBuffer action into the text history for grouping
to work correctly.

Fixes #3977
2021-05-26 10:11:33 -07:00
Guido Günther
3aa34c1211 gtkapplication-dbus: Fetch inital screen saver state async
Avoid a sync call that can make the application block for no good
reason.

Fixes 6bfe171058
2021-05-26 18:47:38 +02:00
Matthias Clasen
24f0ae1d39 Merge branch 'move-text-history-tests' into 'master'
Move text history tests

See merge request GNOME/gtk!3597
2021-05-26 12:01:58 +00:00
Matthias Clasen
c0ca3c642a Merge branch 'picture-nullable-setters' into 'master'
picture: Make setters actually take NULL

Closes #3974

See merge request GNOME/gtk!3598
2021-05-26 11:46:23 +00:00
Matthias Clasen
b2b044ce95 Move text history tests
We can test internal apis in our testsuite now,
so move the text history tests there, to have them
run in ci.
2021-05-26 07:34:28 -04:00
Matthias Clasen
8f4b0cd30d picture: Make setters actually take NULL
gtk_picture_set_file was claiming to be nullable,
but choked on NULL.

Fixes: #3974
2021-05-26 07:30:57 -04:00
Matthias Clasen
cbe2aa716d Merge branch 'bilelmoussaoui/for-gi-docgen-link' into 'master'
gtk: drop unwanted char on Switch::state-set docs link

See merge request GNOME/gtk!3594
2021-05-25 23:23:39 +00:00
Bilal Elmoussaoui
23ea33b656 gtk: drop unwanted char on Switch::state-set docs link 2021-05-25 20:29:46 +00:00
Matthias Clasen
ee80a22db4 Merge branch 'wip/exalm/checks' into 'master'
checkbutton: Sync the indicator state with the widget

See merge request GNOME/gtk!3568
2021-05-25 20:29:06 +00:00
Matthias Clasen
d32c343657 Merge branch 'fix.vs2013.link' into 'master'
gtk/meson.build: Fix linking on Visual Studio 2013

See merge request GNOME/gtk!3575
2021-05-25 20:27:54 +00:00
Emmanuele Bassi
90d8c94819 Merge branch 'ebassi/introspection-error' into 'master'
Turn introspection scanner warnings into errors

See merge request GNOME/gtk!3588
2021-05-25 18:51:54 +00:00
Emmanuele Bassi
e13da35d4d Turn introspection scanner warnings into errors
We want to catch errors in our annotations or our API.
2021-05-25 19:16:37 +01:00
Emmanuele Bassi
f50450485c docs: Add missing documentation on Windows
The gtk_print_run_page_setup_dialog() function, and its asynchronous
variant, are declared in the common gtkprintoperation.h header, but
implemented in different source files depending on the platform.
2021-05-25 19:16:37 +01:00
Matthias Clasen
264d08abc4 Merge branch 'ignore-nosymbol-press' into 'master'
imcontext: Ignore NoSymbol key events

Closes #3973

See merge request GNOME/gtk!3591
2021-05-25 17:44:45 +00:00
Matthias Clasen
8c441756df imcontext: Ignore NoSymbol key events
These can happen with some XKB options.

Fixes: #3973
2021-05-25 13:20:12 -04:00
Emmanuele Bassi
cdf2a9ddce Merge branch 'bilelmoussaoui/for-gi-docgen' into 'master'
gdk: fix wrong doc annotation

See merge request GNOME/gtk!3590
2021-05-25 16:23:15 +00:00
Bilal Elmoussaoui
a196a35d1d gdk: fix wrong doc annotation 2021-05-25 16:07:51 +00:00
Yuri Chornoivan
aeda5b2f58 Update Ukrainian translation 2021-05-25 13:19:55 +00:00
Emmanuele Bassi
da1e43c1e6 Merge branch 'ebassi/docs-fixes' into 'master'
Enable fatal warnings for gi-docgen

See merge request GNOME/gtk!3587
2021-05-25 12:57:28 +00:00
Emmanuele Bassi
6d06b0f076 Enable fatal warnings when build the docs
We want to fail the CI pipeline when the documentation generator emits a
warning.
2021-05-25 13:32:32 +01:00
Emmanuele Bassi
7da2e86d4b docs: Fix the PANGO_SCALE link
The fragment for constants is `const`.
2021-05-25 13:31:49 +01:00
Matthias Clasen
1f99723a9f Merge branch 'fix-im-reset' into 'master'
imcontextsimple: Fix a possible problem

See merge request GNOME/gtk!3584
2021-05-25 12:09:38 +00:00
Matthias Clasen
c3c16bd2be Merge branch 'matthiasc/for-master' into 'master'
doc: Syntax fixes

See merge request GNOME/gtk!3583
2021-05-25 11:57:48 +00:00
Matthias Clasen
4c2761302a doc: Syntax fixes
No, we can't have links that say [constructor@...] or
[mehtod@...] or [methoc@...] or [methos@...] or [metohd@...].
And no, not [signals@...] either.
2021-05-25 07:33:55 -04:00
Emmanuele Bassi
3d19b1108a Merge branch 'bilelmoussaoui/gi-docgen-link-fix' into 'master'
gtk: fix gi-docgen link type

See merge request GNOME/gtk!3582
2021-05-25 11:26:08 +00:00
Bilal Elmoussaoui
4728d7b70b gtk: fix gi-docgen link type
constructors are supposed to use "ctor" as a link type, not new
2021-05-25 09:25:32 +00:00
Matthias Clasen
cbd34cd239 Merge branch 'quartz-elide-underscores' into 'master'
Bring back elide_underscores

See merge request GNOME/gtk!3581
2021-05-24 22:55:10 +00:00
Matthias Clasen
d0ca4a1255 imcontextsimple: Fix a possible problem
We were forgetting to handle the compose sequence
case in reset().
2021-05-24 18:53:14 -04:00
Matthias Clasen
16623d4e71 quartz: Elide underscores again
We don't want a literal _File to show up in the
global menubar on OS X, so use the revivied
_gtk_elide_underscores.

Related: #3967
2021-05-24 17:39:05 -04:00
Matthias Clasen
dab7ceaa24 Bring back elide_underscores
This used to live in gtktoolbar.c, which is gone.
We still need it, so put it in gtkprivate.c.
2021-05-24 17:37:05 -04:00
Emmanuele Bassi
b05f3f5614 Merge branch 'gallery-reflow-fix' into 'master'
docs: Convince the widget gallery to reflow

See merge request GNOME/gtk!3579
2021-05-24 15:44:26 +00:00
Matthias Clasen
808e5421a9 docs: Convince the widget gallery to reflow 2021-05-24 10:51:02 -04:00
Matthias Clasen
f1f225c6b3 Merge branch 'gst.gl.win32' into 'master'
media/gstreamer: Support using GL for video for Windows

See merge request GNOME/gtk!3506
2021-05-24 11:37:06 +00:00
Chun-wei Fan
16f307b305 media-gstreamer: Provide fallback mode for playback
Make the "gl-context" property of the GstGLSink readable as well so that
we can query whether the GstGLContext sharing really succeeded.  If it
did, then we proceed to playback our video using the glimagesink as we
did before.  If it didn't, throw out the GtkGstSink we were creating, and
re-create the GtkGstSink without the "gl-context" property, meaning that
we won't be using the glimagesink in this case.
2021-05-24 19:04:37 +08:00
Chun-wei Fan
ccdec5da77 gtkgstsink.c: Support EGL on Windows as well
Add support to look for and use the EGL context in Windows if it was activated
instead of desktop OpenGL.

GstGL may have been built with or without EGL/libANGLE support, so if it were,
check in GstGL whether we have gst_gl_display_new_with_type() to create a
GstGLDisplay that is of the GST_GL_WINDOW_WIN32 type when we are using
Desktop OpenGL (WGL), otherwise we show messages indicating that envvars
need to be set to initialize GstGL properly.

Due to a bug in GstGL, the GstGLContext can only be set up successfully
if one of the following is true:

*  An OpenGL 3.x or later emulator, such as Mesa is used (for WGL)
*  The latest GstGL master is being used, at the time of writing (for
   WGL)
*  GTK, libepoxy and GstGL are all built only with WGL support (for WGL)
*  EGL is being used in GTK at runtime

Special thanks to Matthew Waters for the help during the process.
2021-05-24 19:04:14 +08:00
Chun-wei Fan
52d1c0c271 media/gstreamer: Support using GL for video for Windows
Add support to share the WGL context in GDK with the WGL context in GStreamer,
so that we can also use OpenGL in the gstreamer media backend to playback
videos.  For now OpenGL/ES is not supported for this under Windows.

The process of setting this up in Windows is a little bit more involved, as:

*  The OpenGL support in GstGL requires a GL 4.1 Core context, but we may just
   get the GL version from wglCreateContextAttribsARB() that we pass into the
   attributes, which is 3.2 by default.  So, try to ask for a 4.1 Core context
   first if we are asking for anything less.

*  There is only one GstDisplay available for Windows, so we just use
   gst_gl_display_new().

*  We must explicitly tell libepoxy that we are using wglMakeCurrent() outside
   of libepoxy that is being used in GdkGL, otherwise we would end up crashing
   as the GL/WGL function pointers would become invalid.

*  We must also deactivate temporarily the underlying WGL context that was made
   current by gdk_gl_context_make_current() so that when
   gst_gl_display_create_context() calls wglShareLists(), we won't get bitten
   by error 0xaa (resource busy), as some drivers don't handle this well when
   the GL context is current in another thread.

For the last two points we make use of macros defined by the platforms that the
build is done for to help us carry out the necessary tasks as needed.

Thanks to Matthew Waters for the info on integrating GstGL and windowing
toolkits on Windows.
2021-05-24 16:36:40 +08:00
Chun-wei Fan
943559da67 gtk/meson.build: Fix linking on Visual Studio 2013
Visual Studio 2013's linker does not suport `/WHOLEARCHIVE:`, so just
explicitly extract the objects from the static libraries that will
form the final GTK DLL.
2021-05-24 10:30:34 +08:00
Matthias Clasen
21057fb857 Merge branch 'focusable-fixes' into 'master'
label: Fix mnemonic activation

Closes #3965

See merge request GNOME/gtk!3578
2021-05-23 15:53:27 +00:00
Matthias Clasen
281bb5e2c4 treeviewcolumn: Use focusable when we mean it
The focusable property has taken over the role that
can-focus had in GTK 3.
2021-05-23 11:20:00 -04:00
Matthias Clasen
eb61f0fc63 treeexpander: Use focusable where we mean it
This does not fix keyboard activation for tree expanders,
but it is more correct than using can-focus.
2021-05-23 11:20:00 -04:00
Matthias Clasen
105b12f807 togglebutton: Fix mnemonic activation
We want to grab the focus when we're focusable, so
look at the focusable property.
2021-05-23 11:20:00 -04:00
Matthias Clasen
882893259d floxbox: Fix focus navigation
We want to find focusable children, so we need to look at
the focusable property, not at can-focus. This is a change
from GTK 3, where can-focus was the correct property to
look at.
2021-05-23 11:20:00 -04:00
Matthias Clasen
052917a67d label: Fix mnemonic activation
The intention of the code is to find a focusable ancestor,
so it needs to look at the focusable property, not at
can-focus. This is a change from GTK 3, where can-focus
was the correct property to look at.

Fixes: #3965
2021-05-23 11:19:40 -04:00
Matthias Clasen
226edf1f91 Merge branch 'matthiasc/for-master' into 'master'
demos: Clean up doc comments

See merge request GNOME/gtk!3574
2021-05-23 02:14:01 +00:00
Matthias Clasen
be944053e0 docs: More syntax fixes
The syntax for interface links is [iface@...], not
[interface@...].
2021-05-22 21:21:10 -04:00
Matthias Clasen
71aac48042 docs: More syntax fixes
[`func@Foo`] is not the right link syntax either.
2021-05-22 21:20:10 -04:00
Matthias Clasen
8bcc6b1d96 docs: Fix up syntax
There's no [type_func@...[ syntax, it is all [func@...].
2021-05-22 20:56:14 -04:00
Matthias Clasen
40f292cb13 docs: Sync up debug flag information 2021-05-22 20:46:59 -04:00
Matthias Clasen
601a8de422 treemodel: Cosmetic docs changes 2021-05-22 20:46:59 -04:00
Matthias Clasen
fe564318b6 sortlistmodel: Cosmetic docs changes 2021-05-22 20:46:16 -04:00
Matthias Clasen
09244edc15 expression: Cosmetic docs changes 2021-05-22 17:28:10 -04:00
Matthias Clasen
f5f8f83e3e textbuffer: Cosmetic docs changes 2021-05-22 17:25:27 -04:00
Matthias Clasen
74a39bbae0 textview: Cosmetic docs changes 2021-05-22 17:25:27 -04:00
Matthias Clasen
3ab34ffdc0 text: Cosmetic docs fixes 2021-05-22 17:25:26 -04:00
Matthias Clasen
13a93489b7 widget: Cosmetic docs changes 2021-05-22 17:25:26 -04:00
Matthias Clasen
b35e02db20 shortcutscontroller: Cosmetic docs changes 2021-05-22 17:25:26 -04:00
Matthias Clasen
6cb4dda5d6 gdk: Cosmetic docs changes 2021-05-22 17:25:26 -04:00
Matthias Clasen
2d12a7d9ee directorylist: Cosmetic docs changes 2021-05-22 17:25:26 -04:00
Matthias Clasen
9a7e4f4304 eventcontroller: Cosmetic docs changes 2021-05-22 17:25:26 -04:00
Matthias Clasen
876104835e sorter: Cosmetic docs changes 2021-05-22 17:25:26 -04:00
Matthias Clasen
786e28fec0 filter: Cosmetic docs changes 2021-05-22 17:25:26 -04:00
Matthias Clasen
b617ba1c82 docs: Refer to backend APIs
Add links to the backend api docs.
2021-05-22 17:25:26 -04:00
Matthias Clasen
252edbdbc6 docs: Fix a typo 2021-05-22 17:25:26 -04:00
Matthias Clasen
0bba3610c5 docs: Avoid stairstepping
If you don't put empty lines between the items in a
definition list, markdown helpfully stairsteps them.
We don't want that!
2021-05-22 17:25:26 -04:00
Matthias Clasen
fc9f580fd3 docs: Update GSK_RENDERER docs
This did not mention the opengl and ngl values yet.
2021-05-22 17:25:26 -04:00
Matthias Clasen
91f7b9663f gtk: Clean up docs syntax
Replace leftover gtk-doc syntax (#Type) with backquotes.
2021-05-22 17:25:26 -04:00
Matthias Clasen
2d266d107b gsk: Clean up docs syntax
Replace leftover gtk-doc syntax (#Type) with backquotes.
2021-05-22 17:25:26 -04:00
Matthias Clasen
fff2b3c710 gdk: Clean up docs syntax
Replace leftover gtk-doc syntax (#Type) with backquotes.
2021-05-22 17:25:26 -04:00
Benjamin Otte
5af6c37f8c x11: Be more careful with NVIDIA workaround
Check that we are indeed running inside an Xorg server before enabling
the workaround.

XWayland or other nested X servers deadlock when that workaround is
applied.
2021-05-22 01:43:31 +02:00
Matthias Clasen
2d0957b732 docs: Clean up docs syntax
Replace leftover gtk-doc syntax (#Type) with backquotes.
2021-05-21 15:34:47 -04:00
Matthias Clasen
0996552708 demos: Clean up doc comments
These don't show up anywhere, but might still clean
them up.
2021-05-21 13:53:38 -04:00
Piotr Drąg
620787e56b Update POTFILES.in 2021-05-21 14:28:58 +02:00
Matthias Clasen
f5bd9f721c Merge branch 'wip/exalm/check-activate' into 'master'
checkbutton: Don't allow to uncheck radios by activating them

See merge request GNOME/gtk!3569
2021-05-21 02:06:58 +00:00
Matthias Clasen
345edb8a89 Merge branch 'doc-tweaks' into 'master'
Fix documentation syntax

See merge request GNOME/gtk!3572
2021-05-21 01:18:58 +00:00
Matthias Clasen
4a0d3d7acc docs: Reduce redundancy
Remove a boatload of "or %NULL" from nullable parameters
and return values. gi-docgen generates suitable text from
the annotation that we don't need to duplicate.

This adds a few missing nullable annotations too.
2021-05-20 20:45:06 -04:00
Matthias Clasen
7fe0610b68 introspection: Stop using allow-none
allow-none has been deprecated for a long time
already. Instead use optional and nullable everywhere.
2021-05-20 19:17:49 -04:00
Matthias Clasen
8ba16eb4f1 Documentation fixes
Mostly fixing up indentation of continuation lines,
and other small cleanups.
2021-05-20 19:17:49 -04:00
Matthias Clasen
ab6a5be0f8 Fix documentation syntax
Properties use : in their link syntax.
2021-05-20 19:16:59 -04:00
Matthias Clasen
94b0907534 Merge branch 'wip/exalm/switch-icons-2' into 'master'
icons: Fix switch-off icon

See merge request GNOME/gtk!3571
2021-05-20 22:49:29 +00:00
Alexander Mikhaylenko
0017b4b69a icons: Fix switch-off icon
It wasn't converted to paths and so wasn't rendered correctly.
2021-05-20 23:36:30 +05:00
Matthias Clasen
430be6f2a9 Merge branch 'popover-docs' into 'master'
popover: Update docs

Closes #3960

See merge request GNOME/gtk!3570
2021-05-20 13:55:47 +00:00
Matthias Clasen
bff7ac4a1d popover: Update docs
Remove mention of show/hide animations, and mention
cascading close instead.

Fixes: #3960
2021-05-20 09:18:47 -04:00
Alexander Mikhaylenko
fb6c6c85bf checkbutton: Don't allow to uncheck radios by activating them
Do the same check as when clicking.
2021-05-20 14:38:33 +05:00
Yuri Chornoivan
894adea2f7 Update Ukrainian translation 2021-05-20 07:29:07 +00:00
Yuri Chornoivan
0e1d6fbbbc Update Ukrainian translation 2021-05-20 07:27:43 +00:00
Alexander Mikhaylenko
bad01edd2c checkbutton: Sync the indicator state with the widget
Clicking the whole check button toggles it, so make sure the hover and
active states are propagated to the indicator like in GTK3.
2021-05-20 12:17:45 +05:00
Matthias Clasen
e9ca8d689f Merge branch 'bilelmoussaoui/gdk-return-error-annotation' into 'master'
gdk: annotate Content Serialize/Deserialize return_error

See merge request GNOME/gtk!3567
2021-05-20 03:54:15 +00:00
Bilal Elmoussaoui
c5eb2f5d16 gdk: annotate Content Serialize/Deserialize return_error 2021-05-19 18:10:34 +00:00
Benjamin Otte
7db87a8889 Merge branch 'fix-gst-media-file' into 'master'
gtkgstmediafile: Remove media-info-updated callback

Closes #3913

See merge request GNOME/gtk!3565
2021-05-19 16:22:35 +00:00
Ivan Molodetskikh
12a9a0faf7 gtkgstmediafile: Remove media-info-updated callback
Instead, rely on position-updated which is also called always, and also
a little later than media-info-updated, giving GstPlayer time to figure
out more of the video info. Tested on local and remote mount videos,
images, sound files.

Works around / fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3913,
https://gitlab.gnome.org/GNOME/gtk/-/issues/3914.
2021-05-19 18:55:37 +03:00
Matthias Clasen
fc321d8282 Merge branch 'matthiasc/for-master' into 'master'
Actually pass the devel profile to flatpak builds

See merge request GNOME/gtk!3563
2021-05-18 11:42:33 +00:00
Matthias Clasen
7d27c615b7 Actually pass the devel profile to flatpak builds
I added that to the manifests, and did not notice that
we do the last build step manually :(
2021-05-18 07:38:18 -04:00
Matthias Clasen
7de266a620 Merge branch 'wip/carlosg/sequence-accepted-in-group' into 'master'
gtkgesture: Apply gesture group state after setting up sequence

Closes #3946

See merge request GNOME/gtk!3560
2021-05-18 10:58:19 +00:00
Matthias Clasen
4cbc5ed20a Merge branch 'fix-gen-demo-conf' into 'master'
Fix generating demo_conf.h on builds without GIT in PATH

See merge request GNOME/gtk!3562
2021-05-18 10:31:57 +00:00
Chun-wei Fan
c18a1ac1a1 gen-demo-header.py: Fix running without git
The script assumes that the git program is in the PATH which may not be always
the case, so if git was not found, fallback to the former behavior of making
VCS_TAG an empty string if the profile option was not set to 'devel'.

Also fix the call to the script so that we do indeed call GIT on the source GIT
repo so that we can get the right short SHA1 sum.

Re-organize the code a bit in the process, so that things seem cleaner.
2021-05-18 11:25:20 +08:00
Matthias Clasen
ab6e4bfc8d Merge branch 'wip/carlosg/reset-after-grab' into 'master'
Fixes to GTK grab notification

Closes #3942

See merge request GNOME/gtk!3561
2021-05-17 23:35:26 +00:00
Carlos Garnacho
6b7b232114 gtkwindow: Fix "shadowed" checks for GTK grabs
We iterate here from the target widget up the toplevel checking
for the previous and new grab, there's however 2 bugs here:
- The check for is_shadowed was different to the check for was_shadowed
- The loop started with the assumption that the widgets did not hold
  a grab, just to change it if the grab widget was found. (or maybe
  it's the other way around? it's unclear with the differing checks
  for past/present state).

Make these checks consistent, and ensure we start with the right
assumption for the past/present grabbing state, and accounting that
new/old grab widgets may or may not be part of the pick stack.
2021-05-18 00:16:55 +02:00
Carlos Garnacho
0a5d21ca9e gtkwindow: Rename function
With gtk_grab_notify_foreach() just taking care of emitting crossing
notifications due to the GTK grab change, rename it to a more apt
gtk_synthesize_grab_crossing().
2021-05-18 00:16:48 +02:00
Carlos Garnacho
f003a4c6cc gtkwindow: Simplify GTK grab notification
The _gtk_widget_grab_notify() function just (maybe) did a) reset
controllers and b) hide toplevels. The second part was a testing
remnant introduced in commit 024d832d94, not part of the original
fix.

Do the former more concisely, called from the place where we figure
out whether a widget's ability to receive events changed due to
GTK grabs. It's across those changes that we are interested in
resetting the controllers.

With the gestures being reset both ways, GtkWindowHandle (and
probably other) gestures are now able to reset after a GTK grab
takes input away (e.g. GtkMenuButton). This could be seen as
a sudden jump the next time they'd be dragged with the mouse,
as the gesture would "resume" the previous interaction.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3942
2021-05-18 00:16:48 +02:00
Carlos Garnacho
53df32e6cf 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
2021-05-18 00:16:12 +02:00
Matthias Clasen
8670034c86 Merge branch 'ebassi/rev-parse-fallback' into 'master'
build: Check CI envvars before rev-parse

See merge request GNOME/gtk!3559
2021-05-17 21:13:04 +00:00
Emmanuele Bassi
c1fbf654a0 build: Check CI envvars before rev-parse
The CI pipeline does not do a full clone, so we cannot use `git
rev-parse` to get the short SHA checksum for the current commit.

Of course, since nothing's ever easy, we cannot use vcs_tag() with a
custom command, so we need to generate our out `demo_conf.h` header
straight from a script.
2021-05-17 21:34:13 +01:00
Matthias Clasen
9066078928 Merge branch 'wip/exalm/activatable2' into 'master'
theme: Specificity bump for dropdowns

See merge request GNOME/gtk!3558
2021-05-17 20:10:12 +00:00
Alexander Mikhaylenko
4f16e661cf theme: Specificity bump for dropdowns
Fix a fallout from d56711b5d8
2021-05-17 23:26:08 +05:00
Matthias Clasen
45b85767c4 Merge branch 'wip/exalm/activatable' into 'master'
listitemwidget: Have .activatable style class if the item is activatable

See merge request GNOME/gtk!3557
2021-05-17 15:56:02 +00:00
Alexander Mikhaylenko
d56711b5d8 listitemwidget: Have .activatable style class if the item is activatable
Match GtkListBox, so it's possible to use the same styles for them.

Update GtkListView and GtkGridView docs to reflect that, fix a few gtk-doc
formatting leftovers along the way.
2021-05-17 18:10:35 +05:00
Matthias Clasen
df28a57ae3 Merge branch 'matthiasc/for-master' into 'master'
ngl: Add padding between cached glyphs

See merge request GNOME/gtk!3555
2021-05-17 12:12:22 +00:00
Matthias Clasen
04bac8ef2a testsuite: Run some installed tests exclusively
My suspicion is that the clipboard (and some other)
installed test interferes with others, because the
clipboard is a shared resource.
2021-05-17 07:16:42 -04:00
Matthias Clasen
7ad193787e Merge branch 'wip/exalm/emojichooser' into 'master'
emojichooser: Set selection-mode=none on the toolbar flowbox

See merge request GNOME/gtk!3556
2021-05-17 11:10:33 +00:00
Alexander Mikhaylenko
27e662cfd1 emojichooser: Set selection-mode=none on the toolbar flowbox
Selection is never used there, avoid unwanted selected states if clicking
outside the buttons.
2021-05-17 14:09:03 +05:00
Pawan Chitrakar
661a572d82 Update Nepali translation
(cherry picked from commit 597a624fc5)
2021-05-16 07:41:56 +00:00
Matthias Clasen
66b4f0cac4 ngl: Reuse texture coordinates
When uploading glyphs, reuse the position that
we get from gsk_ngl_texture_library_pack, instead
of recomputing it.
2021-05-15 22:23:14 -04:00
Matthias Clasen
81e0206465 ngl: Be consistent about padding
Make gsk_ngl_texture_library_pack always return
the position including the padding. And compute
texture coordinates accurately in all cases (we
were fudging the padding for standalone textures.
2021-05-15 22:21:26 -04:00
Matthias Clasen
cb1babeeba ngl: Add padding between cached glyphs
Without this, adjacent items in the cache sometimes
bleed into the texture for a glyph.
2021-05-15 22:15:05 -04:00
Matthias Clasen
67dc778b8f Merge branch 'gst-egl-optional' into 'master'
meson: Do not enforce GStreamer EGL lib

See merge request GNOME/gtk!3554
2021-05-15 14:21:09 +00:00
Rafał Dzięgiel
bbd4ee2986 meson: Do not enforce GStreamer EGL lib
GStreamer EGL headers are handled by GstGL lib.
No need to additionally import them.
2021-05-15 14:03:23 +02:00
Kjartan Maraas
42b2eae532 Update Norwegian Bokmål translation
(cherry picked from commit d952fa48e7)
2021-05-15 07:35:38 +00:00
Matthias Clasen
0902f45d71 Merge branch 'gst-x11-egl' into 'master'
gtkgstsink: Support EGL under x11

See merge request GNOME/gtk!3553
2021-05-14 19:57:05 +00:00
Rafał Dzięgiel
c51eb7665e gtkgstsink: Support EGL under x11
Add support for EGL under x11 windowing system to GStreamer sink
2021-05-14 19:29:00 +02:00
Matthias Clasen
1a426d6fff Merge branch 'ebassi/issue-3948' into 'master'
x11: Loosen the match for the NVIDIA driver

Closes #3948

See merge request GNOME/gtk!3549
2021-05-14 10:50:59 +00:00
Matthias Clasen
07b5072c9c Merge branch 'matthiasc/for-master' into 'master'
inspector: Use new get_egl_display apis

See merge request GNOME/gtk!3546
2021-05-14 00:40:05 +00:00
Matthias Clasen
3a0febfe79 Merge branch 'offscreen-fixes' into 'master'
Add some more transform tests

See merge request GNOME/gtk!3551
2021-05-14 00:38:52 +00:00
Matthias Clasen
8e7bc8d742 Improve transformed offscreen rendering
Preserve the scale for 2D transforms to
avoid a pixellated appearance.
2021-05-13 19:37:16 -04:00
Matthias Clasen
809299f9e4 Add some more transform tests
Test that gsk_transform_to_affine works.
2021-05-13 19:37:16 -04:00
Matthias Clasen
c391cf38e2 testzoom: Fix the in-place rotate 2021-05-13 19:37:16 -04:00
Matthias Clasen
8c75e6896e inspector: Use new get_egl_display apis
This makes the code a bit more concise.

Also, get WGL information when we are using it.
2021-05-13 15:25:18 -04:00
Emmanuele Bassi
b3d6928f35 x11: Pair eglInitialize with eglTerminate
If we bail out after EGL initialization we want to go back to a stable
state and not leave EGL hanging.
2021-05-13 18:23:50 +01:00
Emmanuele Bassi
3d8ba93f59 x11: Loosen the match for the NVIDIA driver
It seems nVidia puts a different string in the GL_VENDOR than the one it
uses for GLX.
2021-05-13 18:22:30 +01:00
Emmanuele Bassi
889bf83020 Merge branch 'ebassi/boost-url' into 'master'
Update the URL for the Boost archive

See merge request GNOME/gtk!3548
2021-05-13 11:47:28 +00:00
Emmanuele Bassi
6c63f7b0e2 Update the URL for the Boost archive
The old URL seems to have failed, and now it returns 301.

Use the URL from the Boost website.
2021-05-13 11:29:22 +01:00
Matthias Clasen
3872c3a127 Merge branch 'fix-picking-with-transforms' into 'master'
Fix picking with transforms

See merge request GNOME/gtk!3547
2021-05-13 10:09:37 +00:00
Matthias Clasen
5be785bff8 Add a transform test
This reveals some issues with scale handling.
2021-05-12 21:50:32 -04:00
Matthias Clasen
bf454e948d Fix picking with transforms
When transforms include scales, we weren't picking
children properly. The special-case in gtk_widget_do_pick
only applies to 2D translations.
2021-05-12 20:58:16 -04:00
Emmanuele Bassi
e66ec84c1e Merge branch 'ebassi/issue-3945' into 'master'
docs: Fix indentation of the arguments

Closes #3945

See merge request GNOME/gtk!3544
2021-05-12 20:12:13 +00:00
Matthias Clasen
6537728c7b Merge branch 'wip/chergert/fix-gi-typo' into 'master'
gdk: fix typo in G-I attribute

See merge request GNOME/gtk!3545
2021-05-12 18:43:33 +00:00
Matthias Clasen
95f3f8f3c4 Merge branch 'win32.egl.getter' into 'master'
Win32: Add EGLDisplay getter

See merge request GNOME/gtk!3543
2021-05-12 18:42:35 +00:00
Christian Hergert
ae9b4f8940 gdk: fix typo in G-I attribute 2021-05-12 10:53:56 -07:00
Emmanuele Bassi
8ef353a970 docs: Fix indentation of the arguments
The indentation of new lines inside documentation blurbs must be smaller
than 4 spaces, otherwise the Markdown parser will consider the line to
be part of a pre-formatted code block.

Fixes: #3945
2021-05-12 17:38:07 +01:00
Chun-wei Fan
6d33e9058c Win32: Add EGLDisplay getter
Like what was done for Wayland and X11, add an API to retrieve the EGLDisplay
if one is being used in place of WGL.
2021-05-12 22:16:56 +08:00
Matthias Clasen
78852b181a Merge branch 'ebassi/egl-display-get' into 'master'
Add backend-specific getter for the EGLDisplay

See merge request GNOME/gtk!3542
2021-05-11 12:42:50 +00:00
Emmanuele Bassi
2588f9cee6 wayland: Add EGLDisplay getter
Getting an EGLDisplay object is messy; might as well expose the function
we use internally to save some time, just like we did for the X11
backend.
2021-05-11 12:46:03 +01:00
Emmanuele Bassi
abc2d7e4a9 x11: Add EGLDisplay getter
Getting an EGLDisplay object is messy; might as well expose the function
we use internally to save some time.
2021-05-11 12:42:16 +01:00
Emmanuele Bassi
6189e343f3 build: Do not use C arguments with C++
Otherwise the C++ compiler will start to complain.

The C++ keyword test does not need additional warnings.
2021-05-11 12:24:34 +01:00
Matthias Clasen
8bfa182ed9 Merge branch 'misc-inspector-things' into 'master'
inspector: Show text direction

See merge request GNOME/gtk!3541
2021-05-11 10:51:31 +00:00
Matthias Clasen
ea162ed016 inspector: Avoid a crash with GL variants
When configuring the inspector display, preserve
debug flags that affect which GL variant we pick.
Otherwise, we may end up with a GLX context on the
default display, and an EGL context on the inspector
one. This hopelessly confuses libepoxy, and things
don't go well when that happens.
2021-05-10 21:25:08 -04:00
Matthias Clasen
e2aa161590 inspector: Show EGL info for X11 as well 2021-05-10 21:24:50 -04:00
Matthias Clasen
a723baec4b inspector: Show text direction
This is not a property, so show it on the misc tab.
2021-05-10 20:55:43 -04:00
Emmanuele Bassi
6120519e8e Merge branch 'ebassi/egl-x11' into 'master'
Prefer EGL to GLX for the GL support on X11

See merge request GNOME/gtk!3540
2021-05-10 22:51:11 +00:00
Emmanuele Bassi
69856a9aac x11: Don't update GLX visuals with EGL
We're going to get into a messy situation, with both GLX and EGL
initialized.

If we're already using EGL, skip the whole cache.
2021-05-10 21:19:14 +01:00
Matthias Clasen
564d835fba Merge branch 'broadway-display-scale' into 'master'
broadway: Add a setter for display scale

Closes #3934

See merge request GNOME/gtk!3538
2021-05-10 20:11:38 +00:00
Emmanuele Bassi
c35a6725b9 x11: Always fall back to GLX on NVIDIA
At least until we can guarantee that EGL-X11 works fine there.
2021-05-10 20:44:35 +01:00
Emmanuele Bassi
a57f79006a x11: Move the damage fences into the GLX code
It's GLX-specific anyway, there's no need to complicate things by having
half the code in the generic path, and half in the GLX one.
2021-05-10 20:44:35 +01:00
Emmanuele Bassi
6600b0b507 x11: Add debug toggle for preferring GLX
Mostly as a way to compare the EGL and GLX implementations.
2021-05-10 20:44:35 +01:00
Emmanuele Bassi
9a19e3c741 x11: Add profiler marks for SwapBuffers 2021-05-10 20:44:35 +01:00
Emmanuele Bassi
8924d614c0 x11: Use EGL for GL support
This makes the X11 backend similar to the Wayland one, when it comes to
OpenGL.

Fall back to GLX only if EGL support is not available.
2021-05-10 20:44:35 +01:00
Emmanuele Bassi
03f76eccf5 x11: Decouple GLX from GdkX11GLContext
If we want to add an EGL implementation for the X11 backend, we are
going to need to move the GLX bits into their own class. The first step
is to declare GdkX11GLContext as an abstract type, and then subclass it
into a GdkX11GLContextGLX type, which includes the whole GLX
implementation.
2021-05-10 20:44:35 +01:00
Matthias Clasen
b13c2e17f1 inspector: Support scale changes on Broadway 2021-05-10 10:55:41 -04:00
Matthias Clasen
7c1c8c53e7 Merge branch 'ci-more-clang' into 'master'
ci: Add clang-extra-tools to the image

See merge request GNOME/gtk!3539
2021-05-10 13:26:54 +00:00
Matthias Clasen
497b843e76 ci: Add clang-extra-tools to the image
Hurray for bite-size packages! Splitting
this off broke our style check in ci.
2021-05-10 08:52:12 -04:00
Matthias Clasen
7745f67583 broadway: Add a setter for display scale
This is useful when using Broadway as a headless
display server.

Fixes: #3934
2021-05-10 07:19:26 -04:00
Matthias Clasen
374225ae6a Cosmetics 2021-05-09 19:32:48 -04:00
Matthias Clasen
7259be35b0 Merge branch 'file-replace-trap' into 'master'
print-editor: Fix saving

See merge request GNOME/gtk!3536
2021-05-09 23:06:49 +00:00
Matthias Clasen
1601e204f4 Merge branch 'wip/exalm/image-button' into 'master'
Ensure consistent header bar buttons in the demo and tests

See merge request GNOME/gtk!3537
2021-05-09 23:06:25 +00:00
Alexander Mikhaylenko
43e33b2990 test: Ensure .image-button on header bar buttons 2021-05-09 20:55:26 +05:00
Alexander Mikhaylenko
7ebd9291d9 demo: Ensure .image-button on header bar buttons 2021-05-09 20:53:05 +05:00
Alexander Mikhaylenko
5d59415c2d test: Use more appropriate back/forward icons 2021-05-09 20:52:48 +05:00
Alexander Mikhaylenko
c5d2d89930 demo: Use more appropriate back/forward icons 2021-05-09 20:35:39 +05:00
Matthias Clasen
0108ffe059 inspector: Fix saving css
g_file_replace_contents() does not accept -1
as length, unlike similar apis.
2021-05-09 11:19:43 -04:00
Matthias Clasen
087935f160 print-editor: Fix saving
g_file_replace_contents() does not accept -1 as
length, unlike similar apis.
2021-05-09 11:19:43 -04:00
Matthias Clasen
fef9f1187d Merge branch 'matthiasc/for-master' into 'master'
fontbutton: Quote font family names

See merge request GNOME/gtk!3534
2021-05-09 14:43:03 +00:00
Matthias Clasen
83c9a24855 Merge branch 'wip/exalm/actionbar' into 'master'
GtkActionBar spacing fixes

See merge request GNOME/gtk!3535
2021-05-09 14:40:19 +00:00
Alexander Mikhaylenko
435a8f6337 theme: Fix GtkActionBar spacing 2021-05-09 17:01:36 +05:00
Alexander Mikhaylenko
2c8e4573f2 actionbar: Fix the css node docs 2021-05-09 16:55:48 +05:00
Alexander Mikhaylenko
b45721373a action-bar: Add start and end style classes to GtkActionBar boxes
Make it possible to add spacing to them from the theme without affecting
the center child should it happen to be a box.
2021-05-09 16:54:59 +05:00
Matthias Clasen
e0ebf4e401 fontbutton: Quote font family names
Otherwise, spaces in family names will trip up
the css parser.
2021-05-08 20:54:50 -04:00
Matthias Clasen
dc878f24d2 Merge branch 'emoji-full-locale' into 'master'
emoji: Try to load emoji data using both language and territory

See merge request GNOME/gtk!3531
2021-05-08 02:07:18 +00:00
Matthias Clasen
be1f9b2cb0 Merge branch 'wip/carlosg/map-emulated-moveresize-window' into 'master'
gdk/x11: Ensure to map the non-ewmh moveresize emulation window before use

See merge request GNOME/gtk!3529
2021-05-07 14:55:16 +00:00
Marco Trevisan (Treviño)
0769dfbd32 emoji: Try to load emoji data using both language and territory
When loading the emoji data we just try to get the data for a language
while there may be territory specializations and emojibase provides
them.

So, split the loading function and try to load the data for the fully
defined language string (i.e. `it-ch`) before loading the generic one
for the language (i.e. `it`) and eventually falling back to the generic
english.
2021-05-07 16:10:29 +02:00
Carlos Garnacho
081e127377 gdk/x11: Ensure to map the non-ewmh moveresize emulation window before use
Otherwise, we don't deem it as able to be grabbed, which we intend to do
immediately after.
2021-05-07 15:51:52 +02:00
Matthias Clasen
17a799aeb2 Merge branch 'matthiasc/for-master' into 'master'
Add some calendar tests

See merge request GNOME/gtk!3528
2021-05-07 12:57:55 +00:00
Matthias Clasen
a3f5283018 Add some calendar tests
Check that the getters and setters work as documented.

This tests the fix in 1f8985e476.
2021-05-07 07:52:11 -04:00
Matthias Clasen
633d783f0c Merge branch 'carlosgc/calendar-day' into 'master'
calendar: value of day property is shifted by 1

See merge request GNOME/gtk!3524
2021-05-07 11:42:59 +00:00
Matthias Clasen
451a5fb6d4 Merge branch 'fix-3918' into 'master'
demos: Mark non-static signal handler symbols for export

Closes #3918

See merge request GNOME/gtk!3523
2021-05-07 11:08:57 +00:00
Matthias Clasen
3ad7d304bd Merge branch 'update-emoji-data' into 'master'
emoji: Update data to CLRD v39

See merge request GNOME/gtk!3520
2021-05-07 11:05:46 +00:00
Carlos Garcia Campos
7b2b8b86e1 calendar: do not allow to set 0 as day
We no longer unselect the current day when 0 is set, so update the
documentation and the property definition.
2021-05-07 12:13:49 +02:00
Carlos Garcia Campos
1f8985e476 calendar: value of day property is shifted by 1
The day is a number between 1 and 31 and that's what we get from
GDateTime.
2021-05-07 11:10:36 +02:00
Chun-wei Fan
efb875daef demos: Mark non-static signal handler symbols for export
The symbols in the .ui files for the signal handlers and functions must be
exported so that the system can pick them up during execution.

Fixes #3918.
2021-05-07 10:38:02 +08:00
Matthias Clasen
59cc3a9f86 Merge branch 'hidden-mnemonics-fix' into 'master'
label: Make hidden mnemonics work again

See merge request GNOME/gtk!3518
2021-05-07 00:34:33 +00:00
Matthias Clasen
febd143ac8 Merge branch 'emoji-data-prefix-fix' into 'master'
emoji: Use a portable and configuration-dependent path to load the data

See merge request GNOME/gtk!3522
2021-05-06 15:33:15 +00:00
Matthias Clasen
e00785e958 Merge branch 'macos' into 'master'
Fix building both X11 and Quartz backends on macOS

See merge request GNOME/gtk!3508
2021-05-06 15:26:49 +00:00
Marco Trevisan (Treviño)
4a4525a65d emoji: remove duplicated include 2021-05-06 16:00:06 +02:00
Marco Trevisan (Treviño)
c98dd1afb9 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 16:00:06 +02:00
Dan Cîrnaț
12d591178e Fix compilation of c++ test: cpp_args
The correct meson argument for c++ is cpp_args.
Remove unnecessary(?) "-Idummy-headers" - breaks build
2021-05-06 10:38:41 +02:00
Dan Cîrnaț
bd7b29a6c4 Only compile gtkmountoperation-stub if the X11 backend is not enabled 2021-05-06 10:38:41 +02:00
Dan Cîrnaț
13b94dab10 Conditional check for gdesktopappinfo header
GDesktopAppInfo is not available on macOS and needs to be disabled
2021-05-06 10:38:41 +02:00
Marco Trevisan (Treviño)
ba3cbac21a 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 05:08:37 +02:00
Matthias Clasen
d94c386320 label: Make hidden mnemonics work again
The change in 875a92b95f made labels strip
out underlines earlier, but overlooked that this made
mnemonics not work before the timeout to show them
has passed. That was unintentional. Make mnemonics
work regardless of their visibility, again.
2021-05-05 22:55:52 -04:00
Matthias Clasen
4e2a263c1f Merge branch 'introspection-test' into 'master'
Add an introspection api test

See merge request GNOME/gtk!3514
2021-05-06 00:52:06 +00:00
Matthias Clasen
6a24e0c7c3 Add an introspection api test
Every beginning is small... just check one constant for now.
2021-05-05 19:18:32 -04:00
Matthias Clasen
c8eeb46aa5 Merge branch 'update-ci-to-f34' into 'master'
WIP ci: Update the image to Fedora 34

See merge request GNOME/gtk!3516
2021-05-05 23:17:07 +00:00
Matthias Clasen
d143f76568 Merge branch 'msvc-ci' into 'master'
ci: Add MSVC build

See merge request GNOME/gtk!3486
2021-05-05 23:16:39 +00:00
Matthias Clasen
930ff499ee Confine -mf16c to a single source file
We can't use this flag for any code that may get run
outside the __builtin_cpu_supports() check, and meson
doesn't allow per-file cflags. So we have to split this
code off into its own static library.
2021-05-05 18:58:23 -04:00
Xavier Claessens
f4dc24c3da Meson: gdk-pixbuf jpeg/png options changed to feature 2021-05-05 16:40:57 -04:00
Matthias Clasen
399fb76652 ci: Add pygobject to the images
This will let us add introspection tests in the future.
2021-05-05 16:31:03 -04:00
Matthias Clasen
de056a3319 ci: Show OS release for our containers 2021-05-05 16:22:32 -04:00
Matthias Clasen
bafa23fa2c Add debug spew to gdk tests 2021-05-05 15:41:46 -04:00
Matthias Clasen
ab725b4ba9 Merge branch 'wl-phys-transform' into 'master'
gdk/wayland: Take transform into account when setting physical size

See merge request GNOME/gtk!3515
2021-05-05 15:23:26 +00:00
Xavier Claessens
d8f44c06e8 ci: Add MSVC build
This script is copied from glib CI.
2021-05-05 09:16:36 -04:00
Guido Günther
e40c869d0d 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 14:55:07 +02:00
Matthias Clasen
3591da517a Disable another font-challenged reftest 2021-05-05 08:17:26 -04:00
Matthias Clasen
014fb41448 Help the compiler out
gcc says: error: iteration 2147483649 invokes undefined behavior
                            [-Werror=aggressive-loop-optimizations]
which of course, never happens because ncols is always >= 2.
Add some assertions to tell the compiler.
2021-05-05 08:17:26 -04:00
Matthias Clasen
24072f26ca ci: Update the image to Fedora 34
This is in preparation to using mutter --headless
for tests.
2021-05-05 08:17:26 -04:00
Matthias Clasen
65017a0031 Merge branch 'bilelmoussaoui/trick-gir-list-position' into 'master'
gtk: trick g-ir scanner to add INVALID_LIST_POSITION

See merge request GNOME/gtk!3513
2021-05-05 00:04:16 +00:00
Bilal Elmoussaoui
dc5aab62c8 gtk: trick g-ir scanner to add INVALID_LIST_POSITION
without it, the define doesn't get picked in the introspection data
2021-05-05 00:45:21 +02:00
Matthias Clasen
a3cccbeb53 Merge branch 'wip/exalm/text-handles' into 'master'
texthandle: Add a contents css node

Closes #3475

See merge request GNOME/gtk!3511
2021-05-04 21:40:48 +00:00
Matthias Clasen
cee6525213 Merge branch 'fix-reftest' into 'master'
Fix the icon-effect-missing reftest

See merge request GNOME/gtk!3512
2021-05-04 21:03:30 +00:00
Matthias Clasen
4f81dc1eaf Fix the icon-effect-missing reftest
This was comparing the included image-missing icon
with the one in the current icontheme on the test
system. Works fine as long as we don't change
the icons (which we just did). To avoid this, set
the icontheme to hicolor for this test, which does
not have the image-missing icon, so we end up getting
the builtin icon for both ui files.
2021-05-04 16:21:37 -04:00
Alexander Mikhaylenko
0e58bfe90e texthandle: Add a contents css node
Allow to theme it including using css transforms to avoid having assets.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3475
2021-05-04 23:53:05 +05:00
Matthias Clasen
e3e0342db7 Merge branch 'wip/exalm/switch-icons' into 'master'
icons: Fix switch icon names

Closes #3920

See merge request GNOME/gtk!3509
2021-05-04 16:18:29 +00:00
Matthias Clasen
b1f12a0535 Merge branch 'wip/exalm/icons' into 'master'
Update icons from adwaita-icon-theme

Closes #2656

See merge request GNOME/gtk!3510
2021-05-04 16:18:00 +00:00
Alexander Mikhaylenko
60f4b07196 icons: Update from adwaita-icon-theme
Also add the missing edit-clear RTL variant.
2021-05-04 19:12:04 +05:00
Alexander Mikhaylenko
4c60dac9cb icons: Remove media-playback-start-symbolic-rtl
See https://gitlab.gnome.org/GNOME/adwaita-icon-theme/-/issues/101
2021-05-04 19:12:04 +05:00
Matthias Clasen
8d14bd3339 Merge branch 'wip/exalm/css-error' into 'master'
cssselector: Fix max_selector usage

Closes #3100

See merge request GNOME/gtk!3507
2021-05-04 13:17:53 +00:00
Alexander Mikhaylenko
48d95d2d7a icons: Fix switch icon names
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3920
2021-05-04 17:49:07 +05:00
Matthias Clasen
670a2be782 Merge branch 'test.msvc' into 'master'
clipboard-client.c: Include necessary headers for Windows

See merge request GNOME/gtk!3505
2021-05-04 11:53:13 +00:00
Alexander Mikhaylenko
f3633d46ca cssselector: Fix max_selector usage
Reverts 2ae8ace784 other than code style
fixes.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/3100
2021-05-04 12:34:29 +05:00
Chun-wei Fan
e56754d27c clipboard-client.c: Include necessary headers for Windows
We need to include io.h and process.h for close() and exit(), as unistd.h may
not be universally available.
2021-05-04 12:12:50 +08:00
Matthias Clasen
40ebed3a03 4.3.0 2021-05-03 20:31:18 -04:00
Matthias Clasen
14ac4903b6 Fix dist script for theme reorg 2021-05-03 20:31:18 -04:00
Matthias Clasen
da613c504b Merge branch 'wip/exalm/textview-selection' into 'master'
textview: Selection rendering fixes

See merge request GNOME/gtk!3503
2021-05-03 23:55:46 +00:00
Matthias Clasen
7ac3507be2 Merge branch 'gnome-todo-dnd-crash' into 'master'
dragsource: Keep the source alive long enough

See merge request GNOME/gtk!3504
2021-05-03 21:35:55 +00:00
Alexander Mikhaylenko
316c783fce label: Update selection node and redraw on state changes
Mirror GtkText and GtkTextView.
2021-05-04 02:29:10 +05:00
Matthias Clasen
9e952bc7ff dragsource: Keep the source alive long enough
When a drop causes the event controller to be finalized
(directly or indirectly), we end up segfaulting while
trying to wrap up the drag operation. So, keep a reference
on the GtkDragSource from when the drag begins to when
it is done.

This fixes a crash in gnome-todo when dragging tasks.
2021-05-03 17:00:17 -04:00
Alexander Mikhaylenko
e4832a9e94 text: Queue redraw on state changes
Mirror GtkTextView.
2021-05-04 01:20:53 +05:00
Alexander Mikhaylenko
70ee86c951 textlayout: Clip selection bounds to the line extents
The rest of the line will be painted separately.
2021-05-04 01:08:19 +05:00
Matthias Clasen
ed97339ef1 NEWS: Updates 2021-05-03 15:38:11 -04:00
Matthias Clasen
b012a5c67e Merge branch 'static-analysis-fixes' into 'master'
Static analyis fixes

See merge request GNOME/gtk!3501
2021-05-03 19:21:42 +00:00
Matthias Clasen
642f32e14d Merge branch 'ebassi/for-master' into 'master'
Install documentation in the appropriate place

See merge request GNOME/gtk!3408
2021-05-03 19:21:18 +00:00
Matthias Clasen
7b735b88b4 Merge branch 'wip/carlosg/xdg-activation' into 'master'
gdk/wayland: Support the xdg-activation wayland protocol

See merge request GNOME/gtk!3502
2021-05-03 19:20:18 +00:00
Alexander Mikhaylenko
167134e1a8 textlayout: Support fully transparent selection text
Pango treats 0 alpha value as a unset alpha, so we have to special case it.
2021-05-04 00:16:05 +05:00
Alexander Mikhaylenko
0fa4b7a249 textview: Invalidate selection when its style changes 2021-05-04 00:16:05 +05:00
Alexander Mikhaylenko
f413d5ef22 textlayout: Only special case selection rendering for opaque colors
If the selection is partially transparent, it may still be desirable to
see the colors from tags underneath.
2021-05-04 00:16:05 +05:00
Carlos Garnacho
be4216e051 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.
2021-05-03 17:20:50 +02:00
Matthias Clasen
fa10264759 updateiconcache: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
5fbfe5203c buildertool: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
f472cb53ae printbackendlpr: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
a49ff5a1c4 textbtree: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
faf56a8abe stack: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
e510538f37 printoperation: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
b2bf48c3f0 listbase: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
cf0330d601 filterlistmodel: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
2f51f5affe emojichooser: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
a69ae36a99 fnmatch: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
6863528df1 a11y: Static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
e2722f03ac x11: A few static analysis fixes 2021-05-03 07:44:38 -04:00
Matthias Clasen
1be4684441 gdktoplevelsize: Comment out some unused code
This is not currently useful, and clang complains.
2021-05-03 07:44:38 -04:00
Matthias Clasen
4a96e790b1 Merge branch 'inspector-layouts' into 'master'
Various small inspector improvements

See merge request GNOME/gtk!3500
2021-05-03 01:40:46 +00:00
Matthias Clasen
f9d6134247 inspector: Improve monitor information display
Avoid a nested listbox, show the connector,
don't show information we don't have. Also,
disconnect all signal handlers from the display
when the inspector is going away.
2021-05-02 21:02:09 -04:00
Matthias Clasen
dfecc8fe02 inspector: Show keyboard layouts 2021-05-02 21:02:09 -04:00
Matthias Clasen
2b0c474117 Add gdk_wayland_device_get_xkb_keymap
This can be useful to get more detailed information
about keyboard configuration.
2021-05-02 21:02:09 -04:00
Matthias Clasen
0f74798a82 Add 4.4 version macros 2021-05-02 21:02:09 -04:00
Matthias Clasen
ead06fdb35 Bump version to 4.3.0
We are going to add new API.

Fix up affected tests.
2021-05-02 21:01:56 -04:00
Matthias Clasen
687e589950 Merge branch 'shifted-mnemonics' into 'master'
shortcuts: Ignore consumed modifiers for mnemonics

Closes #3912

See merge request GNOME/gtk!3499
2021-05-02 23:51:41 +00:00
Matthias Clasen
945b32ca1b Merge branch 'mesa.win32.fixes' into 'master'
gdkglcontext-win32.c: Fix running with Mesa drivers

See merge request GNOME/gtk!3483
2021-05-02 22:42:35 +00:00
Matthias Clasen
0768cfb7df shortcuts: Ignore consumed modifiers for mnemonics
This is necessary to make mnemonics like Alt-1 work in
layouts where numeric keys are shifted, like AZERTY.

Fixes: #3912
2021-05-02 18:33:44 -04:00
Matthias Clasen
b5e245762d Merge branch 'more-content-serializer-tests' into 'master'
Add a test for custom serializers

See merge request GNOME/gtk!3497
2021-05-02 14:00:51 +00:00
Matthias Clasen
4c6c0b9099 Add a test for custom serializers 2021-05-02 09:17:20 -04:00
Matthias Clasen
23af39b5b4 Merge branch 'matthiasc/for-master' into 'master'
Add tests for content serialization

See merge request GNOME/gtk!3496
2021-05-02 04:30:19 +00:00
Matthias Clasen
a5cab71c9b Add tests for content serialization
Test that roundtripping various types of content
through a stream of a given mimetype works as
expected.
2021-05-02 00:01:57 -04:00
Matthias Clasen
d4f43f1a7c Merge branch 'matthiasc/for-master' into 'master'
contentdeserializer: Fix an oversight

See merge request GNOME/gtk!3495
2021-05-02 03:09:41 +00:00
Matthias Clasen
7ab8109ef8 contentdeserializer: Fix an oversight
The argument passed with string_deserializer must be
a charset name. Passing the mimetype there does not
make sense.
2021-05-01 22:44:41 -04:00
Matthias Clasen
0f49a5068a Merge branch 'fix-gst-type' into 'master'
gtkgstmediafile: Fix callback argument type

See merge request GNOME/gtk!3494
2021-05-01 16:06:26 +00:00
Matthias Clasen
a6e0b6e5ce Merge branch 'wip/baedert/for-master' into 'master'
clipboard tests: Add noreturn annotations where possible

See merge request GNOME/gtk!3493
2021-05-01 15:59:30 +00:00
Matthias Clasen
bf563e0926 Merge branch 'matthiasc/for-master' into 'master'
wayland: Rewrite shm format debug spew

See merge request GNOME/gtk!3492
2021-05-01 15:59:21 +00:00
Ivan Molodetskikh
03ca7081df gtkgstmediafile: Fix callback argument type 2021-05-01 18:17:40 +03:00
Matthias Clasen
97afffba4e wayland: Rewrite shm format debug spew
Rewrite this in a way that doesn't depend on kernel
header defines at the time the wayland scanner was run.

This was causing the build to break on Centos 8, where
a bunch of fourcc formats are missing.
2021-05-01 11:17:28 -04:00
Timm Bäder
6b6246f7b4 clipboard tests: Add noreturn annotations where possible
Clang complains when they are missing.
2021-05-01 17:14:23 +02:00
Matthias Clasen
f1e006c88c Merge branch 'matthiasc/for-master' into 'master'
Check for root being a GtkWindow in a few places

See merge request GNOME/gtk!3491
2021-04-30 19:29:15 +00:00
Matthias Clasen
32280090fe Check for root being a GtkWindow in a few places
These things were showing up as crashes during DND,
when the root is a GtkDragIcon. I'm sure there's more.
2021-04-30 13:45:39 -04:00
Matthias Clasen
cdd8f7cd53 Merge branch 'bilelmoussaoui/gdk-content-formats-annotations' into 'master'
gdk: add length annotation to gdk_content_formats_get_mime_types

See merge request GNOME/gtk!3488
2021-04-30 16:48:04 +00:00
Matthias Clasen
d69ac108d4 Merge branch 'clipboard-test' into 'master'
Add more clipboard tests

See merge request GNOME/gtk!3478
2021-04-30 15:25:50 +00:00
Matthias Clasen
c1b614772c Install the clipboard-client binary
It is needed for the installed test.
2021-04-30 09:59:58 -04:00
Bilal Elmoussaoui
ec38e53249 gdk: add zero-terminated annotation to content_formats_get_gtypes 2021-04-30 15:43:33 +02:00
Bilal Elmoussaoui
e473e7a83a gdk: fix content_formats_get_mime_types annotation 2021-04-30 15:43:17 +02:00
Matthias Clasen
5636384449 Skip clipboard tests when they don't work
On headless weston, we have no seat, so focusing
the window won't work, and thus claiming the clipboard
won't either. Skip the tests in that case.
2021-04-30 09:17:39 -04:00
Matthias Clasen
f72ca060b5 Run gdk tests with an unset D-Bus address
If the session bus address is unset, GLib will
helpfully try to autolaunch a bus, which will
fail and timeout. If we set an empty address,
it gives up early.
2021-04-30 08:10:48 -04:00
Matthias Clasen
6482954c6e Fix the clipboard test under X11
We don't have a signal handler to worry about here.
2021-04-30 08:02:35 -04:00
Matthias Clasen
e1a0e4bfbe Make clipboard tests run installed
Use dedicated data files, and install them.
As usual, to run the test binary by hand, you
will need to set G_TEST_SRCDIR.
2021-04-30 07:47:19 -04:00
Pawan Chitrakar
ae3ae428a0 Update Nepali translation
(cherry picked from commit 24e924720d)
2021-04-30 10:52:21 +00:00
Matthias Clasen
be42644091 Add more clipboard tests
This tests the simple cases of copying text,
files, colors or images between processes.
2021-04-30 06:48:52 -04:00
Chun-wei Fan
66e7f3b404 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/NGL on Windows using the Mesa drivers.
2021-04-29 12:12:01 +08:00
Matthias Clasen
604d171d56 Merge branch 'bookmark-fix' into 'master'
gtkplacessidebar.c: add bookmark null checking

See merge request GNOME/gtk!3479
2021-04-28 16:09:32 +00:00
Geyslan G. Bem
65575fe0d0 gtkplacessidebar.c: fix coding style
Signed-off-by: Geyslan G. Bem <geyslan@gmail.com>
2021-04-28 08:42:59 -03:00
Emmanuele Bassi
ac5f0ba341 Merge branch 'ebassi/issue-3905' into 'master'
docs: Add missing extra files for gdk4 sub-references

Closes #3905

See merge request GNOME/gtk!3481
2021-04-28 09:50:55 +00:00
Matthias Clasen
e637ed739f Merge branch 'memfd_create' into 'master'
gdk/wayland/cursor/os-compatibility: fix build when memfd_create is not available

See merge request GNOME/gtk!3480
2021-04-28 00:50:42 +00:00
Emmanuele Bassi
29382360ed docs: Add missing extra files for gdk4 sub-references
The Wayland and X11 references need the gtk-logo.svg and the urlmap.js
extra files.

Fixes: #3905
2021-04-28 01:44:47 +01:00
David Lechner
2a610267eb gdk/wayland/cursor/os-compatibility: fix build when memfd_create is not available
When building for homebrew/linuxbrew on Ubuntu 16.04, memfd_create() is
not available and causes the build to fail.

This adds a proper check for the function.
2021-04-27 11:46:39 -05:00
Geyslan G. Bem
1635998ac3 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>
2021-04-27 11:58:31 -03:00
Matthias Clasen
82f8fc3bee Merge branch 'fix-panel-monitor' into 'master'
x11: Try harder to find the right monitor

Closes #3900

See merge request GNOME/gtk!3477
2021-04-27 03:48:13 +00:00
Matthias Clasen
f37662c655 x11: Try harder to find the right monitor
If we deal with a panel, we end up with no monitor,
and crash, which isn't great and isn't necessary.

Fixes: #3900
2021-04-26 23:20:10 -04:00
Benjamin Otte
1a12ea6e5a Merge branch 'wip/otte/for-master' into 'master'
clipboard: Make sure G_TYPE_STRING is nul-terminated

Closes #3899

See merge request GNOME/gtk!3476
2021-04-26 21:15:32 +00:00
Benjamin Otte
1be899459c clipboard: Fix reading of files
Make sure writing a terminating null byte actually works and we don't
just ignore the error message.
2021-04-26 21:32:57 +02:00
Benjamin Otte
f34e3c573b clipboard: Make sure G_TYPE_STRING is nul-terminated
When reading text, we need to check we terminate the G_TYPE_STRING
string with a null byte, because the clipboard does not guarantee one.

So just append a \0 to the stream.

Fixes #3899
2021-04-26 21:32:57 +02:00
Matthias Clasen
b23529d940 Merge branch 'matthiasc/for-master' into 'master'
wayland: Print all layouts in debug spew

See merge request GNOME/gtk!3475
2021-04-26 11:59:01 +00:00
Matthias Clasen
2c34abed20 wayland: Print all layouts in debug spew 2021-04-26 00:16:41 -04:00
Pawan Chitrakar
b3b63a2c8f Update Nepali translation
(cherry picked from commit 193747fadf)
2021-04-26 01:10:45 +00:00
Jordi Mas
4a1a9b1f44 Update Catalan translation 2021-04-25 20:08:19 +02:00
Matthias Clasen
215d4cbfe5 Merge branch 'fix-x11-shadows' into 'master'
x11: Fix shadows

Closes #3896

See merge request GNOME/gtk!3473
2021-04-25 11:43:23 +00:00
Matthias Clasen
8cd8aa2cb3 Merge branch 'matthiasc/for-master' into 'master'
Mention nightly flatpaks in the README

See merge request GNOME/gtk!3474
2021-04-24 21:27:38 +00:00
Matthias Clasen
b3b9dd493e Apply 4 suggestion(s) to 1 file(s) 2021-04-24 17:47:43 +00:00
Matthias Clasen
8909ad1859 Mention nightly flatpaks in the README 2021-04-24 11:42:21 -04:00
Matthias Clasen
aa569acaa1 window: Don't let solid-csd linger
Just from reading the code, it seems that we
should unset .csd and .solid-csd at the same
time, since the are mutually exclusive and
we unset them here so realize() can set one
of them again.
2021-04-24 11:29:19 -04:00
Matthias Clasen
1c1c030b8e Simplify shadow conditions
The code in gtkwindow.c for dealing with the various
combinations of client-side decorations and client-side
shadows is entirely too complicated.

This commit does not really clean it up, but simplifies
one of the shadow conditions far enough to make some
sense.

With this change, I get the expected decorations in
all the cases I can easily reproduce locally.
2021-04-24 11:07:20 -04:00
Matthias Clasen
628d5406d7 x11: Fix shadows
Commit a2cd21cab6 changed a condition and inadvertedly
broke client-side shadows on X11. Change this back.

Fixes: #3896
2021-04-24 09:19:18 -04:00
Emmanuele Bassi
5d563fcde6 Merge branch 'a11y-properties' into 'master'
a11y: Don't sent redundant property changes

See merge request GNOME/gtk!3472
2021-04-23 12:04:47 +00:00
Matthias Clasen
b2f3a3220e a11y: Don't sent redundant property changes
We were sending a property changed event for every set
property whenever we were sending any updates.
2021-04-23 07:34:00 -04:00
Matthias Clasen
4e66e782ea Merge branch 'synthetic-motion-grab' into 'master'
gdk: Avoid synthetic motion confusion

Closes #3439

See merge request GNOME/gtk!3471
2021-04-23 03:11:36 +00:00
Matthias Clasen
d225f14657 gdk: Avoid synthetic motion confusion
Don't emit a synthetic motion event on a surface
that is grab-shadowed by a popup. This has been
known to confuse GTK, at times.

Fixes: #3439
2021-04-22 21:09:54 -04:00
Matthias Clasen
13f9ca60d5 Merge branch 'gtk4-listbox-selection' into 'master'
Allow repeated selection extension on gtklistbox

Closes #3887

See merge request GNOME/gtk!3461
2021-04-22 23:29:45 +00:00
Matthias Clasen
be927d9ce6 Merge branch 'resize-borders' into 'master'
window: Fix up resize borders

Closes #3856

See merge request GNOME/gtk!3467
2021-04-22 11:13:20 +00:00
Matthias Clasen
dcb5a74275 Merge branch 'a11y-debug' into 'master'
Some a11y improvements

See merge request GNOME/gtk!3455
2021-04-22 11:04:30 +00:00
Matthias Clasen
8f70f1449d Merge branch 'gtk4-compose-modifiers' into 'master'
imcontextsimple: Ignore more modifiers in compose

See merge request GNOME/gtk!3468
2021-04-22 10:58:24 +00:00
Matthias Clasen
b25bc36d33 Merge branch 'wip/muktupavels/solid-csd' into 'master'
theme: fix solid-csd style

See merge request GNOME/gtk!3460
2021-04-22 10:48:22 +00:00
Matthias Clasen
da4e2a2976 theme: Make solid borders look better
As pointed out by Alberts Muktupāvels, without this,
we are missing the inner edge of the frame.
2021-04-22 06:45:28 -04:00
Matthias Clasen
f8dcda80cf theme: Fix solid-csd borders
The selectors did not apply anymore.
Based on a patch by Alberts Muktupāvels.
2021-04-22 06:45:28 -04:00
Matthias Clasen
01d81ffc17 window: Make resize border size independent
Deriving the resize border size from the shadows
carries the risk that we might end up with uneven
resize borders (or none at all, on some sides).

So, justs enforce that we have a big enough shadow
width on all sides.
2021-04-22 06:45:28 -04:00
Ulli Kehrle
c78ec37d83 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:56:30 +02:00
Matthias Clasen
a2cd21cab6 window: Tweak resize borders
Make windows resizable in the padding and border
area of the css box as well. This naturally makes
solid-csd borders work again.
2021-04-21 21:09:09 -04:00
Matthias Clasen
760e60fa04 window: Fix up resize borders
The invisible resize borders have been wider than they
should, for a while. Go back to a size close to what
we have in GTK3.

To summarize: resize borders will be at most 12 pixels
on each size, but never wider than the windows shadow.
The resize corners have 'legs' of 24 pixels where you
still get a corner resize cursor.

Fixes: #3856
2021-04-21 20:09:38 -04:00
John Renner
81914f466d Allow repeated selection extension on gktlistbox 2021-04-21 14:18:29 -07:00
Matthias Clasen
ebd8338795 Merge branch 'im-cursor-pos' into 'master'
imcontext: Fix cursor positions

Closes #3885

See merge request GNOME/gtk!3464
2021-04-21 17:43:12 +00:00
Matthias Clasen
11d637f869 Merge branch 'wip/oholy/placesview-default-location-regression' into 'master'
placesview: Open location even if mount was not found

Closes nautilus#1811

See merge request GNOME/gtk!3435
2021-04-21 12:22:17 +00:00
Emmanuele Bassi
b24fedda49 a11y: Update the labelled-by relation of GtkTreeExpander
Whenever we change the :child property, we need to update the
labelled-by relation.
2021-04-21 11:43:16 +01:00
Emmanuele Bassi
57cc2c4918 a11y: Set state on the GtkTreeExpander widget
Instead of setting it on its internal child.
2021-04-21 11:43:11 +01:00
Matthias Clasen
15483ac9df 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-21 06:28:52 -04:00
Matthias Clasen
142984cbf7 Merge branch 'untrusted-beep' into 'master'
x11: Don't beep on untrusted displays

Closes #3862

See merge request GNOME/gtk!3463
2021-04-21 10:12:39 +00:00
Emmanuele Bassi
8f9145109b a11y: Pair window:activate with window:deactivate signal
Orca needs both events in order to decide whether or not to subscribe to
other event/state changes in a window.
2021-04-21 10:22:20 +01:00
Matthias Clasen
5587ee0c30 x11: Don't beep on untrusted displays
This can trigger BadAccess, and we don't
want that.

Fixes: #3862
2021-04-20 21:42:57 -04:00
Matthias Clasen
99750ac7ed a11y: Realize notebook tabs when switching
We're not moving focus here, so we can't rely
on that to conjure the a11y objects into existence.
2021-04-20 20:35:22 -04:00
Alberts Muktupāvels
f89bad7f33 theme: fix solid-csd style
Move .solid-csd style out of .csd parent and adjust it so windows
look similar / same to GTK 3 windows:
- 4px padding.
- extra shadow.

https://gitlab.gnome.org/GNOME/gtk/-/issues/3879#note_1086351
https://gitlab.gnome.org/GNOME/gtk/-/issues/3879#note_1086377
2021-04-20 22:02:10 +03:00
Matthias Clasen
b97d0a3940 a11y: Avoid spurious selection changed events
Only send selection-changed events when we either
had a non-empty selection before, or have one now.

This should help orca speak the right things, and
not the wrong things.

Related: #3549
2021-04-20 13:23:56 -04:00
Emmanuele Bassi
639932ad8a a11y: Emit window:activate event
Orca uses the window:activate event type to track top levels, and avoid
being spammed by events coming from non-focused windows.
2021-04-20 17:24:13 +01:00
Matthias Clasen
1a944b2824 stackswitcher: Set accessible label properties
This makes the tabs in about dialogs come out as
'About', 'Credits', and 'System', instead of
'Tab', 'Tab', 'Tab'.
2021-04-19 22:11:55 -04:00
Matthias Clasen
ae83b79984 a11y: Emit focus events
Orca relies on these to keep track of the focus location,
ignoring the focused state. With this change, orca can
once again speak text in entries as I type.
2021-04-19 21:29:17 -04:00
Matthias Clasen
5f2c08cef1 a11y: Make things appear on focus in
We are starting with a pretty empty a11y object tree,
and we want orca to bring more of it into existence
by navigating the tree. But that only happens when we
send it events. Primarily focus events, which come in
from GTK via the platform_change mechanism. So realize
the context when we are sending platform_changes,
otherwise, orca never gets the mesage.
2021-04-19 20:39:32 -04:00
Matthias Clasen
119d0b666c Merge branch 'fix-uri-crash' into 'master'
Fix a possible crash in gtk_show_uri

Closes #3883

See merge request GNOME/gtk!3457
2021-04-19 21:09:44 +00:00
Matthias Clasen
ce2a433ca1 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:49:02 -04:00
Matthias Clasen
a455db01a0 a11y: Actually set accessible roles
With most context realization happening inside
GtkAtspiContext in response to D-Bus calls, the
code in gtk_widget_realize_at_context that sets
the role is not executed for most accessibles,
causing them to be stuck with the 'filler' role
that makes orca ignore them.

To fix this, split gtk_widget_realize_at_context
into the actual context realization (getting on
the bus) and the setting of widget-specific
properties, and do the latter part when the
widget is rooted.

This makes accerciser report proper roles for
entries and buttons. Orca still has an issue
with getting the hierarchy populated.
2021-04-19 19:22:20 +01:00
Matthias Clasen
9e8187bdc4 a11y: Track window states more closely
Orca ignores events unless the object is inside an object
with role window and states ACTIVE and SHOWING. To arrange
for this, introduce a new ACTIVE platform state, and set it
for windows when they are active.

This gets orca to be a lot more talkative.
2021-04-19 19:22:20 +01:00
Matthias Clasen
9fbd11e1be a11y: Add the root object to the cache
Not 100% sure this is necessary, but maybe it helps
to get orca up to speed.
2021-04-19 19:22:20 +01:00
Matthias Clasen
aa09737d4d atspicontext: Remove an unused field
We don't make any use of the cache field, so drop it.
2021-04-19 19:22:20 +01:00
Matthias Clasen
435ed3158c Merge branch 'wip/exalm/shader' into 'master'
gsk: Fix shader gresource paths

See merge request GNOME/gtk!3453
2021-04-19 18:01:44 +00:00
Pawan Chitrakar
72600516b9 Update Nepali translation
(cherry picked from commit 2a8fd6a488)
2021-04-19 16:00:38 +00:00
Pawan Chitrakar
fbc8317c5c Update Nepali translation
(cherry picked from commit 4e243d7d12)
2021-04-19 15:58:08 +00:00
Alexander Mikhaylenko
ae7f380396 gsk: Fix shader gresource paths
They were never updated after having been moved.
2021-04-19 20:01:33 +05:00
Piotr Drąg
2e031e47dd Update Polish translation 2021-04-18 12:44:35 +02:00
Emmanuele Bassi
dbe4543969 Merge branch 'gtksecurememory-updates' into 'master'
gtksecurememory: Request that secure memory not be dumped to disk

See merge request GNOME/gtk!3452
2021-04-17 23:46:38 +00:00
Jason Francis
b27ec5ebde meson: check for madvise() 2021-04-17 19:30:20 -04:00
Matthew Garrett
6622ebb310 gtksecurememory: Request that secure memory not be dumped to disk
Linux 3.4 added support for the MADV_DONTDUMP option to madvise(), which
requests that the covered memory not be included in coredumps. It makes
sense to use this to prevent cases where application crashes could
result in secrets being persisted to disk or included in dumps that are
uploaded to remote servers for analysis. I've avoided making this fatal
since there's a chance this code could be built on systems that have
MADV_DONTDUMP but run on systems that don't.
2021-04-17 19:29:42 -04:00
Matthias Clasen
1530c90e37 Merge branch 'a11y-debug' into 'master'
testatcontext: Print out platform changes

See merge request GNOME/gtk!3451
2021-04-17 16:39:20 +00:00
Matthias Clasen
a804e4bd8c a11y: Add more debug spew
This is in an attempt to figure out why orca won't speak.
2021-04-17 12:00:17 -04:00
Matthias Clasen
a04ce41799 testatcontext: Print out platform changes
This helps debugging what changes orca sees.
2021-04-17 12:00:11 -04:00
Matthias Clasen
5e3e1dd6ba Merge branch 'matthiasc/for-master' into 'master'
image, picture: Move pixbuf code to gdkpixbufutils

See merge request GNOME/gtk!3449
2021-04-16 23:51:10 +00:00
Matthias Clasen
379bb6c9f5 placesview: Fix server mount feedback
We weren't properly resetting the in-entry progress.
2021-04-16 19:34:24 -04:00
Matthias Clasen
3df3a0499f placesview: Fix mounting remote locations
This was broken by a stupid copy-paste error.
2021-04-16 19:17:37 -04:00
Matthias Clasen
0d308d09f3 mountoperation: Some cosmetics
Fix up the dialog minimally.
2021-04-16 19:05:14 -04:00
Matthias Clasen
1331d5cf97 cssimageurl: Remove direct pixbuf use
Rely on the gdkpixbufutils api that gives us
a paintable.
2021-04-16 18:27:40 -04:00
Matthias Clasen
91f3f5c63b image, picture: Move pixbuf code to gdkpixbufutils
This cleans up and moves the code to load files
while taking the scale into account. Along the way,
we drop the last uses of GdkPixbufAnimation, and
consolidate the pixbuf using code in one place.
2021-04-16 18:27:40 -04:00
Matthias Clasen
486a2c9651 Merge branch 'matthiasc/for-master' into 'master'
pixbufutils: Remove an unused function

See merge request GNOME/gtk!3447
2021-04-16 15:16:48 +00:00
Matthias Clasen
05af726446 Merge branch 'wayland-xdg-surface-setup' into 'master'
wayland: Don't duplicate xdg_surface setup code

See merge request GNOME/gtk!3191
2021-04-16 15:16:28 +00:00
Jonas Ådahl
36347b21e6 Merge branch 'wayland-parent-shadow-refactor' into 'master'
wayland: Avoid directly accessing shadow property of parent surface

See merge request GNOME/gtk!3190
2021-04-16 14:34:42 +00:00
David Keijser
db8bf5e7b9 wayland: Don't duplicate xdg_surface setup code 2021-04-16 16:23:16 +02:00
David Keijser
5bbdf3a807 wayland: Avoid directly accessing shadow property of parent surface 2021-04-16 16:13:07 +02:00
Matthias Clasen
08b101ace8 pixbufutils: Remove an unused function 2021-04-16 09:19:06 -04:00
Matthias Clasen
5e53c0473a Merge branch 'latest.glib.msvc' into 'master'
Fix builds against latest stable GLib with MSVC

See merge request GNOME/gtk!3443
2021-04-16 12:25:43 +00:00
Matthias Clasen
9d1e5aa0dc Merge branch 'fix-focus-unsetting' into 'master'
window: Fix deferred focus unsetting

Closes #3413

See merge request GNOME/gtk!3446
2021-04-16 11:47:44 +00:00
Matthias Clasen
4d19de4e03 window: Fix deferred focus unsetting
In commit 4a76abffd4, we deferred unsetting focus
and default until after the next draw, overlooking the
case where the focus is set to another widget before we
ever get to the unsetting.

Fixes: #3413
2021-04-16 07:35:26 -04:00
Chun-wei Fan
153019a794 GTK: Fix builds against latest stable GLib with MSVC
GLib-2.68.x now considers warning C4098 ('void' function returning a value) as
an error, so avoid doing that.
2021-04-16 11:39:24 +08:00
Chun-wei Fan
8df32e93be GSK: Fix builds against latest stable GLib with MSVC
GLib-2.68.x now considers warning C4098 ('void' function returning a value) as
an error, so avoid doing that.
2021-04-16 11:39:17 +08:00
Chun-wei Fan
14632e11da GDK: Fix builds against latest stable GLib with MSVC
GLib-2.68.x now considers warning C4098 ('void' function returning a value) as
an error, so avoid doing that.
2021-04-16 11:39:09 +08:00
Matthias Clasen
24cd05672e Merge branch 'im-context-event-leak' into 'master'
imcontext: Eat key events during preedit

See merge request GNOME/gtk!3440
2021-04-15 22:16:49 +00:00
Matthias Clasen
74a68a5803 Merge branch 'theme-fallback-fix' into 'master'
themes: Make fallback work a bit better

See merge request GNOME/gtk!3441
2021-04-15 21:31:09 +00:00
Matthias Clasen
9f6b3e179f themes: Make fallback work a bit better
One case we did not include in fd329e0ec5 is

Adwaita-dark -> Default:dark

It turns out that it is needed.
2021-04-15 17:09:46 -04:00
Matthias Clasen
20fb64704d 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 16:59:02 -04:00
Matthias Clasen
9b7f927b3c Merge branch 'demo-manpages' into 'master'
meson: only build demo manpages when demos are enabled

See merge request GNOME/gtk!3438
2021-04-15 11:15:24 +00:00
Matthias Clasen
eb3df6a2e8 Merge branch 'theme-icon-filter-fixes' into 'master'
theme: Use -gtk-icon-filter for full-color icons

See merge request GNOME/gtk!1990
2021-04-15 11:12:28 +00:00
nana-4
c6483d431f theme: Use -gtk-icon-filter for full-color icons
Not for symbolic icons.

Don't apply `-gtk-icon-filter: opacity(0.5);` to the symbolic icons as
they already have the "gray" colors indicating the disabled state.
Symbolic icons can be styled using the `color` property.

Also remove the obsolete comment.
2021-04-15 18:39:08 +09:00
Eli Schwartz
e5b0d225de 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:55:03 -04:00
Matthias Clasen
d1d009b491 Merge branch 'x11-quiet-exit' into 'master'
x11: Be quiet on exit by default

See merge request GNOME/gtk!3436
2021-04-14 00:32:05 +00:00
Matthias Clasen
4465ee5414 Merge branch 'ngl-crash' into 'master'
ngl: Fix a rare assertion violation

Closes #3853

See merge request GNOME/gtk!3434
2021-04-13 22:02:44 +00:00
Matthias Clasen
6f11165dd1 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 14:52:48 -04:00
Ondrej Holy
ddeabc7e19 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-13 17:33:03 +02:00
Matthias Clasen
f5d90826f3 Merge branch 'flatpak-highlight' into 'master'
flatpak: Include highlight in gtk4-demo flatpak

Closes #3867

See merge request GNOME/gtk!3433
2021-04-13 11:38:45 +00:00
Matthias Clasen
11154ba119 flatpak: Include highlight in gtk4-demo flatpak
Include the highlight utility to make syntax
highlighting work in gtk4-demo. This requires
building its dependencies as well, boost and lua.
2021-04-12 23:55:11 -04:00
Matthias Clasen
c66b030427 ngl: Fix a rare assertion violation
When we clean up the uniform allocations after a frame,
it can happen that our space requirements actually increase,
due to padding that depends on the order of allocations.

Instead of asserting that it doesn't happen, just make
it work by growing our allocation.

Fixes: #3853
2021-04-12 22:53:48 -04:00
Matthias Clasen
0c3dd0cf30 Merge branch 'testsuite-asserts' into 'master'
testsuite: Reduce the use of g_assert

Closes #3864

See merge request GNOME/gtk!3432
2021-04-13 02:46:07 +00:00
Matthias Clasen
4164abd9f7 build: Quiet the compiler
Don't use -Wnull-dereference when assertions are
disabled, since that causes the compiler to see
NULL everywhere.
2021-04-12 22:11:05 -04:00
Emmanuele Bassi
b0990aa8e2 wayland: Build with G_DISABLE_ASSERT 2021-04-12 21:26:02 -04:00
Emmanuele Bassi
a871a1bdb5 build: Don't append multiple flags as a string
The gtk_debug_cflags variable is an array, with each argument stored in
a separate string; if we add multiple arguments inside the same string
we break the escaping rules.

Fixes: #3864
2021-04-12 21:23:57 -04:00
Emmanuele Bassi
31e08d4629 gsk/ngl: Build with G_DISABLE_ASSERT enabled 2021-04-12 21:23:18 -04:00
Matthias Clasen
f98353c20b Force g_test_init to cooperate
Change all g_test_init calls in the testsuite
to avoid the macro, so they work regardless of
G_DISABLE_ASSERT.
2021-04-12 21:22:46 -04:00
Matthias Clasen
13ece4ee9b Make gtk_test_init work without assertions
The g_test_init macro 'helpfully' refuses to work when
assertions are disabled. So we just use the function.
2021-04-12 21:22:46 -04:00
Matthias Clasen
6e40f4f357 Remove assertions in tests 2021-04-12 21:22:46 -04:00
Matthias Clasen
ecfba2d31b Inspector: Fix a possible undefined use 2021-04-12 21:22:46 -04:00
Matthias Clasen
367dfee36e Fix unused variable warnings
These happen for variables which are only used
in assertions, when assertions are disabled.
2021-04-12 21:22:46 -04:00
Matthias Clasen
5e7b5fe085 gtk-demo: Avoid compiler warnings without assertions
Avoid an unused variable warning.
2021-04-12 21:22:46 -04:00
Matthias Clasen
9d3aa2cfce gsk: Avoid compiler warnings without assertions
Disabling assertions was provoking some unused variable
warnings from the compiler. Avoid these.
2021-04-12 21:22:46 -04:00
Matthias Clasen
8c156e6b80 testsuite: Reduce the use of g_assert
Stop using g_assert() in the gtk tests.
2021-04-12 21:22:46 -04:00
Matthias Clasen
4d1075a082 testsuite: Reduce the use of g_assert
Stop using g_assert() in the gsk tests.
2021-04-12 21:22:46 -04:00
Matthias Clasen
442f485591 Merge branch 'f16c.msvc' into 'master'
Fix F16C build/runtime detection on Visual Studio

See merge request GNOME/gtk!3429
2021-04-12 20:35:10 +00:00
Matthias Clasen
74238b5429 Merge branch 'testsuite-asserts' into 'master'
testsuite: Reduce use of g_assert

See merge request GNOME/gtk!3431
2021-04-12 12:47:09 +00:00
Matthias Clasen
f9fa92766b testsuite: Reduce use of g_assert
Stop using g_assert() in the css tests.
2021-04-12 08:33:41 -04:00
Matthias Clasen
90d187894d testsuite: Reduce use of g_assert
Stop using g_assert() in the reftests.
2021-04-12 08:30:56 -04:00
Matthias Clasen
03db2690e2 testsuite: Reduce use of g_assert
Stop using g_assert() in the gdk tests.
2021-04-12 08:18:00 -04:00
Chun-wei Fan
65b35457fd meson.build: Check for F16C on 32-bit Visual Studio
It is also possible to enable F16C instructions on 32-bit Visual Studio builds,
so also check for the compiler's ability to build F16C code on Visual Studio
32-bit instead of just bailing out.
2021-04-12 18:13:42 +08:00
Chun-wei Fan
d5ced21264 gsk/ngl/fp16.c: Implement runtime F16C detection on MSVC
We need to use __cpuid() to check for the presence of F16C instructions on
Visual Studio builds, and call the half_to_float4() or float_to_half4()
implementation accordingly, as the __builtin_cpu...() functions are strictly
for GCC or CLang only.

Also, since __m128i_u is not a standard intrisics type across the board, just
use __m128i on Visual Studio as it is safe to do so there for use for
_mm_loadl_epi64().

Like running on Darwin, we cannot use the alias __attribute__ as __attribute__
is also for GCC and CLang only.
2021-04-12 18:13:42 +08:00
Chun-wei Fan
6d6c8c59eb meson.build: Improve F16C detection on Visual Studio
The __builtin_cpu...() intrisics are strictly for GCC/CLang-based compilers, so
don't use them in the checking code on Visual Studio.  The test code will still
compile without this change, but will certainly fail if we want it to link.
2021-04-12 18:13:42 +08:00
Matthias Clasen
46ed7540b2 Merge branch 'ngl-shadow-fixes' into 'master'
ngl: Fix outset blurred shadows

See merge request GNOME/gtk!3427
2021-04-12 05:07:29 +00:00
Matthias Clasen
3ad56a762f Merge branch 'grouped-toggle-fix' into 'master'
togglebutton: Fix expected group behavior

See merge request GNOME/gtk!3425
2021-04-12 02:40:43 +00:00
Matthias Clasen
21a1a40555 Merge branch 'shadow-reduction' into 'master'
gsk: Don't overshadow

See merge request GNOME/gtk!3419
2021-04-12 02:39:55 +00:00
Matthias Clasen
849692b24b ngl: Fix unevenly scaled shadows
Ensure that we don't cut them off at the edges.
2021-04-11 22:35:02 -04:00
Matthias Clasen
f3bf4e4876 ngl: Don't slice unsliceable shadows
When the corners are too big to make slicing work,
don't do it, since it leads to broken results.
2021-04-11 22:10:33 -04:00
Matthias Clasen
46270d3dcd ngl: Fix a case of flipped shadow
In the non-sliced case, we were rendering the shadow
upside down.
2021-04-11 22:10:33 -04:00
Matthias Clasen
da6096faaf ngl: Add code to dump shadows
This can be helpful in understanding shadow bugs.
2021-04-11 21:13:47 -04:00
Matthias Clasen
2a7b5a5156 Merge branch 'matthiasc/for-master' into 'master'
menubutton: Propagate focus-on-click

See merge request GNOME/gtk!3424
2021-04-11 22:41:26 +00:00
Matthias Clasen
233e662294 togglebutton: Fix expected group behavior
The expectation is that a grouped button stays
active when you click it. Grouped check buttons
behave this way, and grouped toggle buttons should
too.
2021-04-11 18:29:53 -04:00
Matthias Clasen
ae41697d83 node-editor: Make header buttons not steal focus
This is rarely useful, and is confusing when it
happens as side-effect of dragging the window.
2021-04-11 15:32:15 -04:00
Matthias Clasen
e2fb59798e icon browser: Make header buttons not steal focus
This is rarely useful, and is confusing when it
happens as side-effect of dragging the window.
2021-04-11 15:32:15 -04:00
Matthias Clasen
d0fc3e166d widget-factory: Make header buttons not steal focus
This is rarely useful, and is confusing when it
happens as side-effect of dragging the window.
2021-04-11 15:32:15 -04:00
Matthias Clasen
e4ce46e75f gtk-demo: Make header buttons not steal focus
This is rarely useful, and is confusing when it
happens as side-effect of dragging the window.
2021-04-11 15:32:15 -04:00
Matthias Clasen
e2420f62fe menubutton: Propagate focus-on-click
Propagate the focus-on-click setting to the button
inside, so that setting menubuttons as !focus-on-click
works as expected. This helps for menubuttons in
header bars, where dragging on the button will otherwise
steal focus from the content.
2021-04-11 15:32:15 -04:00
Yuri Chornoivan
6712106c25 Update Ukrainian translation 2021-04-11 18:39:40 +00:00
Matthias Clasen
5b55138729 Merge branch 'matthiasc/for-master' into 'master'
some small optimizations

See merge request GNOME/gtk!3423
2021-04-11 18:23:54 +00:00
Matthias Clasen
1d9c581f10 ngl: Allow passing bounds to update_clip
update_clip only uses the bounds of the node that
we are currently passing. This opens the door to
updating the clip while handling a single node.
2021-04-11 12:54:17 -04:00
Matthias Clasen
6bfb57db16 ngl: Small optimization for shadows
When 9-slicing shadows, omit the center tile when it is
entirely contained in the outline (that is not always
the case, depending on corners and offsets).
2021-04-11 12:54:07 -04:00
Matthias Clasen
f8f2f2944f roundedrect: Speed up contains_rect and friends
gsk_rounded_rect_contains_rect was calling
gsk_rounded_rect_contains_point, which potentially
checks all four corners, for a total of up to 16
corner/point checks. But there is no need to do
more than 4 such checks to answer the question.
2021-04-11 12:52:30 -04:00
Matthias Clasen
aaf17fd3d0 ngl: Small optimization
We really want equality here.
2021-04-11 12:50:50 -04:00
Matthias Clasen
678e6fc6d6 nodeeditor: Make the help window wide enough
Make the help window wide enough to show the
tables without wrapping.
2021-04-11 12:50:34 -04:00
Matthias Clasen
fcf39170e1 Merge branch 'media-memory-leak' into 'master'
media: Fix a memory leak

See merge request GNOME/gtk!3420
2021-04-10 13:42:41 +00:00
Matthias Clasen
187072c3fa media: Fix a memory leak
This was introduced in e7dc82fa32.
2021-04-10 09:02:59 -04:00
Matthias Clasen
e6599c6c4f gsk: Don't overshadow
Reduce the cairo shadows to the same size as their GL brethren.
2021-04-09 21:47:55 -04:00
Matthias Clasen
87a8ff90d6 Merge branch 'popover-list-lockup' into 'master'
window: Defer focus setting until after paint

Closes #3725

See merge request GNOME/gtk!3417
2021-04-10 00:34:24 +00:00
Matthias Clasen
4a76abffd4 window: Defer focus setting until after paint
Commit 3dbf5038fa tried to defer focus changes
until after rendering is done. But it failed to do so, since
the toplevel ::render handler is still before rendering of
popups that are attached to that toplevel. To do this
properly, we need to do it in the AFTER_PAINT frame clock
phase.

Fixes: #3725
2021-04-09 19:44:10 -04:00
Matthias Clasen
715449695c Merge branch 'ngl-coloring-underlines' into 'master'
Optimize underlines in text

See merge request GNOME/gtk!3414
2021-04-09 15:36:21 +00:00
Matthias Clasen
d15b0afca9 Merge branch 'no-scroll-cursor' into 'master'
scrolledwindow: Stop using scroll cursors

See merge request GNOME/gtk!3416
2021-04-09 13:30:36 +00:00
Matthias Clasen
0d6bbc035d Merge branch 'ebassi/ci-docs' into 'master'
ci: Drop the split Fedora images

See merge request GNOME/gtk!3415
2021-04-09 12:35:49 +00:00
Matthias Clasen
9313d4b6b4 scrolledwindow: Stop using scroll cursors
We used to override cursor to use all-scroll while the
content is being scrolled. Unfortunately, there is several
problems with this:
- It is really only expected certain devices, and we don't
  have the device information on Wayland
- With the way cursor setting works in GTK4, non-NULL cursors
  of the content (eg the text views ibeam) win, making the
  scroll cursor not show up
- Under X11, we seem to miss scroll end events and then
  the scroll cursor gets stuck
Therefore, just remove this feature.
2021-04-09 08:26:09 -04:00
Emmanuele Bassi
ed412f43d1 ci: Drop the split Fedora images
Now that we don't need the whole of Pandoc to build our documentation,
we can go back to a single Fedora image for our CI.
2021-04-09 12:28:08 +01:00
Matthias Clasen
bfe4aea981 ngl: Add a program change counter
Count how often we change programs during a frame.
2021-04-09 00:52:18 -04:00
Matthias Clasen
0caa28c1de ngl: Optimize underlines in text
Opportunistically use the coloring program for
drawing underlines instead of the color program.
This avoids program changes in the middle of
text.

For the Emoji text scrolling benchmark, this reduces
the program changes per frame from > 1000 to around 100.
2021-04-08 23:37:51 -04:00
Matthias Clasen
d8ba4b4114 ngl: Reserve a pixel in texture atlases
This will be used for coloring from the texture.
2021-04-08 23:34:37 -04:00
Matthias Clasen
e7963945bb ngl: Fix an oversight
All the rest of debug spew goes to stderr here.
2021-04-08 23:34:37 -04:00
Matthias Clasen
e4a6101ae0 gtk-demo: Make one text scroll benchmark harder
Add underlines into the mix with the Emoji heavy
text, to see if we can optimize lines.
2021-04-08 23:34:36 -04:00
Matthias Clasen
5d0a3bd4cb Merge branch 'half-float' into 'master'
ngl: Use fp16 for colors

See merge request GNOME/gtk!3405
2021-04-09 03:34:05 +00:00
Matthias Clasen
1c2238cc2a Merge branch 'font-fallback-fix' into 'master'
wayland: Improve font setting fallback more

Closes #3838

See merge request GNOME/gtk!3412
2021-04-08 11:24:09 +00:00
Matthias Clasen
2d7169fd5f Work around compiler shortcomings on macOS
alias attributes don't work on Darwin, so
do without.
2021-04-07 22:38:47 -04:00
Matthias Clasen
885a6b8ebc gsk: Add runtime checks for F16C
Use an IFUNC resolver to determine whether we can use
intrinsics for FP16 conversion. This requires the functions
to be no longer inline.

Sadly, it turns out that __builtin_cpu_supports ("f16c")
doesn't compile on the systems where we want it to prevent
us from getting a SIGILL at runtime.
2021-04-07 22:21:23 -04:00
Matthias Clasen
9d81c129fc Add an option to disable F16C
And add a compile time check for the presence of this
CPU feature.
2021-04-07 22:21:23 -04:00
Matthias Clasen
38c6fe2ce4 Move color conversion up
Doing the color conversion early lets us reuse
the results whenever we do more than one draw
per node.
2021-04-07 21:30:43 -04:00
Matthias Clasen
7fe7b7ac7d ngl: Use a constant for (fp16)-1
No need to convert that again for every glyph.
2021-04-07 21:30:43 -04:00
Matthias Clasen
ae7f52d301 ngl: Reduce vertex storage
We only have one shader that uses the color2 attribute,
and it doesn't use the uv attribute, so save vertex
memory by putting those in the same space.

This reduce the per vertex space from 32 to 24 bytes.
2021-04-07 21:30:43 -04:00
Matthias Clasen
8b1fcb58e8 ngl: Use fp16 for colors
This reduces the size of our Vertex struct from
48 to 32 bytes. It would be nicer if we could store
the colors in fp16 format in the rendernodes, and
avoid conversion here. But this is still good.
2021-04-07 21:30:43 -04:00
Matthias Clasen
cce36ae701 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 19:24:09 -04:00
Matthias Clasen
2f0a02eecb Merge branch 'wip/carlosg/stuck-frames' into 'master'
surface: Always set PHASE_PAINT as pending when updates are scheduled

Closes #3750

See merge request GNOME/gtk!3411
2021-04-07 23:18:25 +00:00
Carlos Garnacho
07167fdf22 surface: Always set PHASE_PAINT as pending when updates are scheduled
At times (most often when closing subsurfaces that are scheduling
relayouts) the PHASE_PAINT handling gets broken with the following
sequence:

1. Surface receives wl_callback.done for the previous frame.
   Surface is thawed.
2. A new update on the surface is scheduled. PHASE_PAINT is
   requested directly on the frame clock. priv->pending_phase is
   left unset in the surface.
3. Surface gets frozen
4. Frame clock processes the update scheduled at 2. The surface
   is frozen, so paint is prevented. PHASE_PAINT is considered
   handled.
5. Compositor emits wl_callback.done again. Surface is thawed.
6. At this point the machinery is off
   - The surface didn't paint but has pending update regions
   - priv->draw_needed is set in the toplevel and other portions
     of the widget tree
   - So queueing redraws is ineffective at eventually calling
     gdk_surface_schedule_update() again on the toplevel surface.
   - We don't paint anymore, so this broken state is not flushed
     until other subsurface changes manage to schedule the missing
     update.

To fix this, always set PHASE_PAINT in priv->pending_phase when
doing gdk_surface_schedule_update(). If the frame clock turns
around before the surface is thawed, it will still be waiting to
be processed the next iteration.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3750
2021-04-07 23:06:06 +02:00
Emmanuele Bassi
99c7ba7840 Install documentation in the appropriate place
We're already installing each reference into its own namespaced
directory, so we don't need to add further path elements.

Additionally, with the changes in:

  https://gitlab.gnome.org/GNOME/devhelp/-/merge_requests/20
  https://gitlab.gnome.org/GNOME/gi-docgen/-/merge_requests/54

we can browse the GTK API references in DevHelp.
2021-04-07 14:57:31 +01:00
Matthias Clasen
5710df685b Merge branch 'font-settings-fallback-4' into 'master'
wayland: Improve font setting fallback

See merge request GNOME/gtk!3407
2021-04-07 13:21:38 +00:00
Matthias Clasen
62f10b1b8f 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:50:14 -04:00
Matthias Clasen
d50d55228b Merge branch 'textview-last-line' into 'master'
textview: Fix a problem with the last line

Closes #3835

See merge request GNOME/gtk!3403
2021-04-06 16:15:55 +00:00
Matthias Clasen
288a5d4151 textview: Fix a problem with the last line
Sometimes, we missed the last line for display.

Fixes: #3835
2021-04-06 11:09:05 -04:00
Matthias Clasen
748b8497c9 Merge branch 'matthiasc/for-master' into 'master'
window: Actually enable the inspector by default

Closes #3831

See merge request GNOME/gtk!3401
2021-04-05 19:05:15 +00:00
Matthias Clasen
303ff60d5e modelbutton: Avoid a crash
We may not have a popover menu ancestor. The check for
this was forgotten in one of the branches here.

Fixes: #3831
2021-04-05 14:06:42 -04:00
Matthias Clasen
b79eb55b34 window: Actually enable the inspector by default
427d216081 changed the default in the schema,
but didn't handle cases where the schema isn't found.
2021-04-05 11:54:37 -04:00
Matthias Clasen
0ca573142a Merge branch 'matthiasc/for-master' into 'master'
textlayout: Remove some unnecessary code

See merge request GNOME/gtk!3400
2021-04-05 13:19:29 +00:00
Matthias Clasen
a1ece16143 ngl: Fix an oversight
We were special-casing 2D affine transforms,
but overlooked even simpler transforms.
2021-04-05 08:47:53 -04:00
Matthias Clasen
2e18f1b6e3 textlayout: Remove an unused function 2021-04-05 08:47:53 -04:00
Matthias Clasen
6cf712591f textlayout: Avoid allocations for line iteration
No need to collect the lines firs, and allocate memory
for that. We can just iterate over them right away.
2021-04-04 23:42:58 -04:00
Matthias Clasen
b32cd5d328 textlayout: Introduce some locals
No need to call _gtk_text_buffer_get_btree over and over.
2021-04-04 22:44:09 -04:00
Matthias Clasen
2af99bd65e textlayout: Create the cursor snapshot on demand
We don't need it all the time.
2021-04-04 22:27:53 -04:00
Matthias Clasen
5b0ea70d1c textattributes: Small docs fix 2021-04-04 22:27:53 -04:00
Matthias Clasen
d719a3d877 textbtree: Return tags in a GPtrArray
One of the callers prefers that, it lets us avoid
copying the array in one place, and generally makes
for better code.
2021-04-04 22:27:53 -04:00
Matthias Clasen
b0df8910ba textlayout: Only get selection color once
No need to do this for every paragraph that is
inside the selection.
2021-04-04 14:20:25 -04:00
Matthias Clasen
5b8bf04035 texttag: Just use qsort
No point in trying to optimize this.
2021-04-04 14:20:25 -04:00
Matthias Clasen
58e44e296f textbtree: Inline node data handling 2021-04-04 14:20:25 -04:00
Matthias Clasen
0334d002c0 textbtree: Speed up _gtk_text_btree_find_line_top
Another place where we can avoid allocating a stack
piecemeal.
2021-04-04 14:20:25 -04:00
Matthias Clasen
d731ce49ad textbtree: Don't opencode realloc
We can just use g_realloc here.
2021-04-04 14:20:25 -04:00
Matthias Clasen
a93614409e textbtree: Speed up _gtk_text_line_char_index
No need to allocate a stack piecemeal here.
2021-04-04 14:20:25 -04:00
Matthias Clasen
214e2d14be textbtree: Avoid malloc in one place 2021-04-04 14:20:25 -04:00
Matthias Clasen
67ee6b2740 textlayout: Don't call render_para too much
render_para produces no nodes for an empty paragraph.
Don't call it over and over for those.
2021-04-04 14:20:25 -04:00
Matthias Clasen
07a3fb833c textlayout: Remove some unnecessary code
The same field is set again 2 lines down.
2021-04-04 14:20:25 -04:00
Chao-Hsiung Liao
1c419f762b Update Chinese (Taiwan) translation
(cherry picked from commit 3d3912d7f4)
2021-04-03 23:54:29 +00:00
Matthias Clasen
8d6c7b81e9 Merge branch 'matthiasc/for-master' into 'master'
gsk: Rename resource paths

See merge request GNOME/gtk!3399
2021-04-03 20:14:29 +00:00
Matthias Clasen
fcaadf6724 Merge branch 'dotted-lines3' into 'master'
Modernize error underlines

See merge request GNOME/gtk!3398
2021-04-03 20:14:13 +00:00
Matthias Clasen
ff38d8cdc0 Modernize error underlines
Implement PANGO_UNDERLINE_ERROR as a dotted line, instead of
squiggly, which looks quite dated.
2021-04-03 13:52:56 -04:00
Matthias Clasen
900a4e4d31 gsk: Move shader resources
Move the resources of each renderer to its subdirectory.
We've previously done that for the ngl renderer, but it
is better to be consistent and do it for all the renderers.
2021-04-03 08:24:58 -04:00
Matthias Clasen
ee63b84b6a gsk: Rename resource paths
Make the shaders of the gl renderer live under
/org/gtk/libgsk/gl. This is purely cosmetic.
2021-04-03 08:10:58 -04:00
Matthias Clasen
2f1ff307da Merge branch 'matthiasc/for-master' into 'master'
node test: Improve --generate

See merge request GNOME/gtk!3397
2021-04-03 03:20:17 +00:00
Matthias Clasen
a8e8e04496 settings: Make font-size changes apply immediately
We need to invalidate the style when font-size changes,
because we propagate this value through the initial
value of the CSS font-size property, and it will not
be recomputed otherwise.
2021-04-02 23:04:09 -04:00
Matthias Clasen
91bcf6f0ba immulticontext: Unset client widget on delegate change
Forgetting to do so was causing the Wayland im context
to leave behind a dead event controller. This was showing
up as a crash when closing the inspector after changing
the im-module property of a GtkText widget. The crash
was delayed until closing the inspector because the
inspector keeps a ref on the event controllers of the
currently shown widget.
2021-04-02 22:24:19 -04:00
Matthias Clasen
a228b2de64 imwayland: Name event controllers
This helps with debugging.
2021-04-02 22:24:00 -04:00
Matthias Clasen
cb18437908 widget-factory: Name an event controller
This helps with debugging.
2021-04-02 22:23:34 -04:00
Matthias Clasen
23dab885cd text: Name all event controllers
This helps with debugging.
2021-04-02 22:23:03 -04:00
Matthias Clasen
e7284c23da inspector: Support copying nodes to clipboard
Add a button that copies the serialization of the
selected node to the clipboard.
2021-04-02 21:38:14 -04:00
Matthias Clasen
1e1f199b56 node-editor: Support pasting the image
Add a button that copies the image to the clipboard.
2021-04-02 21:24:59 -04:00
Matthias Clasen
efb5e793a4 nodeparser: Change the serialization
Arrange things so that non-child parameters
are always printed before the children. This
greatly helps with readability, which really
suffers when there's hundreds of lines of indented
children between the node start and its parameters.

Update all affected tests.
2021-04-02 20:38:32 -04:00
Matthias Clasen
f2edf40e48 node test: Improve --generate
This is a pet peeve of mine: When we call
g_test_init() before handling --generate,
the random seed spew pollutes the output.
Highly annoying. I've fixes many test binaries
over the years, but more keep popping up.
2021-04-02 20:35:39 -04:00
Matthias Clasen
7cb99a0866 Merge branch 'fix-downscaled-textures' into 'master'
ngl: Fix downscaled textures

See merge request GNOME/gtk!3395
2021-04-03 00:18:48 +00:00
Matthias Clasen
36da7c3075 Merge branch 'matthiasc/for-master' into 'master'
comboboxtext: Remove misleading docs

Closes #3824

See merge request GNOME/gtk!3396
2021-04-03 00:04:36 +00:00
Matthias Clasen
a3b69f1101 Merge branch 'fix-initial-font-selection' into 'master'
fontchooser: Fix initial font selection

Closes #3687

See merge request GNOME/gtk!3392
2021-04-02 23:45:59 +00:00
Matthias Clasen
9f2d1ff264 comboboxtext: Remove misleading docs
The entry is no longer accessible.
The docs were outdated.

Fixes: #3824
2021-04-02 19:44:30 -04:00
Matthias Clasen
8d603dfe99 ngl: Avoid huge intermediate textures
Instead of rendering the unclipped child to a texture
(and risking blowing the texture size limit, and bad
downscaling), just render the clipped region, and live
with the fact that we can't cache the rendered texture.

This avoid bad artifacts when scrolling long textviews
in rounded clips.
2021-04-02 19:33:44 -04:00
Matthias Clasen
3ff04976e3 ngl: Plug a memory leak
This was introduced in f9457af128.
2021-04-02 18:41:53 -04:00
Matthias Clasen
54ff4fd45f ngl: Fix downscaled textures
It is not pretty, but at least it works now.
2021-04-02 18:33:01 -04:00
Matthias Clasen
0d135d90f0 Merge branch 'flat-button-activating' into 'master'
button: Style .keyboard-activating on frameless buttons

See merge request GNOME/gtk!3394
2021-04-02 18:50:16 +00:00
Chris Mayo
ffa9814dd0 button: Style .keyboard-activating on frameless buttons
The use of the keyboard-activating CSS class for buttons was added
in [1], but the style did not apply to buttons with has-frame=FALSE.

[1] 00923615f4 ("button: Add back visual feedback for keynav", 2021-04-01)
2021-04-02 19:24:51 +01:00
Nathan Follens
a2fec9134b Update Dutch translation
(cherry picked from commit a356bf6fac)
2021-04-02 18:09:34 +00:00
Matthias Clasen
8caadaf404 fontchooser: Fix initial font selection
The change in 740559a54f to populate the list incrementally
broke initial font selection. Fix that, by trying to select
until the incremental filling is done.

Fixes: #3687
2021-04-02 01:06:23 -04:00
Matthias Clasen
469228fcd7 Merge branch 'theme-reorg' into 'master'
Reorganize our themes

See merge request GNOME/gtk!3079
2021-04-02 03:02:49 +00:00
Matthias Clasen
fd329e0ec5 Make theme fallback working with the new names
Since we are likely going to see theme names like
Adwaita and HighContrast, make fallback work as follows:

Adwaita -> Default
Adwaita:dark -> Default:dark
HighContrast -> Default:hc
HighContrast:dark -> Default:hc-dark
HighContrastInverse -> Default:hc-dark

Other themes will fall back to Default, as before.
2021-04-01 22:02:38 -04:00
Matthias Clasen
7f4041ec30 Merge branch 'matthiasc/for-master' into 'master'
testsuite: Sort gsk compare tests

See merge request GNOME/gtk!3389
2021-04-02 00:38:55 +00:00
Matthias Clasen
5cb5bdc4eb testsuite: Sort gsk compare tests
Easier to find things that way.
2021-04-01 20:07:13 -04:00
Matthias Clasen
08913deba5 Add some more gsk tests
The css-background test contains a node pattern that
is optimized in the ngl renderer.
2021-04-01 20:06:40 -04:00
Matthias Clasen
aceeef47f4 Add one more compose test 2021-04-01 20:06:40 -04:00
Matthias Clasen
ddda0ca1db Merge branch 'button-activate-feedback' into 'master'
button: Add back visual feedback for keynav

Closes #3813

See merge request GNOME/gtk!3390
2021-04-01 23:36:32 +00:00
Matthias Clasen
00923615f4 button: Add back visual feedback for keynav
We lost the visual feedback for activating a button
via Space or Enter when the :active pseudo-state became
managed. Bring it back with a style class.

Fixes: #3813
2021-04-01 18:38:11 -04:00
Matthias Clasen
63945bc408 Merge branch 'matthiasc/for-master' into 'master'
Add one more compose test

See merge request GNOME/gtk!3388
2021-04-01 20:50:04 +00:00
Matthias Clasen
076f79745b Add one more compose test 2021-04-01 16:32:30 -04:00
Matthias Clasen
8e9effcc1e Merge branch 'us-intl-compose' into 'master'
Revert Compose sequence changes

Closes #3807

See merge request GNOME/gtk!3386
2021-04-01 20:01:06 +00:00
Matthias Clasen
7f4522a3f1 Add more compose tests
Test the sequences whose demise made people
unhappy.
2021-04-01 15:32:32 -04:00
Matthias Clasen
f98abe4400 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:31:21 -04:00
Emmanuele Bassi
2ee8f676c3 Merge branch 'builder-tag' into 'master'
docs: Escape tags in GtkBuilder description

See merge request GNOME/gtk!3385
2021-04-01 18:49:38 +00:00
Chris Mayo
7216f71825 docs: Escape tags in GtkBuilder description
Fixes the tags and the rest of the gi-docgen created HTML page not being
visible in a browser.
2021-04-01 19:21:57 +01:00
Matthias Clasen
0bf3e4c25b Drop Adwaita and HighContrast themes
These themes will reappear in libadwaita in due course.
2021-04-01 12:39:30 -04:00
Matthias Clasen
e964e176f9 widget-factory: Use the new themes
Update the Style menu to switch between the variants
of the Default theme.
2021-04-01 12:27:35 -04:00
Matthias Clasen
8938b09bc9 Change the default theme to "Default"
We are not shipping Adwaita anymore.
2021-04-01 12:27:35 -04:00
Matthias Clasen
3654bcfbe8 Make the theme variants available as themes
This makes it easier to implement the theme switching
in widget-factory, since we don't have a variant setting.
2021-04-01 12:27:26 -04:00
Matthias Clasen
0dcf95b898 Reorganize our themes
Rename the included theme to Default, with 4 variants:
light, dark, hc, hc-dark. This replaces Adwaita,
Adwaita:dark, HighContrast and HighContrastInverse.
We still make the themes available under these names,
and we still set up Adwaita-dark and HighContrastInverse
as the dark variants of Adwaita and HighContrast.

The unification of the theme variants under Default
is not quite perfect; it would be nice to merge
the assets/ and assets-hc/ subdirectories and render
all assets from a single svg file.
2021-04-01 11:42:17 -04:00
Benjamin Otte
405fab8b36 Merge branch 'wip/otte/for-master' into 'master'
snapshot: scale border widths when appending border nodes

Closes #3819

See merge request GNOME/gtk!3384
2021-04-01 15:10:50 +00:00
Benjamin Otte
ef455f5c85 snapshot: Move sanity checks to a better place
Fixes cases where the sanity checks would reject valid code, like when
using GL shaders on a scaled transform.

Fixes #3819
2021-04-01 16:53:33 +02:00
Benjamin Otte
05e4cd1579 snapshot: scale border widths when appending border nodes
Found by Matthias on IRC while arguing about GtkSnapshot being too
complicated.
2021-04-01 16:37:43 +02:00
Matthias Clasen
0ea96e3b0c Merge branch 'filechooser-signal-disconnect' into 'master'
filechooserwidget: Disconnect settings signal on dispose

See merge request GNOME/gtk!3383
2021-04-01 14:25:08 +00:00
Carlos Garnacho
1e9e7bf0d9 Merge branch 'wip/exalm/overshoot-changes' into 'master'
scrolledwindow: Cancel overshoot on dimension changes

Closes #3752

See merge request GNOME/gtk!3300
2021-04-01 12:11:15 +00:00
Alexander Mikhaylenko
d7a5dedd4f 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:30 +05:00
Rafał Dzięgiel
2e65416270 filechooserwidget: Reduce code duplication for disconnecting settings signal
Instead of getting current display before calling settings signal removal,
do it inside remove function and only if there is a signal connection to remove.
2021-04-01 09:36:23 +02:00
Rafał Dzięgiel
13c22e4e2f filechooserwidget: Disconnect settings signal on dispose
Settings signal was not being disconnected on dispose causing
application crash when user changed icon theme after dialog disposal.
2021-04-01 09:28:37 +02:00
Matthias Clasen
65a061f3c2 Merge branch 'ebassi/broadway-docs' into 'master'
docs: Update the Broadway instructions

See merge request GNOME/gtk!3380
2021-03-31 21:42:59 +00:00
Matthias Clasen
fc63e6856f Merge branch 'ebassi/docs-links' into 'master'
docs: Update the links to the docs of GTK dependencies

Closes #3817

See merge request GNOME/gtk!3381
2021-03-31 21:42:49 +00:00
Matthias Clasen
94747d53eb Merge branch 'offscreen-fixes' into 'master'
Offscreen fixes

See merge request GNOME/gtk!3379
2021-03-31 21:27:18 +00:00
Emmanuele Bassi
7bfff6c51e docs: Update the links to the docs of GTK dependencies
Use docs.gtk.org where appropriate.

Fixes: #3817
2021-03-31 20:51:27 +01:00
Emmanuele Bassi
3fdedce8f6 docs: Update the Broadway instructions
The Broadway server binary is now versioned, and it's not compatible
with the GTK3 server.
2021-03-31 20:06:54 +01:00
Matthias Clasen
5f0fe09423 Merge branch 'ebassi/for-master' into 'master'
Update the gi-docgen repository

See merge request GNOME/gtk!3352
2021-03-31 11:34:56 +00:00
Benjamin Otte
9e402fa064 Merge branch 'wip/otte/for-master' into 'master'
gstmedia: Properly detect stream metadata when preparing

See merge request GNOME/gtk!3377
2021-03-30 21:54:57 +00:00
Emmanuele Bassi
d84440969a Merge branch 'ebassi/docs-ci' into 'master'
ci: Add missing graphviz dependency

See merge request GNOME/gtk!3376
2021-03-30 20:44:51 +00:00
Benjamin Otte
e7dc82fa32 gstmedia: Properly detect stream metadata when preparing
We can look at the GstPlayerMediaInfo to get all the info we care about.
2021-03-30 22:26:26 +02:00
Emmanuele Bassi
f1b3492700 ci: Add missing graphviz dependency
We generate the hierarchy graph for GTK types, and in order to do so, we
need the dot utility from graphviz in the CI image.
2021-03-30 21:08:43 +01:00
Emmanuele Bassi
70e26d12fb Update the gi-docgen repository
Do not use my personal workspace.
2021-03-26 17:41:58 +00:00
1138 changed files with 38287 additions and 23543 deletions

View File

@@ -24,9 +24,9 @@ variables:
BACKEND_FLAGS: "-Dx11-backend=true -Dwayland-backend=true -Dbroadway-backend=true"
FEATURE_FLAGS: "-Dvulkan=enabled -Dcloudproviders=enabled"
MESON_TEST_TIMEOUT_MULTIPLIER: 3
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v28"
FEDORA_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v31"
FLATPAK_IMAGE: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master"
DOCS_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora-docs:v26"
DOCS_IMAGE: "registry.gitlab.gnome.org/gnome/gtk/fedora:v31"
.only-default:
only:
@@ -77,6 +77,7 @@ fedora-x86_64:
variables:
EXTRA_MESON_FLAGS: "--buildtype=debug --default-library=both"
script:
- .gitlab-ci/show-info-linux.sh
- meson subprojects update
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
_build
@@ -92,6 +93,7 @@ release-build:
variables:
EXTRA_MESON_FLAGS: "--buildtype=release"
script:
- .gitlab-ci/show-info-linux.sh
- meson subprojects update
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
_build
@@ -106,6 +108,7 @@ installed-tests:
EXTRA_MESON_FLAGS: "--prefix=/usr --libdir=/usr/lib64 -Dinstall-tests=true"
G_TEST_ACCESSIBLE: 1
script:
- .gitlab-ci/show-info-linux.sh
- meson subprojects update
- meson ${COMMON_MESON_FLAGS} ${EXTRA_MESON_FLAGS} ${BACKEND_FLAGS} ${FEATURE_FLAGS}
_build
@@ -155,7 +158,7 @@ macos:
- macos
needs: []
before_script:
- bash .gitlab-ci/show-execution-environment.sh
- bash .gitlab-ci/show-info-osx.sh
- pip3 install --user meson==0.56
- pip3 install --user ninja
- export PATH=/Users/gitlabrunner/Library/Python/3.7/bin:$PATH
@@ -172,6 +175,22 @@ macos:
paths:
- "${CI_PROJECT_DIR}/_build/meson-logs"
vs2017-x64:
extends: .only-default
# TODO: Uncomment this when ready to merge.
#only:
# - branches@GNOME/gtk
stage: build
tags:
- win32-ps
needs: []
script:
- .gitlab-ci/test-msvc.bat
artifacts:
when: always
paths:
- "${CI_PROJECT_DIR}/_build/meson-logs"
.flatpak-defaults:
image: $FLATPAK_IMAGE
stage: flatpak

View File

@@ -1,89 +0,0 @@
FROM fedora:33
RUN dnf -y install \
adwaita-icon-theme \
atk-devel \
at-spi2-atk-devel \
avahi-gobject-devel \
cairo-devel \
cairo-gobject-devel \
ccache \
clang \
clang-analyzer \
colord-devel \
cups-devel \
dbus-daemon \
dbus-x11 \
dejavu-sans-mono-fonts \
desktop-file-utils \
diffutils \
elfutils-libelf-devel \
fribidi-devel \
gcc \
gcc-c++ \
gdk-pixbuf2-devel \
gdk-pixbuf2-modules \
gettext \
git \
glib2-devel \
glib2-static \
glibc-devel \
glibc-headers \
gnome-desktop-testing \
gobject-introspection-devel \
graphene-devel \
gstreamer1-devel \
gstreamer1-plugins-good \
gstreamer1-plugins-bad-free-devel \
gstreamer1-plugins-base-devel \
gtk-doc \
hicolor-icon-theme \
iso-codes \
itstool \
json-glib-devel \
lcov \
libasan \
libattr-devel \
libcloudproviders-devel \
libepoxy-devel \
libffi-devel \
libmount-devel \
librsvg2 \
libselinux-devel \
libubsan \
libXcomposite-devel \
libXcursor-devel \
libXcursor-devel \
libXdamage-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libxkbcommon-devel \
libXrandr-devel \
libXrender-devel \
libXtst-devel \
libxslt \
mesa-dri-drivers \
mesa-libEGL-devel \
mesa-libGLES-devel \
meson \
ninja-build \
pango-devel \
pcre-devel \
pcre-static \
python3 \
python3-jinja2 \
python3-pip \
python3-pygments \
python3-wheel \
redhat-rpm-config \
sassc \
systemtap-sdt-devel \
vulkan-devel \
wayland-devel \
wayland-protocols-devel \
weston \
weston-libs \
which \
xorg-x11-server-Xvfb \
&& dnf clean all

View File

@@ -1,17 +0,0 @@
FROM registry.gitlab.gnome.org/gnome/gtk/fedora-base:v28
RUN dnf -y install \
python3-jinja2 \
python3-markdown \
python3-pygments \
python3-toml \
python3-typogrify
ARG HOST_USER_ID=5555
ENV HOST_USER_ID ${HOST_USER_ID}
RUN useradd -u $HOST_USER_ID -ms /bin/bash user
USER user
WORKDIR /home/user
ENV LANG C.UTF-8

View File

@@ -1,4 +1,98 @@
FROM registry.gitlab.gnome.org/gnome/gtk/fedora-base:v28
FROM fedora:34
RUN dnf -y install \
adwaita-icon-theme \
atk-devel \
at-spi2-atk-devel \
avahi-gobject-devel \
cairo-devel \
cairo-gobject-devel \
ccache \
clang \
clang-analyzer \
clang-tools-extra \
colord-devel \
cups-devel \
dbus-daemon \
dbus-x11 \
dejavu-sans-mono-fonts \
desktop-file-utils \
diffutils \
elfutils-libelf-devel \
fribidi-devel \
gcc \
gcc-c++ \
gdk-pixbuf2-devel \
gdk-pixbuf2-modules \
gettext \
git \
glib2-devel \
glib2-static \
glibc-devel \
glibc-headers \
gnome-desktop-testing \
gobject-introspection-devel \
graphene-devel \
graphviz \
gstreamer1-devel \
gstreamer1-plugins-good \
gstreamer1-plugins-bad-free-devel \
gstreamer1-plugins-base-devel \
gtk-doc \
hicolor-icon-theme \
iso-codes \
itstool \
json-glib-devel \
lcov \
libasan \
libattr-devel \
libcloudproviders-devel \
libepoxy-devel \
libffi-devel \
libmount-devel \
librsvg2 \
libselinux-devel \
libubsan \
libXcomposite-devel \
libXcursor-devel \
libXcursor-devel \
libXdamage-devel \
libXfixes-devel \
libXi-devel \
libXinerama-devel \
libxkbcommon-devel \
libXrandr-devel \
libXrender-devel \
libXtst-devel \
libxslt \
mesa-dri-drivers \
mesa-libEGL-devel \
mesa-libGLES-devel \
meson \
ninja-build \
pango-devel \
pcre-devel \
pcre-static \
python3 \
python3-gobject \
python3-jinja2 \
python3-markdown \
python3-pip \
python3-pygments \
python3-toml \
python3-typogrify \
python3-wheel \
redhat-rpm-config \
sassc \
systemtap-sdt-devel \
vulkan-devel \
wayland-devel \
wayland-protocols-devel \
weston \
weston-libs \
which \
xorg-x11-server-Xvfb \
&& dnf clean all
# Enable sudo for wheel users
RUN sed -i -e 's/# %wheel/%wheel/' -e '0,/%wheel/{s/%wheel/# %wheel/}' /etc/sudoers

View File

@@ -24,6 +24,7 @@ flatpak build ${builddir} meson \
-Dbuild-examples=false \
-Dintrospection=disabled \
-Ddemos=true \
-Dprofile=devel \
_flatpak_build
flatpak build ${builddir} ninja -C _flatpak_build install

5
.gitlab-ci/show-info-linux.sh Executable file
View File

@@ -0,0 +1,5 @@
#! /bin/sh
. /etc/os-release
echo $PRETTY_NAME

14
.gitlab-ci/test-msvc.bat Normal file
View File

@@ -0,0 +1,14 @@
@echo on
:: vcvarsall.bat sets various env vars like PATH, INCLUDE, LIB, LIBPATH for the
:: specified build architecture
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build\vcvarsall.bat" x64
@echo on
:: FIXME: make warnings fatal
pip3 install --upgrade --user meson==0.56.2 || goto :error
meson _build || goto :error
ninja -C _build || goto :error
goto :EOF
:error
exit /b 1

105
NEWS
View File

@@ -1,3 +1,108 @@
Overview of Changes in 4.3.0
============================
* GtkVideo:
- Detect stream metadata when using gstreamer
* GtkFileChooser:
- Fix a crash
* GtkButton:
- Add back visual feedback for keynav activation
* GtkFontChooser:
- Fix initial font selection
* Text widgets:
- Replace squiggly error underlines by dotted lines
- Support translucent selections
* GtkTextView:
- Various improvements to rendering performance
* GtkScrolledWindow:
- Stop using scroll cursors
* GtkMenuButton:
- Make focus-on-click work
* GtkToggleButton:
- Make grouped buttons mutually exclusive
* GtkPasswordEntry:
- Use MADV_DONTDUMP for secure memory
* GtkListBox:
- Allow repeated selection extension for MULTIPLE
* Themes:
- Reorganize and rename included themes. The theme is now
called Default, with dark, hc and hc-dark variants.
Visually, the themes are unchanged.
- The theme variants are also available as standalone
themes called Default-dark, etc.
- The theme named Adwaita is moving to libadwaita
- Fix resize border sizing
- Fix solid-csd window decorations
* Input:
- 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
- Fix a problem with deferred focus setting
* GdkClipboard:
- Ensure strings are nul-terminated
* GSK:
- Improvements to the ngl renderer
- Fix offscreen rendering with transforms
- Fix downscaled textures
- Avoid huge intermediate textures
- Use fp16 for colors
- Optimize handling of underlines in text
- Fix corner cases of shadow rendering
- Reorganize shader resources
- Make shadow rendering match across renderers
* Accessibility:
- Various fixes to get Orca to speak (still a work in progress)
* Wayland:
- Improve font settings fallback
- Avoid unintentional rendering freezes with popovers
- Support the xdg_activation_v1 protocol
* X11:
- Don't beep on untrusted displays
- Don't crash when popovers are outside the workarea
* Windows:
- Fix using GL rendering with Mesa drivers
* Tools:
- Add support for copy/paste in gtk4-node-editor
- Make syntax highlighting work in the gtk4-demo flatpak
* Inspector:
- Enable the inspector by default, in all cases
- Show keyboard layouts
- Improve monitor information
* Translation updates:
Catalan
Chinese (Taiwan)
Dutch
Nepali
Polish
Swedish
Ukrainian
Overview of Changes in 4.2.0
============================

View File

@@ -36,6 +36,13 @@ Nightly documentation can be found at
- Gdk: https://gnome.pages.gitlab.gnome.org/gtk/gdk4/
- Gsk: https://gnome.pages.gitlab.gnome.org/gtk/gsk4/
Nightly flatpaks of our demos can be installed from the
[GNOME Nightly](https://wiki.gnome.org/Apps/Nightly) repository:
- `flatpak remote-add --if-not-exists gnome-nightly https://nightly.gnome.org/gnome-nightly.flatpakrepo`
- `flatpak install gnome-nightly org.gtk.Demo4`
- `flatpak install gnome-nightly org.gtk.WidgetFactory4`
- `flatpak install gnome-nightly org.gtk.IconBrowser4`
Building and installing
-----------------------

View File

@@ -0,0 +1,43 @@
diff -ur lua-5.1.4/src/Makefile lua-5.1.4-new/src/Makefile
--- lua-5.1.4/src/Makefile 2008-01-19 20:37:58.000000000 +0100
+++ lua-5.1.4-new/src/Makefile 2012-02-23 18:26:43.000000000 +0100
@@ -23,6 +23,7 @@
PLATS= aix ansi bsd freebsd generic linux macosx mingw posix solaris
LUA_A= liblua.a
+LUA_SO= liblua.so
CORE_O= lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o \
lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o \
lundump.o lvm.o lzio.o
@@ -36,7 +37,7 @@
LUAC_O= luac.o print.o
ALL_O= $(CORE_O) $(LIB_O) $(LUA_O) $(LUAC_O)
-ALL_T= $(LUA_A) $(LUA_T) $(LUAC_T)
+ALL_T= $(LUA_A) $(LUA_SO) $(LUA_T) $(LUAC_T)
ALL_A= $(LUA_A)
default: $(PLAT)
@@ -51,6 +52,11 @@
$(AR) $@ $?
$(RANLIB) $@
+$(LUA_SO): $(CORE_O) $(LIB_O)
+ $(CC) -shared -ldl -Wl,-soname,$(LUA_SO).$(V) -o $@.$(R) $? -lm $(MYLDFLAGS)
+ ln -sf $(LUA_SO).$(R) $(LUA_SO).$(V)
+ ln -sf $(LUA_SO).$(R) $(LUA_SO)
+
$(LUA_T): $(LUA_O) $(LUA_A)
$(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(LUA_A) $(LIBS)
--- lua-5.1.4/Makefile 2008-08-12 02:40:48.000000000 +0200
+++ lua-5.1.4-new/Makefile 2012-02-23 19:06:32.000000000 +0100
@@ -53,7 +53,7 @@
all: $(PLAT)
$(PLATS) clean:
- cd src && $(MAKE) $@
+ cd src && $(MAKE) $@ V=$(V) R=$(R)
test: dummy
src/lua test/hello.lua

View File

@@ -93,6 +93,77 @@
}
]
},
{
"name": "boost",
"buildsystem": "simple",
"build-commands": [
"./bootstrap.sh --prefix=/app --with-libraries=date_time,filesystem,iostreams,locale,regex,system,thread,python,program_options,test,serialization",
"./b2 --build-type=minimal link=shared -j $FLATPAK_BUILDER_N_JOBS",
"./b2 --build-type=minimal link=shared install"
],
"sources": [
{
"type": "archive",
"url": "https://boostorg.jfrog.io/artifactory/main/release/1.69.0/source/boost_1_69_0.tar.bz2",
"sha256": "8f32d4617390d1c2d16f26a27ab60d97807b35440d45891fa340fc2648b04406"
}
]
},
{
"name": "lua-5.1",
"buildsystem": "simple",
"build-commands": [
"make -j $FLATPAK_BUILDER_N_JOBS CFLAGS=\"$CFLAGS -fPIC -DLUA_USE_LINUX\" linux",
"make INSTALL_TOP=$FLATPAK_DEST TO_LIB='liblua.a liblua.so.5.1.5' install",
"ln -sf liblua.so.5.1.5 $FLATPAK_DEST/lib/liblua.so",
"ln -sf liblua.so.5.1.5 $FLATPAK_DEST/lib/liblua.so.5.1",
"install -Dm0644 etc/lua.pc $FLATPAK_DEST/lib/pkgconfig/lua.pc",
"ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua51.pc",
"ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua5.1.pc",
"ln -sf lua.pc $FLATPAK_DEST/lib/pkgconfig/lua-5.1.pc"
],
"sources": [
{
"type": "archive",
"url": "https://www.lua.org/ftp/lua-5.1.5.tar.gz",
"sha256": "2640fc56a795f29d28ef15e13c34a47e223960b0240e8cb0a82d9b0738695333"
},
{
"type": "patch",
"path": "lua-5.1.5-so.patch"
},
{
"type": "shell",
"commands": [
"sed -i \"s|/usr/local|$FLATPAK_DEST|\" etc/lua.pc src/luaconf.h"
]
}
],
"cleanup": [
"*.a",
"/bin",
"/include",
"/lib/pkgconfig",
"/man"
]
},
{
"name" : "highlight",
"buildsystem" : "simple",
"builddir" : true,
"build-commands" : [
"sed -i -e 's#^PREFIX = /usr#PREFIX = /app#' makefile",
"make",
"make install"
],
"sources" : [
{
"type" : "archive",
"url" : "http://www.andre-simon.de/zip/highlight-4.0.tar.bz2",
"sha256" : "f40dcba26e011a2c67df874f4d9b0238c2c6b065163ce8de3d8371b9dfce864d"
}
]
},
{
"name" : "gtk",
"buildsystem" : "meson",

View File

@@ -8,10 +8,10 @@ from pathlib import PurePath
stylesheets = [
'gtk/theme/Adwaita/Adwaita.css',
'gtk/theme/Adwaita/Adwaita-dark.css',
'gtk/theme/HighContrast/HighContrast.css',
'gtk/theme/HighContrast/HighContrast-dark.css',
'gtk/theme/Default/Default-light.css',
'gtk/theme/Default/Default-dark.css',
'gtk/theme/Default/Default-hc.css',
'gtk/theme/Default/Default-hc-dark.css',
]
references = [

View File

@@ -0,0 +1,26 @@
#!/usr/bin/env python3
import os
import subprocess
import sys
repodir = sys.argv[1]
profile = sys.argv[2]
sys.stdout.write("/* This file is auto-generated. Do not edit. */\n")
sys.stdout.write("#pragma once\n")
sys.stdout.write("\n")
sys.stdout.write(f"#define PROFILE \"{profile}\"\n")
short_sha = os.environ.get('CI_COMMIT_SHORT_SHA')
if short_sha is None:
cmd = ["git", "-C", repodir, "rev-parse", "--short", "HEAD"]
try:
with subprocess.Popen(cmd, stdout=subprocess.PIPE) as p:
short_sha = p.stdout.read().decode('utf-8').rstrip("\n")
except FileNotFoundError:
short_sha = ''
if profile != 'default':
short_sha = 'devel'
sys.stdout.write(f"#define VCS_TAG \"{short_sha}\"\n")

View File

@@ -76,6 +76,9 @@
/* Define to 1 if you have a working `mmap' system call. */
#mesondefine HAVE_MMAP
/* Define to 1 if you have a working `madvise' system call. */
#mesondefine HAVE_MADVISE
/* Define to 1 if you have the `posix_fallocate' function. */
#mesondefine HAVE_POSIX_FALLOCATE
@@ -279,3 +282,8 @@
/* Define if tracker3 is available */
#mesondefine HAVE_TRACKER3
#mesondefine HAVE_F16C
/* Does the OS support GDesktopAppInfo? */
#mesondefine HAVE_DESKTOPAPPINFO

View File

@@ -13,13 +13,13 @@
</style>
<child>
<object class="GtkButton">
<property name="icon-name">pan-start-symbolic</property>
<property name="icon-name">go-previous-symbolic</property>
<signal name="clicked" handler="fishbowl_prev_button_clicked_cb" object="bowl" swapped="no"/>
</object>
</child>
<child>
<object class="GtkButton">
<property name="icon-name">pan-end-symbolic</property>
<property name="icon-name">go-next-symbolic</property>
<signal name="clicked" handler="fishbowl_next_button_clicked_cb" object="bowl" swapped="no"/>
</object>
</child>

View File

@@ -10,12 +10,8 @@
<object class="GtkButton" id="reset">
<property name="receives-default">1</property>
<property name="tooltip-text">Reset</property>
<property name="icon-name">view-refresh-symbolic</property>
<signal name="clicked" handler="font_features_reset_features" swapped="no"/>
<child>
<object class="GtkImage">
<property name="icon-name">view-refresh-symbolic</property>
</object>
</child>
</object>
</child>
</object>

View File

@@ -1136,7 +1136,7 @@ done:
g_free (design_coords);
}
void
G_MODULE_EXPORT void
font_features_font_changed (void)
{
update_script_combo ();
@@ -1144,14 +1144,14 @@ font_features_font_changed (void)
update_font_variations ();
}
void
G_MODULE_EXPORT void
font_features_script_changed (void)
{
update_features ();
update_display ();
}
void
G_MODULE_EXPORT void
font_features_reset_features (void)
{
GList *l;
@@ -1197,7 +1197,7 @@ switch_to_label (void)
update_display ();
}
void
G_MODULE_EXPORT void
font_features_toggle_edit (void)
{
if (strcmp (gtk_stack_get_visible_child_name (GTK_STACK (stack)), "label") == 0)
@@ -1206,7 +1206,7 @@ font_features_toggle_edit (void)
switch_to_label ();
}
void
G_MODULE_EXPORT void
font_features_stop_edit (void)
{
g_signal_emit_by_name (edit_toggle, "clicked");

View File

@@ -23,13 +23,10 @@
#include "gskshaderpaintable.h"
/**
* SECTION:gskshaderpaintable
* @Short_description: Drawing with shaders
* @Title: GskShaderPaintable
* @see_also: #GdkPaintable
* GskShaderPaintable:
*
* GskShaderPaintable is an implementation of the #GdkPaintable interface
* that uses a #GskGLShader to create pixels.
* `GskShaderPaintable` is an implementation of the `GdkPaintable` interface
* that uses a `GskGLShader` to create pixels.
*
* You can set the uniform data that the shader needs for rendering
* using gsk_shader_paintable_set_args(). This function can
@@ -38,7 +35,7 @@
*
* Commonly, time is passed to shaders as a float uniform containing
* the elapsed time in seconds. The convenience API
* gsk_shader_paintable_update_time() can be called from a #GtkTickCallback
* gsk_shader_paintable_update_time() can be called from a `GtkTickCallback`
* to update the time based on the frame time of the frame clock.
*/
@@ -186,7 +183,7 @@ gsk_shader_paintable_init (GskShaderPaintable *self)
* pixels. The shader must not require input textures.
* If @data is %NULL, all uniform values are set to zero.
*
* Returns: (transfer full): a new #GskShaderPaintable
* Returns: (transfer full): a new `GskShaderPaintable`
*/
GdkPaintable *
gsk_shader_paintable_new (GskGLShader *shader,
@@ -215,8 +212,8 @@ gsk_shader_paintable_new (GskGLShader *shader,
/**
* gsk_shader_paintable_set_shader:
* @self: a #GskShaderPaintable
* @shader: the #GskGLShader to use
* @self: a `GskShaderPaintable`
* @shader: the `GskGLShader` to use
*
* Sets the shader that the paintable will use
* to create pixels. The shader must not require
@@ -241,11 +238,11 @@ gsk_shader_paintable_set_shader (GskShaderPaintable *self,
/**
* gsk_shader_paintable_get_shader:
* @self: a #GskShaderPaintable
* @self: a `GskShaderPaintable`
*
* Returns the shader that the paintable is using.
*
* Returns: (transfer none): the #GskGLShader that is used
* Returns: (transfer none): the `GskGLShader` that is used
*/
GskGLShader *
gsk_shader_paintable_get_shader (GskShaderPaintable *self)
@@ -257,12 +254,12 @@ gsk_shader_paintable_get_shader (GskShaderPaintable *self)
/**
* gsk_shader_paintable_set_args:
* @self: a #GskShaderPaintable
* @self: a `GskShaderPaintable`
* @data: Data block with uniform data for the shader
*
* Sets the uniform data that will be passed to the
* shader when rendering. The @data will typically
* be produced by a #GskUniformDataBuilder.
* be produced by a `GskUniformDataBuilder`.
*
* Note that the @data should be considered immutable
* after it has been passed to this function.
@@ -284,7 +281,7 @@ gsk_shader_paintable_set_args (GskShaderPaintable *self,
/**
* gsk_shader_paintable_get_args:
* @self: a #GskShaderPaintable
* @self: a `GskShaderPaintable`
*
* Returns the uniform data set with
* gsk_shader_paintable_get_args().
@@ -301,9 +298,9 @@ gsk_shader_paintable_get_args (GskShaderPaintable *self)
/**
* gsk_shader_paintable_update_time:
* @self: a #GskShaderPaintable
* @self: a `GskShaderPaintable`
* @time_idx: the index of the uniform for time in seconds as float
* @frame_time: the current frame time, as returned by #GdkFrameClock
* @frame_time: the current frame time, as returned by `GdkFrameClock`
*
* This function is a convenience wrapper for
* gsk_shader_paintable_set_args() that leaves all
@@ -311,7 +308,7 @@ gsk_shader_paintable_get_args (GskShaderPaintable *self)
* index @time_idx, which will be set to the elapsed time
* in seconds, since the first call to this function.
*
* This function is usually called from a #GtkTickCallback.
* This function is usually called from a `GtkTickCallback`.
*/
void
gsk_shader_paintable_update_time (GskShaderPaintable *self,

View File

@@ -74,9 +74,9 @@ gtk_fishbowl_init (GtkFishbowl *fishbowl)
/**
* gtk_fishbowl_new:
*
* Creates a new #GtkFishbowl.
* Creates a new `GtkFishbowl`.
*
* Returns: a new #GtkFishbowl.
* Returns: a new `GtkFishbowl`.
*/
GtkWidget*
gtk_fishbowl_new (void)

View File

@@ -18,8 +18,6 @@ do_headerbar (GtkWidget *do_widget)
GtkWidget *header;
GtkWidget *button;
GtkWidget *box;
GtkWidget *image;
GIcon *icon;
if (!window)
{
@@ -32,20 +30,14 @@ do_headerbar (GtkWidget *do_widget)
header = gtk_header_bar_new ();
button = gtk_button_new ();
icon = g_themed_icon_new ("mail-send-receive-symbolic");
image = gtk_image_new_from_gicon (icon);
g_object_unref (icon);
gtk_button_set_child (GTK_BUTTON (button), image);
button = gtk_button_new_from_icon_name ("mail-send-receive-symbolic");
gtk_header_bar_pack_end (GTK_HEADER_BAR (header), button);
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_widget_add_css_class (box, "linked");
button = gtk_button_new ();
gtk_button_set_child (GTK_BUTTON (button), gtk_image_new_from_icon_name ("pan-start-symbolic"));
button = gtk_button_new_from_icon_name ("go-previous-symbolic");
gtk_box_append (GTK_BOX (box), button);
button = gtk_button_new ();
gtk_button_set_child (GTK_BUTTON (button), gtk_image_new_from_icon_name ("pan-end-symbolic"));
button = gtk_button_new_from_icon_name ("go-next-symbolic");
gtk_box_append (GTK_BOX (box), button);
gtk_header_bar_pack_start (GTK_HEADER_BAR (header), box);

View File

@@ -116,20 +116,25 @@ populate_emoji_text (void)
GtkWidget *textview;
GtkTextBuffer *buffer;
GString *s;
GtkTextIter iter;
s = g_string_sized_new (1000 * 30 * 4);
s = g_string_sized_new (500 * 30 * 4);
for (int i = 0; i < 1000; i++)
for (int i = 0; i < 500; i++)
{
if (i % 2)
g_string_append (s, "x");
g_string_append (s, "<span underline=\"single\" underline_color=\"red\">x</span>");
for (int j = 0; j < 30; j++)
g_string_append (s, "💓x");
{
g_string_append (s, "💓");
g_string_append (s, "<span underline=\"single\" underline_color=\"red\">x</span>");
}
g_string_append (s, "\n");
}
buffer = gtk_text_buffer_new (NULL);
gtk_text_buffer_set_text (buffer, s->str, s->len);
gtk_text_buffer_get_start_iter (buffer, &iter);
gtk_text_buffer_insert_markup (buffer, &iter, s->str, s->len);
g_string_free (s, TRUE);

View File

@@ -13,13 +13,13 @@
</style>
<child>
<object class="GtkButton">
<property name="icon-name">pan-start-symbolic</property>
<property name="icon-name">go-previous-symbolic</property>
<signal name="clicked" handler="iconscroll_prev_clicked_cb"/>
</object>
</child>
<child>
<object class="GtkButton">
<property name="icon-name">pan-end-symbolic</property>
<property name="icon-name">go-next-symbolic</property>
<signal name="clicked" handler="iconscroll_next_clicked_cb"/>
</object>
</child>

View File

@@ -8,8 +8,8 @@
#include <gtk/gtk.h>
/* This is the function that creates the #GListModel that we need.
* GTK list widgets need a #GListModel to display, as models support change
/* This is the function that creates the GListModel that we need.
* GTK list widgets need a GListModel to display, as models support change
* notifications.
* Unfortunately various older APIs do not provide list models, so we create
* our own.
@@ -20,10 +20,10 @@ create_application_list (void)
GListStore *store;
GList *apps, *l;
/* We use a #GListStore here, which is a simple array-like list implementation
/* We use a GListStore here, which is a simple array-like list implementation
* for manual management.
* List models need to know what type of data they provide, so we need to
* provide the type here. As we want to do a list of applications, #GAppInfo
* provide the type here. As we want to do a list of applications, GAppInfo
* is the object we provide.
*/
store = g_list_store_new (G_TYPE_APP_INFO);
@@ -39,7 +39,7 @@ create_application_list (void)
}
/* This is the function we use for setting up new listitems to display.
* We add just an #GtkImage and a #GtkLabel here to display the application's
* We add just an GtkImage and a GtkLabel here to display the application's
* icon and name, as this is just a simple demo.
*/
static void
@@ -61,8 +61,8 @@ setup_listitem_cb (GtkListItemFactory *factory,
/* Here we need to prepare the listitem for displaying its item. We get the
* listitem already set up from the previous function, so we can reuse the
* #GtkImage widget we set up above.
* We get the item - which we know is a #GAppInfo because it comes out of
* GtkImage widget we set up above.
* We get the item - which we know is a GAppInfo because it comes out of
* the model we set up above, grab its icon and display it.
*/
static void
@@ -85,7 +85,7 @@ bind_listitem_cb (GtkListItemFactory *factory,
* the listitem, but this is simple code, so the default implementations are
* enough. If we had connected signals, this step would have been necessary.
*
* The #GtkSignalListItemFactory documentation contains more information about
* The GtkSignalListItemFactory documentation contains more information about
* this step.
*/
@@ -108,8 +108,8 @@ activate_cb (GtkListView *list,
app_info = g_list_model_get_item (G_LIST_MODEL (gtk_list_view_get_model (list)), position);
/* Prepare the context for launching the application and launch it. This
* code is explained in detail in the documentation for #GdkAppLaunchContext
* and #GAppInfo.
* code is explained in detail in the documentation for GdkAppLaunchContext
* and GAppInfo.
*/
context = gdk_display_get_app_launch_context (gtk_widget_get_display (GTK_WIDGET (list)));
if (!g_app_info_launch (app_info,
@@ -155,13 +155,13 @@ do_listview_applauncher (GtkWidget *do_widget)
gtk_window_set_title (GTK_WINDOW (window), "Application Launcher");
g_object_add_weak_pointer (G_OBJECT (window), (gpointer *) &window);
/* The #GtkListitemFactory is what is used to create #GtkListItems
/* The GtkListitemFactory is what is used to create GtkListItems
* to display the data from the model. So it is absolutely necessary
* to create one.
* We will use a #GtkSignalListItemFactory because it is the simplest
* We will use a GtkSignalListItemFactory because it is the simplest
* one to use. Different ones are available for different use cases.
* The most powerful one is #GtkBuilderListItemFactory which uses
* #GtkBuilder .ui files, so it requires little code.
* The most powerful one is GtkBuilderListItemFactory which uses
* GtkBuilder .ui files, so it requires little code.
*/
factory = gtk_signal_list_item_factory_new ();
g_signal_connect (factory, "setup", G_CALLBACK (setup_listitem_cb), NULL);
@@ -184,7 +184,7 @@ do_listview_applauncher (GtkWidget *do_widget)
*/
g_signal_connect (list, "activate", G_CALLBACK (activate_cb), NULL);
/* List widgets should always be contained in a #GtkScrolledWindow,
/* List widgets should always be contained in a GtkScrolledWindow,
* because otherwise they might get too large or they might not
* be scrollable.
*/

View File

@@ -34,6 +34,7 @@ enum {
};
#define FILE_BROWSER_TYPE_VIEW (file_browser_view_get_type ())
G_MODULE_EXPORT
G_DECLARE_FINAL_TYPE (FileBrowserView, file_browser_view, FILE_BROWSER, VIEW, GObject);
G_DEFINE_TYPE (FileBrowserView, file_browser_view, G_TYPE_OBJECT);
@@ -159,7 +160,7 @@ static void file_browser_view_init (FileBrowserView *self)
{
}
char *
G_MODULE_EXPORT char *
filebrowser_get_display_name (GObject *object,
GFileInfo *info)
{
@@ -169,7 +170,7 @@ filebrowser_get_display_name (GObject *object,
return g_strdup (g_file_info_get_attribute_string (info, "standard::display-name"));
}
char *
G_MODULE_EXPORT char *
filebrowser_get_content_type (GObject *object,
GFileInfo *info)
{
@@ -179,7 +180,7 @@ filebrowser_get_content_type (GObject *object,
return g_strdup (g_file_info_get_attribute_string (info, "standard::content-type"));
}
char *
G_MODULE_EXPORT char *
filebrowser_get_size (GObject *object,
GFileInfo *info)
{
@@ -189,7 +190,7 @@ filebrowser_get_size (GObject *object,
return g_format_size (g_file_info_get_attribute_uint64 (info, "standard::size"));
}
GIcon *
G_MODULE_EXPORT GIcon *
filebrowser_get_icon (GObject *object,
GFileInfo *info)
{
@@ -206,7 +207,7 @@ filebrowser_get_icon (GObject *object,
return icon;
}
void
G_MODULE_EXPORT void
filebrowser_up_clicked_cb (GtkButton *button,
GtkDirectoryList *list)
{
@@ -219,7 +220,7 @@ filebrowser_up_clicked_cb (GtkButton *button,
gtk_directory_list_set_file (list, file);
}
void
G_MODULE_EXPORT void
filebrowser_view_activated_cb (GtkGridView *view,
guint pos,
GtkDirectoryList *list)

View File

@@ -751,7 +751,6 @@ demo_filter_by_name (gpointer item,
gpointer user_data)
{
GtkTreeListRow *row = item;
GtkFilterListModel *model = user_data;
GListModel *children;
GtkDemo *demo;
guint i, n;
@@ -762,7 +761,7 @@ demo_filter_by_name (gpointer item,
return TRUE;
g_assert (GTK_IS_TREE_LIST_ROW (row));
g_assert (GTK_IS_FILTER_LIST_MODEL (model));
g_assert (GTK_IS_FILTER_LIST_MODEL (user_data));
/* Show a row if itself of any parent matches */
for (parent = row; parent; parent = gtk_tree_list_row_get_parent (parent))

View File

@@ -25,6 +25,7 @@
<object class="GtkButton">
<property name="valign">center</property>
<property name="action-name">win.run</property>
<property name="focus-on-click">0</property>
<property name="label" translatable="yes">Run</property>
</object>
</child>
@@ -32,6 +33,7 @@
<object class="GtkToggleButton">
<property name="icon-name">edit-find-symbolic</property>
<property name="valign">center</property>
<property name="focus-on-click">0</property>
<property name="active" bind-source="searchbar" bind-property="search-mode-enabled" bind-flags="bidirectional|sync-create"/>
<accessibility>
<property name="label" translatable="yes">Search</property>
@@ -41,6 +43,7 @@
<child type="end">
<object class="GtkMenuButton" id="gear_menu_button">
<property name="valign">center</property>
<property name="focus-on-click">0</property>
<property name="menu-model">gear_menu</property>
<property name="icon-name">open-menu-symbolic</property>
<accessibility>

View File

@@ -205,4 +205,9 @@ install_data('org.gtk.Demo4.gschema.xml', install_dir: gtk_schemasdir)
gnome.compile_schemas()
# appdata
install_data('org.gtk.Demo4.appdata.xml', install_dir: gtk_appdatadir)
configure_file(
input: 'org.gtk.Demo4.appdata.xml.in',
output: 'org.gtk.Demo4.appdata.xml',
configuration: appdata_config,
install_dir: gtk_appdatadir
)

View File

@@ -31,14 +31,9 @@
<update_contact>matthias.clasen_at_gmail.com</update_contact>
<developer_name>Matthias Clasen and others</developer_name>
<releases>
<release version="3.99.0" date="2020-07-30">
<release version="@BUILD_VERSION@" date="@BUILD_DATE@">
<description>
<p>A new developers snapshot towards GTK 4.0.</p>
</description>
</release>
<release version="3.94.0" date="2018-06-25">
<description>
<p>A new developers snapshot towards GTK 4.0.</p>
<p>A new build of GTK.</p>
</description>
</release>
</releases>

View File

@@ -25,43 +25,43 @@ show_shortcuts (GtkWidget *window,
g_object_unref (builder);
}
void
G_MODULE_EXPORT void
shortcuts_builder_shortcuts (GtkWidget *window)
{
show_shortcuts (window, "shortcuts-builder", NULL);
}
void
G_MODULE_EXPORT void
shortcuts_gedit_shortcuts (GtkWidget *window)
{
show_shortcuts (window, "shortcuts-gedit", NULL);
}
void
G_MODULE_EXPORT void
shortcuts_clocks_shortcuts (GtkWidget *window)
{
show_shortcuts (window, "shortcuts-clocks", NULL);
}
void
G_MODULE_EXPORT void
shortcuts_clocks_shortcuts_stopwatch (GtkWidget *window)
{
show_shortcuts (window, "shortcuts-clocks", "stopwatch");
}
void
G_MODULE_EXPORT void
shortcuts_boxes_shortcuts (GtkWidget *window)
{
show_shortcuts (window, "shortcuts-boxes", NULL);
}
void
G_MODULE_EXPORT void
shortcuts_boxes_shortcuts_wizard (GtkWidget *window)
{
show_shortcuts (window, "shortcuts-boxes", "wizard");
}
void
G_MODULE_EXPORT void
shortcuts_boxes_shortcuts_display (GtkWidget *window)
{
show_shortcuts (window, "shortcuts-boxes", "display");

View File

@@ -2,6 +2,7 @@
#include <float.h>
#include <math.h>
#include <glib.h>
#include <assert.h>
/* See Golub and Reinsch,
* "Handbook for Automatic Computation vol II - Linear Algebra",
@@ -39,6 +40,9 @@ householder_reduction (double *A,
double *pu, *pui, *pv, *pvi;
double half_norm_squared;
assert (nrows >= 2);
assert (ncols >= 2);
memcpy (U, A, sizeof (double) * nrows * ncols);
diagonal[0] = 0.0;
@@ -205,6 +209,9 @@ givens_reduction (int nrows,
int rotation_test;
int iteration_count;
assert (nrows >= 2);
assert (ncols >= 2);
for (i = 0, x = 0.0; i < ncols; i++)
{
y = fabs (diagonal[i]) + fabs (superdiagonal[i]);
@@ -342,6 +349,9 @@ sort_singular_values (int nrows,
double temp;
double *p1, *p2;
assert (nrows >= 2);
assert (ncols >= 2);
for (i = 0; i < ncols - 1; i++)
{
max_index = i;
@@ -433,9 +443,12 @@ singular_value_decomposition_solve (double *U,
double d;
double tolerance;
assert (nrows >= 2);
assert (ncols >= 2);
tolerance = DBL_EPSILON * S[0] * (double) ncols;
for ( i = 0, pv = V; i < ncols; i++, pv += ncols)
for (i = 0, pv = V; i < ncols; i++, pv += ncols)
{
x[i] = 0.0;
for (j = 0; j < ncols; j++)

View File

@@ -12,7 +12,7 @@
#include <math.h>
#include <stdlib.h>
int
G_MODULE_EXPORT int
spinbutton_hex_spin_input (GtkSpinButton *spin_button,
double *new_val)
{
@@ -29,7 +29,7 @@ spinbutton_hex_spin_input (GtkSpinButton *spin_button,
return TRUE;
}
int
G_MODULE_EXPORT int
spinbutton_hex_spin_output (GtkSpinButton *spin_button)
{
GtkAdjustment *adjustment;
@@ -49,7 +49,7 @@ spinbutton_hex_spin_output (GtkSpinButton *spin_button)
return TRUE;
}
int
G_MODULE_EXPORT int
spinbutton_time_spin_input (GtkSpinButton *spin_button,
double *new_val)
{
@@ -88,7 +88,7 @@ spinbutton_time_spin_input (GtkSpinButton *spin_button,
return TRUE;
}
int
G_MODULE_EXPORT int
spinbutton_time_spin_output (GtkSpinButton *spin_button)
{
GtkAdjustment *adjustment;
@@ -122,7 +122,7 @@ static const char *month[12] = {
"December"
};
int
G_MODULE_EXPORT int
spinbutton_month_spin_input (GtkSpinButton *spin_button,
double *new_val)
{
@@ -151,7 +151,7 @@ spinbutton_month_spin_input (GtkSpinButton *spin_button,
return TRUE;
}
int
G_MODULE_EXPORT int
spinbutton_month_spin_output (GtkSpinButton *spin_button)
{
GtkAdjustment *adjustment;

View File

@@ -32,5 +32,10 @@ endforeach
install_data('org.gtk.IconBrowser4.desktop', install_dir: gtk_applicationsdir)
# appdata
install_data('org.gtk.IconBrowser4.appdata.xml', install_dir: gtk_appdatadir)
configure_file(
input: 'org.gtk.IconBrowser4.appdata.xml.in',
output: 'org.gtk.IconBrowser4.appdata.xml',
configuration: appdata_config,
install_dir: gtk_appdatadir
)

View File

@@ -30,14 +30,9 @@
<update_contact>matthias.clasen_at_gmail.com</update_contact>
<developer_name>Matthias Clasen and others</developer_name>
<releases>
<release version="3.99.0" date="2020-07-30">
<release version="@BUILD_VERSION@" date="@BUILD_DATE@">
<description>
<p>A new developers snapshot towards GTK 4.0.</p>
</description>
</release>
<release version="3.94.0" date="2018-06-25">
<description>
<p>A new developers snapshot towards GTK 4.0.</p>
<p>A new build of GTK.</p>
</description>
</release>
</releases>

View File

@@ -25,12 +25,14 @@
</style>
<child>
<object class="GtkToggleButton" id="normal_radio">
<property name="focus-on-click">0</property>
<property name="label" translatable="yes">Normal</property>
<property name="active">1</property>
</object>
</child>
<child>
<object class="GtkToggleButton" id="symbolic_radio">
<property name="focus-on-click">0</property>
<property name="label" translatable="yes">Symbolic</property>
<property name="group">normal_radio</property>
<signal name="notify::active" handler="symbolic_toggled" swapped="yes" after="yes"/>
@@ -40,6 +42,7 @@
</child>
<child type="end">
<object class="GtkMenuButton" id="gear_menu_button">
<property name="focus-on-click">0</property>
<property name="valign">center</property>
<property name="menu-model">gear_menu</property>
<property name="icon-name">open-menu-symbolic</property>
@@ -47,6 +50,7 @@
</child>
<child type="end">
<object class="GtkToggleButton" id="search">
<property name="focus-on-click">0</property>
<style>
<class name="image-button"/>
</style>

View File

@@ -1,19 +1,31 @@
demo_conf = configuration_data()
demo_conf.set_quoted('PROFILE', get_option('profile'))
demo_conf.set_quoted('VCS_TAG', '@VCS_TAG@')
gen_demo_header = find_program('../build-aux/meson/gen-demo-header.py')
demo_profile = get_option('profile')
demo_conf_h = declare_dependency(
sources: vcs_tag(
command: [ 'git', 'rev-parse', '--short', 'HEAD' ],
fallback: get_option('profile') != 'default' ? 'devel' : '',
input: configure_file(
output: 'demo_conf.h.in',
configuration: demo_conf
),
output: 'demo_conf.h'
)
sources: custom_target('demo-header',
command: [gen_demo_header, meson.source_root(), demo_profile],
capture: true,
output: 'demo_conf.h',
build_by_default: true,
build_always_stale: true,
)
)
# appdata
today = 'unknown'
date = find_program('date',
required: false)
if date.found()
r = run_command(date, '-I')
if r.returncode() == 0
today = r.stdout().strip()
endif
endif
appdata_config = configuration_data()
appdata_config.set('BUILD_VERSION', meson.project_version())
appdata_config.set('BUILD_DATE', today)
subdir('constraint-editor')
subdir('gtk-demo')
subdir('icon-browser')

View File

@@ -2,8 +2,8 @@
<interface>
<object class="GtkWindow" id="window">
<property name="title" translatable="yes">Help</property>
<property name="default-width">720</property>
<property name="default-height">520</property>
<property name="default-width">920</property>
<property name="default-height">600</property>
<child>
<object class="GtkScrolledWindow">
<child>

View File

@@ -635,6 +635,24 @@ export_image_cb (GtkWidget *button,
gtk_widget_show (dialog);
}
static void
clip_image_cb (GtkWidget *button,
NodeEditorWindow *self)
{
GdkTexture *texture;
GdkClipboard *clipboard;
texture = create_texture (self);
if (texture == NULL)
return;
clipboard = gtk_widget_get_clipboard (GTK_WIDGET (self));
gdk_clipboard_set_texture (clipboard, texture);
g_object_unref (texture);
}
static void
testcase_name_entry_changed_cb (GtkWidget *button,
GParamSpec *pspec,
@@ -826,6 +844,7 @@ node_editor_window_class_init (NodeEditorWindowClass *class)
gtk_widget_class_bind_template_callback (widget_class, open_cb);
gtk_widget_class_bind_template_callback (widget_class, save_cb);
gtk_widget_class_bind_template_callback (widget_class, export_image_cb);
gtk_widget_class_bind_template_callback (widget_class, clip_image_cb);
gtk_widget_class_bind_template_callback (widget_class, testcase_save_clicked_cb);
gtk_widget_class_bind_template_callback (widget_class, testcase_name_entry_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, dark_mode_cb);

View File

@@ -102,6 +102,7 @@
<object class="GtkHeaderBar" id="header">
<child type="start">
<object class="GtkButton">
<property name="focus-on-click">0</property>
<property name="icon-name">document-open-symbolic</property>
<property name="tooltip-text">Open node file</property>
<signal name="clicked" handler="open_cb"/>
@@ -109,6 +110,7 @@
</child>
<child type="start">
<object class="GtkButton">
<property name="focus-on-click">0</property>
<property name="icon-name">document-save-symbolic</property>
<property name="tooltip-text">Save to node file</property>
<signal name="clicked" handler="save_cb"/>
@@ -116,24 +118,30 @@
</child>
<child type="start">
<object class="GtkButton">
<property name="focus-on-click">0</property>
<property name="icon-name">insert-image-symbolic</property>
<property name="tooltip-text">Export to image</property>
<signal name="clicked" handler="export_image_cb"/>
</object>
</child>
<child type="start">
<object class="GtkSeparator">
<property name="orientation">vertical</property>
<object class="GtkButton">
<property name="focus-on-click">0</property>
<property name="icon-name">edit-copy-symbolic</property>
<property name="tooltip-text">Copy image to clipboard</property>
<signal name="clicked" handler="clip_image_cb"/>
</object>
</child>
<child type="start">
<object class="GtkMenuButton">
<property name="focus-on-click">0</property>
<property name="label">Save Testcase</property>
<property name="popover">testcase_popover</property>
</object>
</child>
<child type="end">
<object class="GtkMenuButton" id="gear_menu_button">
<property name="focus-on-click">0</property>
<property name="valign">center</property>
<property name="menu-model">gear_menu</property>
<property name="icon-name">open-menu-symbolic</property>
@@ -141,6 +149,7 @@
</child>
<child type="end">
<object class="GtkToggleButton" id="dark_bg_button">
<property name="focus-on-click">0</property>
<property name="valign">center</property>
<property name="has-frame">0</property>
<property name="icon-name">display-brightness-symbolic</property>

View File

@@ -159,7 +159,7 @@ save_file (GFile *save_filename)
error = NULL;
g_file_replace_contents (save_filename,
text, -1,
text, strlen (text),
NULL, FALSE,
G_FILE_CREATE_NONE,
NULL,

View File

@@ -26,4 +26,9 @@ foreach size: ['scalable', 'symbolic']
endforeach
# appdata
install_data('org.gtk.WidgetFactory4.appdata.xml', install_dir: gtk_appdatadir)
configure_file(
input: 'org.gtk.WidgetFactory4.appdata.xml.in',
output: 'org.gtk.WidgetFactory4.appdata.xml',
configuration: appdata_config,
install_dir: gtk_appdatadir
)

View File

@@ -32,14 +32,9 @@
<update_contact>matthias.clasen_at_gmail.com</update_contact>
<developer_name>Matthias Clasen and others</developer_name>
<releases>
<release version="3.99.0" date="2020-07-30">
<release version="@BUILD_VERSION@" date="@BUILD_DATE@">
<description>
<p>A new developers snapshot towards GTK 4.0.</p>
</description>
</release>
<release version="3.94.0" date="2018-06-25">
<description>
<p>A new developers snapshot towards GTK 4.0.</p>
<p>A new build of GTK.</p>
</description>
</release>
</releases>

View File

@@ -50,32 +50,19 @@ change_theme_state (GSimpleAction *action,
GtkSettings *settings = gtk_settings_get_default ();
const char *s;
const char *theme;
gboolean prefer_dark = FALSE;
g_simple_action_set_state (action, state);
s = g_variant_get_string (state, NULL);
if (strcmp (s, "adwaita") == 0)
{
theme = "Adwaita";
prefer_dark = FALSE;
}
else if (strcmp (s, "adwaita-dark") == 0)
{
theme = "Adwaita";
prefer_dark = TRUE;
}
else if (strcmp (s, "highcontrast") == 0)
{
theme = "HighContrast";
prefer_dark = FALSE;
}
else if (strcmp (s, "highcontrast-inverse") == 0)
{
theme = "HighContrastInverse";
prefer_dark = FALSE;
}
if (strcmp (s, "default") == 0)
theme = "Default";
else if (strcmp (s, "dark") == 0)
theme = "Default-dark";
else if (strcmp (s, "hc") == 0)
theme = "Default-hc";
else if (strcmp (s, "hc-dark") == 0)
theme = "Default-hc-dark";
else if (strcmp (s, "current") == 0)
{
gtk_settings_reset_property (settings, "gtk-theme-name");
@@ -87,7 +74,7 @@ change_theme_state (GSimpleAction *action,
g_object_set (G_OBJECT (settings),
"gtk-theme-name", theme,
"gtk-application-prefer-dark-theme", prefer_dark,
"gtk-application-prefer-dark-theme", FALSE,
NULL);
}
@@ -1886,6 +1873,7 @@ set_up_context_popover (GtkWidget *widget,
gtk_widget_set_parent (popover, widget);
gtk_popover_set_has_arrow (GTK_POPOVER (popover), FALSE);
gesture = gtk_gesture_click_new ();
gtk_event_controller_set_name (GTK_EVENT_CONTROLLER (gesture), "widget-factory-context-click");
gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), GDK_BUTTON_SECONDARY);
g_signal_connect (gesture, "pressed", G_CALLBACK (clicked_cb), popover);
gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture));

View File

@@ -15,24 +15,24 @@
<attribute name="target">current</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Adwaita</attribute>
<attribute name="label" translatable="yes">Default</attribute>
<attribute name="action">win.theme</attribute>
<attribute name="target">adwaita</attribute>
<attribute name="target">default</attribute>
</item>
<item>
<attribute name="label" translatable="yes">Adwaita dark</attribute>
<attribute name="label" translatable="yes">Dark</attribute>
<attribute name="action">win.theme</attribute>
<attribute name="target">adwaita-dark</attribute>
<attribute name="target">dark</attribute>
</item>
<item>
<attribute name="label" translatable="yes">High contrast</attribute>
<attribute name="label" translatable="yes">Highcontrast</attribute>
<attribute name="action">win.theme</attribute>
<attribute name="target">highcontrast</attribute>
<attribute name="target">hc</attribute>
</item>
<item>
<attribute name="label" translatable="yes">High contrast inverse</attribute>
<attribute name="label" translatable="yes">Highcontrast inverse</attribute>
<attribute name="action">win.theme</attribute>
<attribute name="target">highcontrast-inverse</attribute>
<attribute name="target">hc-dark</attribute>
</item>
</section>
</submenu>
@@ -438,6 +438,7 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
<child type="end">
<object class="GtkMenuButton" id="gear_menu_button">
<property name="valign">center</property>
<property name="focus-on-click">0</property>
<property name="popover">
<object class="GtkPopoverMenu" id="gear_menu">
<property name="menu-model">gear_menu_model</property>
@@ -2605,12 +2606,12 @@ microphone-sensitivity-medium-symbolic</property>
</style>
<child>
<object class="GtkButton">
<property name="icon-name">pan-start-symbolic</property>
<property name="icon-name">go-previous-symbolic</property>
</object>
</child>
<child>
<object class="GtkButton">
<property name="icon-name">pan-end-symbolic</property>
<property name="icon-name">go-next-symbolic</property>
</object>
</child>
</object>

View File

@@ -21,3 +21,9 @@ show_index_summary = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/gtk/-/blob/master/"
[extra]
content_images = [
"images/gtk-logo.svg",
]
urlmap_file = "urlmap.js"

View File

@@ -21,3 +21,9 @@ show_index_summary = true
[source-location]
base_url = "https://gitlab.gnome.org/GNOME/gtk/-/blob/master/"
[extra]
content_images = [
"images/gtk-logo.svg",
]
urlmap_file = "urlmap.js"

View File

@@ -24,17 +24,17 @@ search_index = true
[dependencies."Pango-1.0"]
name = "Pango"
description = "Text shaping and rendering"
docs_url = "https://developer.gnome.org/pango/stable"
docs_url = "https://docs.gtk.org/Pango/"
[dependencies."GdkWayland-4.0"]
name = "GdkWayland"
description = "GDK Wayland Backend"
docs_url = "https://gnome.pages.gitlab.gnome.org/gtk/gdk4-wayland/"
docs_url = "https://docs.gtk.org/gdk4-wayland/"
[dependencies."GdkX11-4.0"]
name = "GdkX11"
description = "GDK X11 Backend"
docs_url = "https://gnome.pages.gitlab.gnome.org/gtk/gdk4-x11/"
docs_url = "https://docs.gtk.org/gdk4-x11/"
[theme]
name = "basic"

View File

@@ -3,7 +3,7 @@ Title: Key Values
## Functions for manipulating keyboard codes
Key values are the codes which are sent whenever a key is pressed or released.
They are included in the data contained in a key press or release #GdkEvent.
They are included in the data contained in a key press or release `GdkEvent`.
The complete list of key values can be found in the `gdk/gdkkeysyms.h` header
file.
@@ -28,8 +28,8 @@ At the lowest level, physical keys on the keyboard are represented by
numeric keycodes, and GDK knows how to translate these keycodes into
key values according to the configured keyboard layout and the current
state of the keyboard. In the GDK api, the mapping from keycodes to key
values is available via [`method@Gdk.Display.map_keycode`], and the reverse
mapping is available via [`method@Gdk.Display.map_keyval`]. The results of
values is available via [method@Gdk.Display.map_keycode], and the reverse
mapping is available via [method@Gdk.Display.map_keyval]. The results of
these functions are returned in [struct@Gdk.KeymapKey] structures.
You can think of a [struct@Gdk.KeymapKey] as a representation of a symbol
@@ -45,7 +45,7 @@ information:
or the “!” symbol. The letter keys are considered to have a lowercase
letter at level 0, and an uppercase letter at level 1, though normally
only the uppercase letter is printed on the key
1. third, the #GdkKeymapKey contains a group; groups are not used on
1. third, the [struct@Gdk.KeymapKey] contains a group; groups are not used on
standard US keyboards, but are used in many other countries. On a
keyboard with groups, there can be 3 or 4 symbols printed on a single
key. The group indicates movement in a horizontal direction. Usually

View File

@@ -13,6 +13,7 @@ if get_option('gtk_doc')
gidocgen,
'generate',
'--quiet',
'--fatal-warnings',
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
'--config=@INPUT0@',
'--output-dir=@OUTPUT@',
@@ -34,6 +35,7 @@ if get_option('gtk_doc')
gidocgen,
'generate',
'--quiet',
'--fatal-warnings',
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
'--config=@INPUT0@',
'--output-dir=@OUTPUT@',
@@ -57,6 +59,7 @@ if get_option('gtk_doc')
gidocgen,
'generate',
'--quiet',
'--fatal-warnings',
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
'--config=@INPUT0@',
'--output-dir=@OUTPUT@',

View File

@@ -14,22 +14,22 @@ search_index = true
[dependencies."GObject-2.0"]
name = "GObject"
description = "The base type system library"
docs_url = "https://developer.gnome.org/gobject/stable"
docs_url = "https://developer.gnome.org/gobject/stable/"
[dependencies."Graphene-1.0"]
name = "Graphene"
description = "A thin layer of mathematical types for 3D libraries"
docs_url = "https://ebassi.github.io/graphene/docs"
docs_url = "https://ebassi.github.io/graphene/docs/"
[dependencies."Pango-1.0"]
name = "Pango"
description = "Text shaping and rendering"
docs_url = "https://developer.gnome.org/pango/stable"
docs_url = "https://docs.gtk.org/Pango/"
[dependencies."Gdk-4.0"]
name = "GDK"
description = "The GTK windowing system abstraction"
docs_url = "https://gnome.pages.gitlab.gnome.org/gtk/gdk4/"
docs_url = "https://docs.gtk.org/gdk4/"
[theme]
name = "basic"

View File

@@ -8,6 +8,7 @@ if get_option('gtk_doc')
gidocgen,
'generate',
'--quiet',
'--fatal-warnings',
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
'--config=@INPUT0@',
'--output-dir=@OUTPUT@',

View File

@@ -3,27 +3,29 @@ Slug: broadway
## Using GTK with Broadway
The GDK Broadway backend provides support for displaying GTK
applications in a web browser, using HTML5 and web sockets. To run
your application in this way, select the Broadway backend by setting
`GDK_BACKEND=broadway`. Then you can make your application appear in
a web browser by pointing it at `http://127.0.0.1:8080`. Note that
you need to enable web sockets in your web browser.
The GDK Broadway backend provides support for displaying GTK applications in
a web browser, using HTML5 and web sockets.
You can choose a different port from the default 8080 by setting
the `BROADWAY_DISPLAY` environment variable to the port that you
want to use.
To run your application in this way, select the Broadway backend by setting
`GDK_BACKEND=broadway`. Then you can make your application appear in a web
browser by pointing it at `http://127.0.0.1:8080`. Note that you need to
enable web sockets in your web browser.
It is also possible to use multiple GTK applications in the same
web browser window, by using the Broadway server, `broadwayd`, that
ships with GTK. To use broadwayd, start it like this:
You can choose a different port from the default 8080 by setting the
`BROADWAY_DISPLAY` environment variable to the port that you want to use.
It is also possible to use multiple GTK applications in the same web browser
window, by using the Broadway server, `gtk4-broadwayd`, that ships with GTK.
To start the Broadway server use:
```
broadwayd :5
gtk4-broadwayd :5
```
Then point your web browser at `http://127.0.0.1:8085`.
Start your applications like this:
Once the Broadway server is running, you can start your applications like
this:
```
GDK_BACKEND=broadway BROADWAY_DISPLAY=:5 gtk4-demo
@@ -31,9 +33,13 @@ GDK_BACKEND=broadway BROADWAY_DISPLAY=:5 gtk4-demo
## Broadway-specific environment variables
### BROADWAY\_DISPLAY
### `BROADWAY_DISPLAY`
Specifies the Broadway display number. The default display is 0.
The display number determines the port to use when connecting
to a Broadway application via the following formula:
`port = 8080 + display`
The display number determines the port to use when connecting to a Broadway
application via the following formula:
```
port = 8080 + display
```

View File

@@ -76,12 +76,16 @@ and in some cases a number as arguments.
`lighter(Color)`
: produces a brigher variant of Color
`darker(Color)`
: produces a darker variant of Color
`shade(Color, Number)`
: changes the lightness of Color. The number ranges from 0 for black to 2 for white.
`alpha(Color, Number)`
: replaces the alpha value of color with number (between 0 and 1)
`mix(Color1, Color2, Number)`
: interpolates between the two colors

View File

@@ -106,7 +106,7 @@ The call to [ctor@Gtk.ApplicationWindow.new] will create a new
window will have a frame, a title bar, and window controls depending on the
platform.
A window title is set using [`method@Gtk.Window.set_title`]. This function
A window title is set using [method@Gtk.Window.set_title]. This function
takes a `GtkWindow` pointer and a string as input. As our `window` pointer
is a `GtkWidget` pointer, we need to cast it to `GtkWindow`; instead of
casting `window` via a typical C cast like `(GtkWindow*)`, `window` can be
@@ -115,7 +115,7 @@ pointer is an instance of the `GtkWindow` class, before casting, and emit a
warning if the check fails. More information about this convention can be
found [here](https://developer.gnome.org/gobject/stable/gtype-conventions.html).
Finally the window size is set using [`method@Gtk.Window.set_default_size`]
Finally the window size is set using [method@Gtk.Window.set_default_size]
and the window is then shown by GTK via [method@Gtk.Widget.show].
When you close the window, by (for example) pressing the X button, the
@@ -212,10 +212,10 @@ The `GtkBox` widget is created with [ctor@Gtk.Box.new], which takes a
this box will contain can either be laid out horizontally or vertically.
This does not matter in this particular case, as we are dealing with only
one button. After initializing box with the newly created `GtkBox`, the code
adds the box widget to the window widget using [`method@Gtk.Window.set_child`].
adds the box widget to the window widget using [method@Gtk.Window.set_child].
Next the `button` variable is initialized in similar manner.
[`ctor@Gtk.Button.new_with_label`] is called which returns a
[ctor@Gtk.Button.new_with_label] is called which returns a
[class@Gtk.Button] to be stored in `button`. Afterwards `button` is added to
our `box`.
@@ -353,7 +353,7 @@ draw function.
The contents of a widget often need to be partially or fully redrawn, e.g.
when another window is moved and uncovers part of the widget, or when the
window containing it is resized. It is also possible to explicitly cause a
widget to be redrawn, by calling [`method@Gtk.Widget.queue_draw`]. GTK takes
widget to be redrawn, by calling [method@Gtk.Widget.queue_draw]. GTK takes
care of most of the details by providing a ready-to-use cairo context to the
draw function.
@@ -690,16 +690,16 @@ gcc $( pkg-config --cflags gtk4 ) -o example-3 example-3.c $( pkg-config --libs
Note that `GtkBuilder` can also be used to construct objects that are
not widgets, such as tree models, adjustments, etc. That is the reason
the method we use here is called [`method@Gtk.Builder.get_object`] and returns
the method we use here is called [method@Gtk.Builder.get_object] and returns
a `GObject` instead of a `GtkWidget`.
Normally, you would pass a full path to [`method@Gtk.Builder.add_from_file`] to
Normally, you would pass a full path to [method@Gtk.Builder.add_from_file] to
make the execution of your program independent of the current directory.
A common location to install UI descriptions and similar data is
`/usr/share/appname`.
It is also possible to embed the UI description in the source code as a
string and use [`method@Gtk.Builder.add_from_string`] to load it. But keeping the
string and use [method@Gtk.Builder.add_from_string] to load it. But keeping the
UI description in a separate file has several advantages: It is then possible
to make minor adjustments to the UI without recompiling your program, and,
more importantly, graphical UI editors such as [Glade](http://glade.gnome.org)
@@ -985,7 +985,7 @@ glib-compile-resources exampleapp.gresource.xml --target=resources.c --generate-
```
The gnome module of the [Meson build system](https://mesonbuild.com)
provides the [`gnome.compile_resources()`](https://mesonbuild.com/Gnome-module.html#gnomecompile_resources)
provides the [gnome.compile_resources()](https://mesonbuild.com/Gnome-module.html#gnomecompile_resources)
method for this task.
Our application now looks like this:
@@ -1081,7 +1081,7 @@ tell it to display information about our stack.
The stack switcher gets all its information it needs to display tabs from
the stack that it belongs to. Here, we are passing the label to show for
each file as the last argument to the [`method@Gtk.Stack.add_titled`]
each file as the last argument to the [method@Gtk.Stack.add_titled]
function.
Our application is beginning to take shape:
@@ -1221,7 +1221,7 @@ Before we can make use of this schema in our application, we need to compile
it into the binary form that GSettings expects. GIO provides
[macros](https://developer.gnome.org/gio/2.36/ch31s06.html) to do this in
autotools-based projects, and the gnome module of the Meson build system
provides the [`gnome.compile_schemas()`](https://mesonbuild.com/Gnome-module.html#gnomecompile_schemas)
provides the [gnome.compile_schemas()](https://mesonbuild.com/Gnome-module.html#gnomecompile_schemas)
method for this task.
Next, we need to connect our settings to the widgets that they are supposed

View File

@@ -24,17 +24,17 @@ search_index = true
[dependencies."Pango-1.0"]
name = "Pango"
description = "Text shaping and rendering"
docs_url = "https://developer.gnome.org/pango/stable"
docs_url = "https://docs.gtk.org/Pango/"
[dependencies."Gdk-4.0"]
name = "GDK"
description = "The GTK windowing system abstraction"
docs_url = "https://gnome.pages.gitlab.gnome.org/gtk/gdk4/"
docs_url = "https://docs.gtk.org/gdk4/"
[dependencies."Gsk-4.0"]
name = "GSK"
description = "The GTK rendering abstraction"
docs_url = "https://gnome.pages.gitlab.gnome.org/gtk/gsk4/"
docs_url = "https://docs.gtk.org/gsk4/"
[theme]
name = "basic"

View File

@@ -7,7 +7,7 @@ Title: Initialization
Before using GTK, you need to initialize it using [func@Gtk.init]; this
connects to the windowing system, sets up the locale and performs other
initialization tasks. [func@Gtk.init] exits the application if errors occur;
to avoid this, you can use [`func@Gtk.init_check`], which allows you to recover
to avoid this, you can use [func@Gtk.init_check], which allows you to recover
from a failed GTK initialization; for instance, you might start up your
application in text mode instead.

View File

@@ -37,6 +37,7 @@ if get_option('gtk_doc')
gidocgen,
'generate',
'--quiet',
'--fatal-warnings',
'--add-include-path=@0@'.format(meson.current_build_dir() / '../../../gtk'),
'--config=@INPUT0@',
'--output-dir=@OUTPUT@',
@@ -70,16 +71,21 @@ if get_option('man-pages') and xsltproc.found()
man_files = [
[ 'gtk4-broadwayd', '1', ],
[ 'gtk4-builder-tool', '1', ],
[ 'gtk4-demo', '1', ],
[ 'gtk4-demo-application', '1', ],
[ 'gtk4-encode-symbolic-svg', '1', ],
[ 'gtk4-icon-browser', '1', ],
[ 'gtk4-launch', '1', ],
[ 'gtk4-query-settings', '1', ],
[ 'gtk4-update-icon-cache', '1', ],
[ 'gtk4-widget-factory', '1', ],
]
if get_option('demos')
man_files += [
[ 'gtk4-demo', '1', ],
[ 'gtk4-demo-application', '1', ],
[ 'gtk4-widget-factory', '1', ],
[ 'gtk4-icon-browser', '1', ],
]
endif
foreach man: man_files
man_name = man.get(0)
man_section = man.get(1, '1')

File diff suppressed because it is too large Load Diff

View File

@@ -33,13 +33,13 @@ the question you have, this list is a good place to start.
4. How does memory management work in GTK? Should I free data returned from functions?
See the documentation for #GObject and #GInitiallyUnowned. For #GObject note
specifically g_object_ref() and g_object_unref(). #GInitiallyUnowned is a
subclass of #GObject so the same points apply, except that it has a "floating"
See the documentation for `GObject` and `GInitiallyUnowned`. For `GObject` note
specifically `g_object_ref()` and `g_object_unref()`. `GInitiallyUnowned` is a
subclass of `GObject` so the same points apply, except that it has a "floating"
state (explained in its documentation).
For strings returned from functions, they will be declared "const" if they should
not be freed. Non-const strings should be freed with g_free(). Arrays follow the
not be freed. Non-const strings should be freed with `g_free()`. Arrays follow the
same rule. If you find an undocumented exception to the rules, please
[file a bug report.](https://gitlab.gnome.org/GNOME/gtk/issues/new).
@@ -47,7 +47,7 @@ the question you have, this list is a good place to start.
documentation can provide useful hints for memory handling semantics as well.
5. Why does my program leak memory, if I destroy a widget immediately
after creating it ?
after creating it?
If `GtkFoo` isn't a toplevel window, then
@@ -60,7 +60,7 @@ the question you have, this list is a good place to start.
want standard reference counting, not floating reference counting.
To get this, you must acquire a reference to the widget and drop the
floating reference (_ref and sink_ in GObject parlance) after creating it:
floating reference (_ref and sink_ in `GObject` parlance) after creating it:
foo = gtk_foo_new ();
g_object_ref_sink (foo);
@@ -72,12 +72,12 @@ the question you have, this list is a good place to start.
6. How do I use GTK with threads?
GTK requires that all GTK API calls are made from the same thread in which
the #GtkApplication was created, or gtk_init() was called (the _main thread_).
the `GtkApplication` was created, or `gtk_init()` was called (the _main thread_).
If you want to take advantage of multi-threading in a GTK application,
it is usually best to send long-running tasks to worker threads, and feed
the results back to the main thread using g_idle_add() or #GAsyncQueue. GIO
offers useful tools for such an approach such as #GTask.
the results back to the main thread using `g_idle_add()` or `GAsyncQueue`. GIO
offers useful tools for such an approach such as `GTask`.
7. How do I internationalize a GTK program?
@@ -239,7 +239,7 @@ the question you have, this list is a good place to start.
gdk_surface_set_events (gdk_surface,
(GdkEventMask) GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
There are very few functions that require this cast, however.
10. How do I use GTK with other non-C languages?
@@ -250,14 +250,14 @@ the question you have, this list is a good place to start.
11. How do I load an image or animation from a file?
To load an image file straight into a display widget, use
gtk_image_new_from_file(). To load an image for another purpose, use
gdk_texture_new_from_file(). To load a video from a file, use
gtk_media_file_new_for_file().
[ctor@Gtk.Image.new_from_file]. To load an image for another purpose, use
[ctor@Gdk.Texture.new_from_file]. To load a video from a file, use
[ctor@Gtk.MediaFile.new_for_file].
12. How do I draw text?
To draw a piece of text onto a cairo surface, use a Pango layout and
pango_cairo_show_layout().
[func@PangoCairo.show_layout].
layout = gtk_widget_create_pango_layout (widget, text);
fontdesc = pango_font_description_from_string ("Luxi Mono 12");
@@ -265,17 +265,17 @@ the question you have, this list is a good place to start.
pango_cairo_show_layout (cr, layout);
pango_font_description_free (fontdesc);
g_object_unref (layout);
See also the [Cairo Rendering](https://developer.gnome.org/pango/stable/pango-Cairo-Rendering.html)
section of the [Pango documentation](https://developer.gnome.org/pango/stable/).
To draw a piece of text in a widget snapshot() implementation, use
gtk_snapshot_append_layout().
To draw a piece of text in a widget [vfunc@Gtk.Widget.snapshot] implementation,
use [method@Gtk.Snapshot.append_layout].
13. How do I measure the size of a piece of text?
To obtain the size of a piece of text, use a Pango layout and
pango_layout_get_pixel_size(), using code like the following:
[method@Pango.Layout.get_pixel_size], using code like the following:
layout = gtk_widget_create_pango_layout (widget, text);
fontdesc = pango_font_description_from_string ("Luxi Mono 12");
@@ -294,7 +294,7 @@ the question you have, this list is a good place to start.
compiler to optimize the call away if it appears that the value is not
being used.
GLib provides the g_type_ensure() function to work around this problem.
GLib provides the `g_type_ensure()` function to work around this problem.
g_type_ensure (GTK_TYPE_BLAH);
@@ -311,34 +311,34 @@ the question you have, this list is a good place to start.
and the required formatting flexibility.
If you want to display a large amount of data in a uniform way, your best
option is a #GtkTreeView widget. See the [tree widget overview](#TreeWidget).
option is a [class@Gtk.TreeView] widget. See the [tree widget overview](#TreeWidget).
A list is just a tree with no branches, so the treeview widget is used for
lists as well.
If you want to display a small amount of items, but need flexible formatting
and widgetry inside the list, then you probably want to use a #GtkListBox,
and widgetry inside the list, then you probably want to use a [class@Gtk.ListBox],
which uses regular widgets for display.
17. ...for multi-line text display or editing?
See the [text widget overview](#TextWidget) -- you should use the
#GtkTextView widget.
[class@Gtk.TextView] widget.
If you only have a small amount of text, #GtkLabel may also be appropriate
of course. It can be made selectable with gtk_label_set_selectable(). For a
single-line text entry, see #GtkEntry.
If you only have a small amount of text, [class@Gtk.Label] may also be appropriate
of course. It can be made selectable with [method@Gtk.Label.set_selectable]. For a
single-line text entry, see [class@Gtk.Entry].
18. ...to display an image or animation?
GTK has two widgets that are dedicated to displaying images. #GtkImage, for
small, fixed-size icons and #GtkPicture for content images.
GTK has two widgets that are dedicated to displaying images. [class@Gtk.Image], for
small, fixed-size icons and [class@Gtk.Picture] for content images.
Both can display images in just about any format GTK understands.
You can also use #GtkDrawingArea if you need to do something more complex,
You can also use [class@Gtk.DrawingArea] if you need to do something more complex,
such as draw text or graphics over the top of the image.
Both GtkImage and GtkPicture can display animations and videos as well.
To show an webm file, load it with the GtkMediaFile API and then use
Both [class@Gtk.Image] and [class@Gtk.Picture] can display animations and videos as well.
To show an webm file, load it with the [class@Gtk.MediaFile] API and then use
it as a paintable:
mediafile = gtk_media_file_new_for_filename ("example.webm");
@@ -347,8 +347,10 @@ the question you have, this list is a good place to start.
19. ...for presenting a set of mutually-exclusive choices, where Windows
would use a combo box?
With GTK, a #GtkComboBox is the recommended widget to use for this use case.
If you need an editable text entry, use the #GtkComboBox:has-entry property.
With GTK, a [class@Gtk.ComboBox] is the recommended widget to use for this use case.
If you need an editable text entry, use the [property@Gtk.ComboBox:has-entry] property.
A newer alternative is [class@Gtk.DropDown].
## Questions about GtkWidget
@@ -357,8 +359,8 @@ the question you have, this list is a good place to start.
The background color of a widget is determined by the CSS style that applies
to it. To change that, you can set style classes on the widget, and provide
custom CSS to change the appearance. Such CSS can be loaded with
gtk_css_provider_load_from_file() and its variants.
See gtk_style_context_add_provider().
[method@Gtk.CssProvider.load_from_file] and its variants.
See [method@Gtk.StyleContext.add_provider].
21. How do I change the font of a widget?
@@ -368,7 +370,7 @@ the question you have, this list is a good place to start.
gtk_label_set_markup (label, "<big>big tex</big>");
This is preferred for many apps because it's a relative size to the
user's chosen font size. See g_markup_escape_text() if you are
user's chosen font size. See `g_markup_escape_text()` if you are
constructing such strings on the fly.
You can also change the font of a widget by putting
@@ -377,24 +379,24 @@ the question you have, this list is a good place to start.
font: Sans 30;
}
in a CSS file, loading it with gtk_css_provider_load_from_file(), and
adding the provider with gtk_style_context_add_provider_for_display().
in a CSS file, loading it with [method@Gtk.CssProvider.load_from_file], and
adding the provider with [func@Gtk.StyleContext.add_provider_for_display].
To associate this style information with your widget, set a style class
on its #GtkStyleContext using gtk_style_context_add_class(). The advantage
on the widget using [method@Gtk.Widget.add_css_class]. The advantage
of this approach is that users can then override the font you have chosen.
See the #GtkStyleContext documentation for more discussion.
See the `GtkStyleContext` documentation for more discussion.
22. How do I disable/ghost/desensitize a widget?
In GTK a disabled widget is termed _insensitive_.
See gtk_widget_set_sensitive().
See [method@Gtk.Widget.set_sensitive].
## GtkTextView questions
23. How do I get the contents of the entire text widget as a string?
See gtk_text_buffer_get_bounds() and gtk_text_buffer_get_text()
or gtk_text_iter_get_text().
See [method@Gtk.TextBuffer.get_bounds] and [method@Gtk.TextBuffer.get_text]
or [method@Gtk.TextIter.get_text].
GtkTextIter start, end;
GtkTextBuffer *buffer;
@@ -405,10 +407,10 @@ the question you have, this list is a good place to start.
text = gtk_text_iter_get_text (&start, &end);
/* use text */
g_free (text);
24. How do I make a text widget display its complete contents in a specific font?
If you use gtk_text_buffer_insert_with_tags() with appropriate tags to
If you use [method@Gtk.TextBuffer.insert_with_tags] with appropriate tags to
select the font, the inserted text will have the desired appearance, but
text typed in by the user before or after the tagged block will appear in
the default style.
@@ -421,40 +423,40 @@ the question you have, this list is a good place to start.
*before*, keeping the mark at the end.
To ensure that the end of the buffer remains visible, use
gtk_text_view_scroll_to_mark() to scroll to the mark after
[method@Gtk.TextView.scroll_to_mark] to scroll to the mark after
inserting new text.
The gtk-demo application contains an example of this technique.
The gtk4-demo application contains an example of this technique.
## GtkTreeView questions
26. How do I associate some data with a row in the tree?
Remember that the #GtkTreeModel columns don't necessarily have to be
Remember that the [class@Gtk.TreeModel] columns don't necessarily have to be
displayed. So you can put non-user-visible data in your model just
like any other data, and retrieve it with gtk_tree_model_get().
See the [tree widget overview](#TreeWidget).
like any other data, and retrieve it with [method@Gtk.TreeModel.get].
See the [tree widget overview](#TreeWidget).
27. How do I put an image and some text in the same column?
You can pack more than one #GtkCellRenderer into a single #GtkTreeViewColumn
using gtk_tree_view_column_pack_start() or gtk_tree_view_column_pack_end().
So pack both a #GtkCellRendererPixbuf and a #GtkCellRendererText into the
You can pack more than one [class@Gtk.CellRenderer] into a single [class@Gtk.TreeViewColumn]
using [method@Gtk.TreeViewColumn.pack_start] or [method@Gtk.TreeViewColumn.pack_end].
So pack both a [class@Gtk.CellRendererPixbuf] and a [class@Gtk.CellRendererText] into the
column.
28. I can set data easily on my #GtkTreeStore or #GtkListStore models using
gtk_list_store_set() and gtk_tree_store_set(), but can't read it back?
28. I can set data easily on my [class@Gtk.TreeStore] or [class@Gtk.ListStore] models using
[method@Gtk.ListStore.set] and [method@Gtk.TreeStore.set], but can't read it back?
Both the #GtkTreeStore and the #GtkListStore implement the #GtkTreeModel
Both the [class@Gtk.TreeStore] and the [class@Gtk.ListStore] implement the [class@Gtk.TreeModel]
interface. As a consequence, you can use any function this interface
implements. The easiest way to read a set of data back is to use
gtk_tree_model_get().
[method@Gtk.TreeModel.get].
29. How do I change the way that numbers are formatted by #GtkTreeView?
29. How do I change the way that numbers are formatted by `GtkTreeView`?
Use gtk_tree_view_insert_column_with_data_func() or
gtk_tree_view_column_set_cell_data_func() and do the conversion
from number to string yourself (with, say, g_strdup_printf()).
Use [method@Gtk.TreeView.insert_column_with_data_func] or
[method@Gtk.TreeViewColumn.set_cell_data_func] and do the conversion
from number to string yourself (with, say, `g_strdup_printf()`).
The following example demonstrates this:
@@ -527,29 +529,29 @@ the question you have, this list is a good place to start.
30. How do I hide the expander arrows in my tree view?
Set the expander-column property of the tree view to a hidden column.
See gtk_tree_view_set_expander_column() and gtk_tree_view_column_set_visible().
See [method@Gtk.TreeView.set_expander_column] and [method@Gtk.TreeViewColumn.set_visible].
## Using cairo with GTK
31. How do I use cairo to draw in GTK applications?
Use gtk_snapshot_append_cairo() in your #GtkWidgetClass.snapshot() vfunc
Use [method@Gtk.Snapshot.append_cairo] in your [vfunc@Gtk.Widget.snapshot] vfunc
to obtain a cairo context and draw with that.
32. Can I improve the performance of my application by using another backend
of cairo (such as GL)?
No. Most drawing in GTK is not done via cairo anymore (but instead
by the GL or Vulkan renderers of GSK).
If you use cairo for drawing your own widgets, gtk_snapshot_append_cairo()
If you use cairo for drawing your own widgets, [method@Gtk.Snapshot.append_cairo]
will choose the most appropriate surface type for you.
If you are interested in using GL for your own drawing, see #GtkGLArea.
If you are interested in using GL for your own drawing, see [class@Gtk.GLArea].
33. Can I use cairo to draw on a #GdkPixbuf?
33. Can I use cairo to draw on a `GdkPixbuf`?
No. The cairo image surface does not support the pixel format used by GdkPixbuf.
No. The cairo image surface does not support the pixel format used by `GdkPixbuf`.
If you need to get cairo drawing into a format that can be displayed efficiently
by GTK, you may want to use an image surface and gdk_memory_texture_new().
by GTK, you may want to use an image surface and [ctor@Gdk.MemoryTexture.new].

View File

@@ -22,20 +22,26 @@ are only available when GTK has been configured with `-Ddebug=true`.
`builder`
: GtkBuilder support
`builder-objects`
: Unused GtkBuilder objects
`geometry`
: Size allocation
`icontheme`
: Icon themes
`iconfallback`
: Information about icon fallback
`keybindings`
: Keybindings
: Keyboard shortcuts
`modules`
: Loading of modules
: Modules and extensions
`printing`
: Printing support
: Printing
`size-request`
: Size requests
@@ -46,6 +52,15 @@ are only available when GTK has been configured with `-Ddebug=true`.
`tree`
: Tree widget internals
`constraints`
: Constraints and the constraint solver
`layout`
: Layout managers
`acccessibility`
: Accessibility state changs
A number of keys are influencing behavior instead of just logging:
`interactive`
@@ -57,15 +72,6 @@ A number of keys are influencing behavior instead of just logging:
`touchscreen`
: Pretend the pointer is a touchscreen device
`updates`
: Visual feedback about window updates
`resize`
: Highlight resizing widgets
`layout`
: Show layout borders
`snapshot`
: Include debug render nodes in the generated snapshots
@@ -324,9 +330,15 @@ using and the GDK backend supports them:
`cairo`
: Selects the fallback Cairo renderer
`gl`
`opengl`
: Selects the default OpenGL renderer
`gl`
: Selects the "gl" OpenGL renderer
`ngl`
: Selects the "ngl" OpenGL renderer
`vulkan`
: Selects the Vulkan renderer

View File

@@ -8,7 +8,7 @@ an application's user interface elements. Assistive technology (AT)
applications, like Orca, convey this information to users with disabilities,
or reduced abilities, to help them use the application.
Standard GTK controls implement the #GtkAccessible interface and are thus
Standard GTK controls implement the `GtkAccessible` interface and are thus
accessible to ATs by default. This means that if you use GTK controls such
as `GtkButton`, `GtkEntry`, or `GtkListView`, you only need to supply
application-specific details when the defaults values are incomplete. You
@@ -103,39 +103,39 @@ for instance:
- a toggle button will change its %GTK_ACCESSIBLE_STATE_CHECKED state every
time it is toggled, either by the user or programmatically
- setting the mnemonic widget on a #GtkLabel will update the
- setting the mnemonic widget on a `GtkLabel` will update the
%GTK_ACCESSIBLE_RELATION_LABELLED_BY relation on the widget with a
reference to the label
- changing the #GtkAdjustment instance on a #GtkScrollbar will change the
- changing the `GtkAdjustment` instance on a `GtkScrollbar` will change the
%GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, %GTK_ACCESSIBLE_PROPERTY_VALUE_MIN,
and %GTK_ACCESSIBLE_PROPERTY_VALUE_NOW properties with the upper, lower,
and value properties of the #GtkAdjustment
and value properties of the `GtkAdjustment`
See the [WAI-ARIA](https://www.w3.org/WAI/PF/aria/appendices#quickref) list
of attributes for additional information.
#### List of accessible states
Each state name is part of the #GtkAccessibleState enumeration.
Each state name is part of the `GtkAccessibleState` enumeration.
| State name | ARIA attribute | Value type | Notes |
|------------|----------------|------------|-------|
| %GTK_ACCESSIBLE_STATE_BUSY | “aria-busy” | boolean |
| %GTK_ACCESSIBLE_STATE_CHECKED | “aria-checked” | #GtkAccessibleTristate | Indicates the current state of a [class@Gtk.CheckButton] |
| %GTK_ACCESSIBLE_STATE_CHECKED | “aria-checked” | `GtkAccessibleTristate` | Indicates the current state of a [class@Gtk.CheckButton] |
| %GTK_ACCESSIBLE_STATE_DISABLED | “aria-disabled” | boolean | Corresponds to the [property@Gtk.Widget:sensitive] property on [class@Gtk.Widget] |
| %GTK_ACCESSIBLE_STATE_EXPANDED | “aria-expanded” | boolean or undefined | Corresponds to the [property@Gtk.Expander:expanded] property on [class@Gtk.Expander] |
| %GTK_ACCESSIBLE_STATE_HIDDEN | “aria-hidden” | boolean | Corresponds to the [property@Gtk.Widget:visible] property on [class@Gtk.Widget] |
| %GTK_ACCESSIBLE_STATE_INVALID | “aria-invalid” | #GtkAccessibleInvalidState | Set when a widget is showing an error |
| %GTK_ACCESSIBLE_STATE_PRESSED | “aria-pressed” | #GtkAccessibleTristate | Indicates the current state of a [class@Gtk.ToggleButton] |
| %GTK_ACCESSIBLE_STATE_INVALID | “aria-invalid” | `GtkAccessibleInvalidState` | Set when a widget is showing an error |
| %GTK_ACCESSIBLE_STATE_PRESSED | “aria-pressed” | `GtkAccessibleTristate` | Indicates the current state of a [class@Gtk.ToggleButton] |
| %GTK_ACCESSIBLE_STATE_SELECTED | “aria-selected” | boolean or undefined | Set when a widget is selected |
#### List of accessible properties
Each property name is part of the #GtkAccessibleProperty enumeration.
Each property name is part of the `GtkAccessibleProperty` enumeration.
| State name | ARIA attribute | Value type |
|------------|----------------|------------|
| %GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE | “aria-autocomplete” | #GtkAccessibleAutocomplete |
| %GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE | “aria-autocomplete” | `GtkAccessibleAutocomplete` |
| %GTK_ACCESSIBLE_PROPERTY_DESCRIPTION | “aria-description” | translatable string |
| %GTK_ACCESSIBLE_PROPERTY_HAS_POPUP | “aria-haspopup” | boolean |
| %GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS | “aria-keyshortcuts” | string |
@@ -144,12 +144,12 @@ Each property name is part of the #GtkAccessibleProperty enumeration.
| %GTK_ACCESSIBLE_PROPERTY_MODAL | “aria-modal” | boolean |
| %GTK_ACCESSIBLE_PROPERTY_MULTI_LINE | “aria-multiline” | boolean |
| %GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE | “aria-multiselectable” | boolean |
| %GTK_ACCESSIBLE_PROPERTY_ORIENTATION | “aria-orientation” | #GtkOrientation |
| %GTK_ACCESSIBLE_PROPERTY_ORIENTATION | “aria-orientation” | `GtkOrientation` |
| %GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER | “aria-placeholder” | translatable string |
| %GTK_ACCESSIBLE_PROPERTY_READ_ONLY | “aria-readonly” | boolean |
| %GTK_ACCESSIBLE_PROPERTY_REQUIRED | “aria-required” | boolean |
| %GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION | “aria-roledescription” | translatable string |
| %GTK_ACCESSIBLE_PROPERTY_SORT | “aria-sort” | #GtkAccessibleSort |
| %GTK_ACCESSIBLE_PROPERTY_SORT | “aria-sort” | `GtkAccessibleSort` |
| %GTK_ACCESSIBLE_PROPERTY_VALUE_MAX | “aria-valuemax” | double |
| %GTK_ACCESSIBLE_PROPERTY_VALUE_MIN | “aria-valuemin” | double |
| %GTK_ACCESSIBLE_PROPERTY_VALUE_NOW | “aria-valuenow” | double |
@@ -157,22 +157,22 @@ Each property name is part of the #GtkAccessibleProperty enumeration.
#### List of accessible relations
Each relation name is part of the #GtkAccessibleRelation enumeration.
Each relation name is part of the `GtkAccessibleRelation` enumeration.
| State name | ARIA attribute | Value type |
|------------|----------------|------------|
| %GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT | “aria-activedescendant” | #GtkAccessible |
| %GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT | “aria-activedescendant” | `GtkAccessible` |
| %GTK_ACCESSIBLE_RELATION_COL_COUNT | “aria-colcount” | integer |
| %GTK_ACCESSIBLE_RELATION_COL_INDEX | “aria-colindex” | integer |
| %GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT | “aria-colindextext” | translatable string |
| %GTK_ACCESSIBLE_RELATION_COL_SPAN | “aria-colspan” | integer |
| %GTK_ACCESSIBLE_RELATION_CONTROLS | “aria-controls” | a list of #GtkAccessible |
| %GTK_ACCESSIBLE_RELATION_DESCRIBED_BY | “aria-describedby” | a list of #GtkAccessible |
| %GTK_ACCESSIBLE_RELATION_DETAILS | “aria-details” | a list of #GtkAccessible |
| %GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE | “aria-errormessage” | #GtkAccessible |
| %GTK_ACCESSIBLE_RELATION_FLOW_TO | “aria-flowto” | a list of #GtkAccessible |
| %GTK_ACCESSIBLE_RELATION_LABELLED_BY | “aria-labelledby” | a list of #GtkAccessible |
| %GTK_ACCESSIBLE_RELATION_OWNS | “aria-owns” | a list of #GtkAccessible |
| %GTK_ACCESSIBLE_RELATION_CONTROLS | “aria-controls” | a list of `GtkAccessible` |
| %GTK_ACCESSIBLE_RELATION_DESCRIBED_BY | “aria-describedby” | a list of `GtkAccessible` |
| %GTK_ACCESSIBLE_RELATION_DETAILS | “aria-details” | a list of `GtkAccessible` |
| %GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE | “aria-errormessage” | `GtkAccessible` |
| %GTK_ACCESSIBLE_RELATION_FLOW_TO | “aria-flowto” | a list of `GtkAccessible` |
| %GTK_ACCESSIBLE_RELATION_LABELLED_BY | “aria-labelledby” | a list of `GtkAccessible` |
| %GTK_ACCESSIBLE_RELATION_OWNS | “aria-owns” | a list of `GtkAccessible` |
| %GTK_ACCESSIBLE_RELATION_POS_IN_SET | “aria-posinset” | integer |
| %GTK_ACCESSIBLE_RELATION_ROW_COUNT | “aria-rowcount” | integer |
| %GTK_ACCESSIBLE_RELATION_ROW_INDEX | “aria-rowindex” | integer |
@@ -219,11 +219,11 @@ be used as part of the application's test suite to avoid regressions.
## Implementations
Each UI control implements the #GtkAccessible interface to allow widget and
Each UI control implements the `GtkAccessible` interface to allow widget and
application developers to specify the roles, state, and relations between UI
controls. This API is purely descriptive.
Each `GtkAccessible` implementation must provide a #GtkATContext instance,
Each `GtkAccessible` implementation must provide a `GtkATContext` instance,
which acts as a proxy to the specific platform's accessibility API:
* AT-SPI on Linux/BSD
@@ -256,7 +256,7 @@ is a promise that the widget being created will provide the same keyboard
interactions expected for a button. An accessible role of a button will not
turn automatically any widget into a `GtkButton`; but if your widget behaves
like a button, using the %GTK_ACCESSIBLE_ROLE_BUTTON will allow any
assistive technology to handle it like they would a #GtkButton.
assistive technology to handle it like they would a `GtkButton`.
### Attributes can both hide and enhance
@@ -308,7 +308,7 @@ interface.
A "presentation" role should not be confused with the
%GTK_ACCESSIBLE_STATE_HIDDEN state; the "hidden" state is transient, and is
typically controlled by showing and hiding a widget using the #GtkWidget
typically controlled by showing and hiding a widget using the `GtkWidget`
API.
## Design patterns and custom widgets
@@ -322,7 +322,7 @@ as well.
A button is a widget that enables users to trigger an action. While it is
recommended you use `GtkButton` for anything that looks and behaves like a
button, it is possible to apply a button behavior to UI elements like images
by using a #GtkGestureClick gesture. When doing so, you should:
by using a `GtkGestureClick` gesture. When doing so, you should:
- Give your widget the role %GTK_ACCESSIBLE_ROLE_BUTTON
- Install an action with no parameters, which will activate the widget
@@ -336,7 +336,7 @@ in the same way as a `GtkSpinButton` or `GtkSearchEntry`.
### Tab-based UI
If you make a tab-based interface, you should consider using #GtkStack
If you make a tab-based interface, you should consider using `GtkStack`
as the core, and just make a custom tab widget to control the active
stack page. When doing so, the following extra steps will ensure that
your tabs are accessible in the same way as `GtkStackSwitcher` or `GtkNotebook`:
@@ -344,7 +344,7 @@ your tabs are accessible in the same way as `GtkStackSwitcher` or `GtkNotebook`:
- Give your tab container the role %GTK_ACCESSIBLE_ROLE_TAB_LIST
- Give your tab widgets the role %GTK_ACCESSIBLE_ROLE_TAB
- Set up the %GTK_ACCESSIBLE_RELATION_CONTROLS relation between each
tab and the #GtkStackPage object for its page
tab and the `GtkStackPage` object for its page
- Set the %GTK_ACCESSIBLE_PROPERTY_SELECTED property on each tab, with
the active tab getting the value %TRUE, all others %FALSE
@@ -357,7 +357,7 @@ or add a `activate-tab` action on each tab.
### Value controls
A value control (ie a widget that controls a one-dimensional quantity
that can be represented by a #GtkAdjustment) can be represented to
that can be represented by a `GtkAdjustment`) can be represented to
accessible technologies by setting the %GTK_ACCESSIBLE_PROPERTY_VALUE_MIN,
%GTK_ACCESSIBLE_PROPERTY_VALUE_MAX, and %GTK_ACCESSIBLE_PROPERTY_VALUE_NOW
properties.

View File

@@ -24,25 +24,25 @@ you should be aware of what they refer to. These are often generic terms that
have a specific meaning in this context.
**_Views_** or **_list widgets_** are the widgets that hold and manage the lists.
Examples of these widgets would be #GtkListView or #GtkGridView.
Examples of these widgets would be `GtkListView` or `GtkGridView`.
Views display data from a **_model_**. A model is a #GListModel and models can
Views display data from a **_model_**. A model is a `GListModel` and models can
be provided in 3 ways or combinations thereof:
* Many list models implementations already exist. There are models that provide
specific data, like #GtkDirectoryList. And there are models like #GListStore
specific data, like `GtkDirectoryList`. And there are models like `GListStore`
that allow building lists manually.
* Wrapping list models like #GtkFilterListModel or #GtkSortListModel
* Wrapping list models like `GtkFilterListModel` or `GtkSortListModel`
modify, adapt or combine other models.
* Last but not least, developers are encouraged to create their own #GListModel
* Last but not least, developers are encouraged to create their own `GListModel`
implementations. The interface is kept deliberately small to make this easy.
The same model can be used in multiple different views and wrapped with
multiple different models at once.
The elements in a model are called **_items_**. All items are #GObjects.
The elements in a model are called **_items_**. All items are `GObjects`.
Every item in a model has a **_position_** which is the unsigned integer that
describes where in the model the item is located. The first item in a model is
@@ -56,11 +56,11 @@ with models. Oftentimes some things are really hard to do one way but very easy
the other way.
The other important part of a view is a **_factory_**. Each factory is
a #GtkListItemFactory implementation that takes care of mapping the items
a `GtkListItemFactory` implementation that takes care of mapping the items
of the model to widgets that can be shown in the view.
The way factories do this is by creating a **_listitem_** for each item that
is currently in use. Listitems are always #GtkListItem objects. They are only
is currently in use. Listitems are always `GtkListItem` objects. They are only
ever created by GTK and provide information about what item they are meant
to display.
@@ -71,28 +71,28 @@ for the data displayed, the programming language and development environment
is an important task that can simplify setting up the view tremendously.
Views support selections via a **_selection model_**. A selection model is an
implementation of the #GtkSelectionModel interface on top of the #GListModel
implementation of the `GtkSelectionModel` interface on top of the `GListModel`
interface that allows marking each item in a model as either selected or not
selected. Just like regular models, this can be implemented either by
implementing #GtkSelectionModel directly or by wrapping a model with one of
the GTK models provided for this purposes, such as #GtkNoSelection
or #GtkSingleSelection.
implementing `GtkSelectionModel` directly or by wrapping a model with one of
the GTK models provided for this purposes, such as `GtkNoSelection`
or `GtkSingleSelection`.
The behavior of selection models - ie which items they allow selecting and
what effect this has on other items - is completely up to the selection model.
As such, single-selections, multi-selections or sharing selection state between
different selection models and/or views is possible. The selection state of an
item is exposed in the listitem via the #GtkListItem:selected property.
item is exposed in the listitem via the `GtkListItem:selected` property.
Views and listitems also support activation. Activation means that double
clicking or pressing enter while inside a focused row will cause the view
to emit and activation signal such as #GtkListView::activate. This provides
to emit and activation signal such as `GtkListView::activate`. This provides
an easy way to set up lists, but can also be turned off on listitems if undesired.
Both selections and activation are supported among other things via widget
[actions](#actions-overview). This allows developers to add widgets to their
lists that cause selections to change or to trigger activation via
the #GtkActionable interface. For a list of all supported actions see the
the `GtkActionable` interface. For a list of all supported actions see the
relevant documentation.
## Behind the scenes
@@ -114,8 +114,8 @@ new position at any time causing any state to be lost.
Another important requirement for views is that they need to know which items
are not visible so they can be recycled. Views achieve that by implementing
the #GtkScrollable interface and expecting to be placed directly into
a #GtkScrolledWindow.
the `GtkScrollable` interface and expecting to be placed directly into
a `GtkScrolledWindow`.
Of course, if you are only using models with few items, this is not important
and you can treat views like any other widget. But if you use large lists and
@@ -128,8 +128,8 @@ tradeoffs of those and experiment with them.
GTK offers a wide variety of wrapping models which change or supplement an
existing model (or models) in some way. But when it comes to storing your
actual data, there are only a few ready-made choices available: #GListStore
and #GtkStringList.
actual data, there are only a few ready-made choices available: `GListStore`
and `GtkStringList`.
GListStore is backed by a balanced tree and has performance characteristics
that are expected for that data structure. It works reasonably well for dataset
@@ -143,7 +143,7 @@ place where you would otherwise use `char*[]` and works best if the dataset
is not very dynamic.
If these models don't fit your use case or scalability requirements, you
should make a custom #GListModel. It is a small interface and not very hard
should make a custom `GListModel`. It is a small interface and not very hard
to implement.
For asymptotic performance comparisons between tree- and array-based
@@ -152,23 +152,23 @@ implementations, see this
## Displaying trees
While #GtkTreeView provided built-in support for trees, the list widgets, and
in particular #GListModel do not. This was a design choice because the common
While `GtkTreeView` provided built-in support for trees, the list widgets, and
in particular `GListModel` do not. This was a design choice because the common
use case is displaying lists and not trees and it greatly simplifies the API
interface provided.
However, GTK provides functionality to make trees look and behave like lists
for the people who still want to display lists. This is achieved by using
the #GtkTreeListModel model to flatten a tree into a list. The #GtkTreeExpander
the `GtkTreeListModel` model to flatten a tree into a list. The `GtkTreeExpander`
widget can then be used inside a listitem to allow users to expand and collapse
rows and provide a similar experience to #GtkTreeView.
rows and provide a similar experience to `GtkTreeView`.
Developers should refer to those objects' API reference for more discussion
on the topic.
## List styles
One of the advantages of the new list widgets over #GtkTreeViews and cell
One of the advantages of the new list widgets over `GtkTreeViews` and cell
renderers is that they are fully themable using GTK CSS. This provides a
lot of flexibility. The themes that ship with GTK provide a few predefined
list styles that can be used in many situations:
@@ -192,7 +192,7 @@ style class.
## Comparison to GtkTreeView
Developers familiar with #GtkTreeView may wonder how this way of doing lists
Developers familiar with `GtkTreeView` may wonder how this way of doing lists
compares to the way they know. This section will try to outline the similarities
and differences between the two.
@@ -200,26 +200,26 @@ This new approach tries to provide roughly the same functionality as the old
approach but often uses a very different approach to achieve these goals.
The main difference and one of the primary reasons for this new development is
that items can be displayed using regular widgets and #GtkCellRenderer is no
that items can be displayed using regular widgets and `GtkCellRenderer` is no
longer necessary. This allows all benefits that widgets provide, such as complex
layout and animating widgets and not only makes cell renderers obsolete, but
also #GtkCellArea.
also `GtkCellArea`.
The other big difference is the massive change to the data model. #GtkTreeModel
was a rather complex interface for a tree data structure and #GListModel was
The other big difference is the massive change to the data model. `GtkTreeModel`
was a rather complex interface for a tree data structure and `GListModel` was
deliberately designed to be a simple data structure for lists only. (See
[above](#displaying-trees)) for how to still do trees with this new model.)
Another big change is that the new model allows for bulk changes via
the #GListModel:items-changed signal while #GtkTreeModel only allows a single
the `GListModel:items-changed` signal while `GtkTreeModel` only allows a single
item to change at once. The goal here is of course to encourage implementation
of custom list models.
Another consequence of the new model is that it is now easily possible to
refer to the contents of a row in the model directly by keeping the item,
while #GtkTreeRowReference was a very slow mechanism to achieve the same.
while `GtkTreeRowReference` was a very slow mechanism to achieve the same.
And because the items are real objects, developers can make them emit change
signals causing listitems and their children to update, which wasn't possible
with #GtkTreeModel.
with `GtkTreeModel`.
The selection handling is also different. While selections used to be managed
via custom code in each widget, selection state is now meant to be managed by
@@ -229,24 +229,24 @@ specialized requirements.
Finally here's a quick list of equivalent functionality to look for when
transitioning code for easy lookup:
| Old | New |
| ------------------- | ----------------------------------- |
| #GtkTreeModel | #GListModel |
| #GtkTreePath | #guint position, #GtkTreeListRow |
| #GtkTreeIter | #guint position |
| #GtkTreeRowReference | #GObject item |
| #GtkListStore | #GListStore |
| #GtkTreeStore | #GtkTreeListModel, #GtkTreeExpander |
| #GtkTreeSelection | #GtkSelectionModel |
| #GtkTreeViewColumn | #GtkColumnView |
| #GtkTreeView | #GtkListView, #GtkColumnView |
| #GtkCellView | #GtkListItemWidget |
| #GtkComboBox | #GtkDropDown |
| #GtkIconView | #GtkGridView |
| #GtkTreeSortable | #GtkColumnView |
| #GtkTreeModelSort | #GtkSortListModel |
| #GtkTreeModelFilter | #GtkFilterListModel |
| #GtkCellLayout | #GtkListItemFactory |
| #GtkCellArea | #GtkWidget |
| #GtkCellRenderer | #GtkWidget |
| Old | New |
| -------------------- | ------------------------------------ |
| `GtkTreeModel` | `GListModel` |
| `GtkTreePath` | `guint` position, `GtkTreeListRow` |
| `GtkTreeIter` | `guint` position |
| `GtkTreeRowReference`| `GObject` item |
| `GtkListStore` | `GListStore` |
| `GtkTreeStore` | `GtkTreeListModel`, `GtkTreeExpander`|
| `GtkTreeSelection` | `GtkSelectionModel` |
| `GtkTreeViewColumn` | `GtkColumnView` |
| `GtkTreeView` | `GtkListView`, `GtkColumnView` |
| `GtkCellView` | `GtkListItemWidget` |
| `GtkComboBox` | `GtkDropDown` |
| `GtkIconView` | `GtkGridView` |
| `GtkTreeSortable` | `GtkColumnView` |
| `GtkTreeModelSort` | `GtkSortListModel` |
| `GtkTreeModelFilter` | `GtkFilterListModel` |
| `GtkCellLayout` | `GtkListItemFactory` |
| `GtkCellArea` | `GtkWidget` |
| `GtkCellRenderer` | `GtkWidget` |

View File

@@ -2,15 +2,15 @@ Title: Text Widget Overview
Slug: gtk-textview
GTK has an extremely powerful framework for multiline text editing. The
primary objects involved in the process are #GtkTextBuffer, which represents the
text being edited, and #GtkTextView, a widget which can display a #GtkTextBuffer.
primary objects involved in the process are `GtkTextBuffer`, which represents the
text being edited, and `GtkTextView`, a widget which can display a `GtkTextBuffer`.
Each buffer can be displayed by any number of views.
One of the important things to remember about text in GTK is that it's in
the UTF-8 encoding. This means that one character can be encoded as multiple
bytes. Character counts are usually referred to as _offsets_, while byte
counts are called _indexes_. If you confuse these two, things will work fine
with ASCII, but as soon as your buffer contains multibyte characters, bad
with ASCII, but as soon as your buffer contains multibyte characters, bad
things will happen.
Text in a buffer can be marked with _tags_. A tag is an attribute that can
@@ -19,10 +19,10 @@ and make the text inside the tag bold. However, the tag concept is more
general than that; tags don't have to affect appearance. They can instead
affect the behavior of mouse and key presses, "lock" a range of text so the
user can't edit it, or countless other things. A tag is represented by a
#GtkTextTag object. One #GtkTextTag can be applied to any number of text
`GtkTextTag` object. One `GtkTextTag` can be applied to any number of text
ranges in any number of buffers.
Each tag is stored in a #GtkTextTagTable. A tag table defines a set of
Each tag is stored in a `GtkTextTagTable`. A tag table defines a set of
tags that can be used together. Each buffer has one tag table associated with
it; only tags from that tag table can be used with the buffer. A single tag
table can be shared between multiple buffers, however.
@@ -32,36 +32,36 @@ your tag that makes things bold "bold"), but they can also be anonymous (which
is convenient if you're creating tags on-the-fly).
Most text manipulation is accomplished with _iterators_, represented by a
#GtkTextIter. An iterator represents a position between two characters in
the text buffer. #GtkTextIter is a struct designed to be allocated on the
`GtkTextIter`. An iterator represents a position between two characters in
the text buffer. `GtkTextIter` is a struct designed to be allocated on the
stack; it's guaranteed to be copiable by value and never contain any
heap-allocated data. Iterators are not valid indefinitely; whenever the
buffer is modified in a way that affects the number of characters in the
buffer, all outstanding iterators become invalid. (Note that deleting 5
characters and then reinserting 5 still invalidates iterators, though you
end up with the same number of characters you pass through a state with a
characters and then reinserting 5 still invalidates iterators, though you
end up with the same number of characters you pass through a state with a
different number).
Because of this, iterators can't be used to preserve positions across buffer
modifications. To preserve a position, the #GtkTextMark object is ideal. You
can think of a mark as an invisible cursor or insertion point; it floats in
the buffer, saving a position. If the text surrounding the mark is deleted,
the mark remains in the position the text once occupied; if text is inserted
at the mark, the mark ends up either to the left or to the right of the new
modifications. To preserve a position, the `GtkTextMark` object is ideal. You
can think of a mark as an invisible cursor or insertion point; it floats in
the buffer, saving a position. If the text surrounding the mark is deleted,
the mark remains in the position the text once occupied; if text is inserted
at the mark, the mark ends up either to the left or to the right of the new
text, depending on its _gravity_. The standard text cursor in left-to-right
languages is a mark with right gravity, because it stays to the right of
inserted text.
Like tags, marks can be either named or anonymous. There are two marks
built-in to #GtkTextBuffer; these are named "insert" and "selection_bound"
built-in to `GtkTextBuffer`; these are named "insert" and "selection_bound"
and refer to the insertion point and the boundary of the selection which
is not the insertion point, respectively. If no text is selected, these
two marks will be in the same position. You can manipulate what is selected
and where the cursor appears by moving these marks around.
If you want to place the cursor in response to a user action, be sure to use
gtk_text_buffer_place_cursor(), which moves both at once without causing a
temporary selection (moving one then the other temporarily selects the range in
gtk_text_buffer_place_cursor(), which moves both at once without causing a
temporary selection (moving one then the other temporarily selects the range in
between the old and new positions).
Text buffers always contain at least one line, but may be empty (that
@@ -69,7 +69,7 @@ is, buffers can contain zero characters). The last line in the text
buffer never ends in a line separator (such as newline); the other
lines in the buffer always end in a line separator. Line separators
count as characters when computing character counts and character
offsets. Note that some Unicode line separators are represented with
offsets. Note that some Unicode line separators are represented with
multiple bytes in UTF-8, and the two-character sequence "\r\n" is also
considered a line separator.
@@ -83,7 +83,7 @@ gtk_text_buffer_end_irreversible_action().
## Simple Example
The simplest usage of #GtkTextView might look like this:
The simplest usage of `GtkTextView` might look like this:
``` {.c}
GtkWidget *view;
@@ -101,17 +101,17 @@ gtk_text_buffer_set_text (buffer, "Hello, this is some text", -1);
*/
```
In many cases it's also convenient to first create the buffer with
gtk_text_buffer_new(), then create a widget for that buffer with
gtk_text_view_new_with_buffer(). Or you can change the buffer the widget
In many cases it's also convenient to first create the buffer with
gtk_text_buffer_new(), then create a widget for that buffer with
gtk_text_view_new_with_buffer(). Or you can change the buffer the widget
displays after the widget is created with gtk_text_view_set_buffer().
## Example of Changing Text Attributes
The way to affect text attributes in #GtkTextView is to
The way to affect text attributes in `GtkTextView` is to
apply tags that change the attributes for a region of text.
For text features that come from the theme &mdash; such as font and
foreground color -- use CSS to override their default values.
For text features that come from the theme such as font and
foreground color use CSS to override their default values.
```
GtkWidget *view;
@@ -148,11 +148,11 @@ gtk_text_view_set_left_margin (GTK_TEXT_VIEW (view), 30);
/* Use a tag to change the color for just one part of the widget */
tag = gtk_text_buffer_create_tag (buffer, "blue_foreground",
"foreground", "blue",
NULL);
NULL);
gtk_text_buffer_get_iter_at_offset (buffer, &amp;start, 7);
gtk_text_buffer_get_iter_at_offset (buffer, &amp;end, 12);
gtk_text_buffer_apply_tag (buffer, tag, &amp;start, &amp;end);
```
The `gtk4-demo` application that comes with
GTK contains more example code for #GtkTextView.
GTK contains more example code for `GtkTextView`.

View File

@@ -1,8 +1,8 @@
Title: Tree and List Widget Overview
Slug: gtk-treeview
To create a tree or list in GTK, use the #GtkTreeModel interface in
conjunction with the #GtkTreeView widget. This widget is designed around
To create a tree or list in GTK, use the `GtkTreeModel` interface in
conjunction with the `GtkTreeView` widget. This widget is designed around
a _Model/View/Controller_ design and consists of four major parts:
- The tree view widget (GtkTreeView)
@@ -25,9 +25,9 @@ it be rendered as a checkbox?
## Creating a model
GTK provides two simple models that can be used: the #GtkListStore
and the #GtkTreeStore. GtkListStore is used to model list widgets,
while the GtkTreeStore models trees. It is possible to develop a new
GTK provides two simple models that can be used: the `GtkListStore`
and the `GtkTreeStore`. `GtkListStore` is used to model list widgets,
while the `GtkTreeStore` models trees. It is possible to develop a new
type of model, but the existing models should be satisfactory for all
but the most specialized of situations. Creating the model is quite
@@ -59,7 +59,7 @@ GtkTreeStore *store = gtk_tree_store_new (N_COLUMNS, /* Total number of co
Adding data to the model is done using gtk_tree_store_set() or
gtk_list_store_set(), depending upon which sort of model was
created. To do this, a #GtkTreeIter must be acquired. The iterator
created. To do this, a `GtkTreeIter` must be acquired. The iterator
points to the location where data will be added.
Once an iterator has been acquired, gtk_tree_store_set() is used to
@@ -119,8 +119,8 @@ gtk_tree_store_set (store, &iter2,
While there are several different models to choose from, there is
only one view widget to deal with. It works with either the list
or the tree store. Setting up a #GtkTreeView is not a difficult
matter. It needs a #GtkTreeModel to know where to retrieve its data
or the tree store. Setting up a `GtkTreeView` is not a difficult
matter. It needs a `GtkTreeModel` to know where to retrieve its data
from.
``` {.c}
@@ -131,16 +131,16 @@ tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
## Columns and cell renderers
Once the #GtkTreeView widget has a model, it will need to know how
Once the `GtkTreeView` widget has a model, it will need to know how
to display the model. It does this with columns and cell renderers.
Cell renderers are used to draw the data in the tree model in a
way. There are a number of cell renderers that come with GTK,
including the #GtkCellRendererText, #GtkCellRendererPixbuf and
the #GtkCellRendererToggle. It is relatively easy to write a
including the `GtkCellRendererText`, `GtkCellRendererPixbuf` and
the `GtkCellRendererToggle`. It is relatively easy to write a
custom renderer.
A #GtkTreeViewColumn is the object that GtkTreeView uses to organize
A `GtkTreeViewColumn` is the object that `GtkTreeView` uses to organize
the vertical columns in the tree view. It needs to know the name of
the column to label for the user, what type of cell renderer to use,
and which piece of data to retrieve from the model for a given row.
@@ -166,7 +166,7 @@ created and columns are added to it.
Most applications will need to not only deal with displaying data,
but also receiving input events from users. To do this, simply get
a reference to a selection object and connect to the
#GtkTreeSelection::changed signal.
`GtkTreeSelection::changed` signal.
``` {.c}
/* Prototype for selection handler callback */
@@ -205,11 +205,11 @@ tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data)
## Simple Example
Here is a simple example of using a #GtkTreeView widget in context
Here is a simple example of using a `GtkTreeView` widget in context
of the other widgets. It simply creates a simple model and view,
and puts them together. Note that the model is never populated
with data &mdash; that is left as an exercise for the reader.
More information can be found on this in the #GtkTreeModel section.
with data that is left as an exercise for the reader.
More information can be found on this in the `GtkTreeModel` section.
``` {.c}
enum

View File

@@ -1,5 +1,7 @@
Title: Widget Gallery
<style>p { display: flex; flex-flow: row wrap; }</style>
## Display widgets
[![label](label.png)](class.Label.html)

View File

@@ -18,3 +18,8 @@ or wayland-1.
### XDG_RUNTIME_DIR
Used to locate the Wayland socket to use.
## Wayland-specific APIs
See the [documentation](https://docs.gtk.org/gdk4-wayland/) for
Wayland-specific GDK APIs.

View File

@@ -25,6 +25,11 @@ high-dpi displays. Normally, GDK will pick up a suitable scale factor
for each monitor from the display system. This environment variable
allows to override that.
## X11-specific APIs
See the [documentation](https://docs.gtk.org/gdk4-x11/) for
X11-specific GDK APIs.
## Understanding the X11 architecture
People coming from a Windows or MacOS background often find certain

View File

@@ -3,7 +3,7 @@ toml_conf.set('version', meson.project_version())
gidocgen = find_program('gi-docgen', required: get_option('gtk_doc'))
docs_dir = gtk_datadir / 'doc/gtk4/reference'
docs_dir = gtk_datadir / 'doc'
subdir('gdk')
subdir('gsk')

View File

@@ -59,12 +59,14 @@ example_app_startup (GApplication *app)
}
static void
example_app_activate (GApplication *app)
example_app_create_window (GtkApplication *app,
const char *save_id)
{
ExampleAppWindow *win;
win = example_app_window_new (EXAMPLE_APP (app));
gtk_window_present (GTK_WINDOW (win));
gtk_widget_set_save_id (GTK_WIDGET (win), save_id);
/* FIXME: differentiate save ids */
}
static void
@@ -93,8 +95,8 @@ static void
example_app_class_init (ExampleAppClass *class)
{
G_APPLICATION_CLASS (class)->startup = example_app_startup;
G_APPLICATION_CLASS (class)->activate = example_app_activate;
G_APPLICATION_CLASS (class)->open = example_app_open;
GTK_APPLICATION_CLASS (class)->create_window = example_app_create_window;
}
ExampleApp *
@@ -103,5 +105,7 @@ example_app_new (void)
return g_object_new (EXAMPLE_APP_TYPE,
"application-id", "org.gtk.exampleapp",
"flags", G_APPLICATION_HANDLES_OPEN,
"register-session", TRUE,
"save-state", TRUE,
NULL);
}

View File

@@ -17,6 +17,8 @@ struct _ExampleAppWindow
GtkWidget *words;
GtkWidget *lines;
GtkWidget *lines_label;
GList *files;
};
G_DEFINE_TYPE (ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW)
@@ -211,14 +213,68 @@ example_app_window_dispose (GObject *object)
g_clear_object (&win->settings);
g_list_free_full (win->files, g_object_unref);
win->files = NULL;
G_OBJECT_CLASS (example_app_window_parent_class)->dispose (object);
}
static gboolean
example_app_window_save_state (GtkWidget *widget,
GVariantDict *dict,
gboolean *save_children)
{
ExampleAppWindow *win = EXAMPLE_APP_WINDOW (widget);
GVariantBuilder builder;
g_variant_builder_init (&builder, G_VARIANT_TYPE ("as"));
for (GList *l = win->files; l; l = l->next)
{
g_variant_builder_add (&builder, "s", g_file_peek_path (G_FILE (l->data)));
}
g_variant_dict_insert_value (dict, "files", g_variant_builder_end (&builder));
/* Save window state */
GTK_WIDGET_CLASS (example_app_window_parent_class)->save_state (widget, dict, save_children);
*save_children = TRUE;
return TRUE;
}
static gboolean
example_app_window_restore_state (GtkWidget *widget,
GVariant *state)
{
ExampleAppWindow *win = EXAMPLE_APP_WINDOW (widget);
GVariantIter *iter;
/* Restore window state */
GTK_WIDGET_CLASS (example_app_window_parent_class)->restore_state (widget, state);
if (g_variant_lookup (state, "files", "as", &iter))
{
const char *path;
while (g_variant_iter_next (iter, "&s", &path))
{
GFile *file = g_file_new_for_path (path);
example_app_window_open (win, file);
g_object_unref (file);
}
}
return TRUE;
}
static void
example_app_window_class_init (ExampleAppWindowClass *class)
{
G_OBJECT_CLASS (class)->dispose = example_app_window_dispose;
GTK_WIDGET_CLASS (class)->save_state = example_app_window_save_state;
GTK_WIDGET_CLASS (class)->restore_state = example_app_window_restore_state;
gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
"/org/gtk/exampleapp/window.ui");
@@ -288,4 +344,6 @@ example_app_window_open (ExampleAppWindow *win,
update_words (win);
update_lines (win);
win->files = g_list_append (win->files, g_object_ref (file));
}

View File

@@ -4,6 +4,7 @@
<property name="title" translatable="yes">Example Application</property>
<property name="default-width">600</property>
<property name="default-height">400</property>
<property name="save-id">window</property>
<child type="titlebar">
<object class="GtkHeaderBar" id="header">
<child>
@@ -26,6 +27,7 @@
<object class="GtkToggleButton" id="search">
<property name="sensitive">0</property>
<property name="icon-name">edit-find-symbolic</property>
<property name="save-id">search</property>
</object>
</child>
<child type="end">
@@ -38,6 +40,7 @@
<child>
<object class="GtkBox" id="content_box">
<property name="orientation">vertical</property>
<property name="save-id">content_box</property>
<child>
<object class="GtkSearchBar" id="searchbar">
<child>
@@ -49,8 +52,10 @@
</child>
<child>
<object class="GtkBox" id="hbox">
<property name="save-id">hbox</property>
<child>
<object class="GtkRevealer" id="sidebar">
<property name="save-id">sidebar</property>
<property name="transition-type">slide-right</property>
<child>
<object class="GtkScrolledWindow" id="sidebar-sw">
@@ -66,6 +71,7 @@
</child>
<child>
<object class="GtkStack" id="stack">
<property name="save-id">stack</property>
<signal name="notify::visible-child" handler="visible_child_changed"/>
</object>
</child>

View File

@@ -48,6 +48,10 @@ void gdk_broadway_display_show_keyboard (GdkBroadwayDis
GDK_AVAILABLE_IN_ALL
void gdk_broadway_display_hide_keyboard (GdkBroadwayDisplay *display);
GDK_AVAILABLE_IN_4_4
void gdk_broadway_display_set_surface_scale (GdkDisplay *display,
int scale);
G_END_DECLS
#endif /* __GDK_BROADWAY_DISPLAY_H__ */

View File

@@ -94,10 +94,12 @@ _gdk_broadway_display_size_changed (GdkDisplay *display,
if (msg->width == current_size.width &&
msg->height == current_size.height &&
msg->scale == broadway_display->scale_factor)
(msg->scale == broadway_display->scale_factor ||
broadway_display->fixed_scale))
return;
broadway_display->scale_factor = msg->scale;
if (!broadway_display->fixed_scale)
broadway_display->scale_factor = msg->scale;
gdk_monitor_set_geometry (monitor, &(GdkRectangle) { 0, 0, msg->width, msg->height });
gdk_monitor_set_scale_factor (monitor, msg->scale);
@@ -112,7 +114,8 @@ _gdk_broadway_display_size_changed (GdkDisplay *display,
gdk_broadway_surface_move_resize (GDK_SURFACE (toplevel),
0, 0,
msg->width, msg->height);
}}
}
}
static GdkDevice *
create_core_pointer (GdkDisplay *display)
@@ -327,6 +330,37 @@ gdk_broadway_display_hide_keyboard (GdkBroadwayDisplay *display)
_gdk_broadway_server_set_show_keyboard (display->server, FALSE);
}
/**
* gdk_broadway_display_set_surface_scale:
* @display: (type GdkBroadwayDisplay): the display
* @scale: The new scale value, as an integer >= 1
*
* Forces a specific window scale for all windows on this display,
* instead of using the default or user configured scale. This
* is can be used to disable scaling support by setting @scale to
* 1, or to programmatically set the window scale.
*
* Once the scale is set by this call it will not change in
* response to later user configuration changes.
*
* Since: 4.4
*/
void
gdk_broadway_display_set_surface_scale (GdkDisplay *display,
int scale)
{
GdkBroadwayDisplay *self;
g_return_if_fail (GDK_IS_BROADWAY_DISPLAY (display));
g_return_if_fail (scale > 0);
self = GDK_BROADWAY_DISPLAY (display);
self->scale_factor = scale;
self->fixed_scale = TRUE;
gdk_monitor_set_scale_factor (self->monitor, scale);
}
static GListModel *
gdk_broadway_display_get_monitors (GdkDisplay *display)
{

View File

@@ -57,6 +57,7 @@ struct _GdkBroadwayDisplay
GListStore *monitors;
GdkMonitor *monitor;
int scale_factor;
gboolean fixed_scale;
GHashTable *texture_cache;

View File

@@ -50,7 +50,7 @@
/**
* GDK_WINDOWING_X11:
*
* The #GDK_WINDOWING_X11 macro is defined if the X11 backend
* The `GDK_WINDOWING_X11` macro is defined if the X11 backend
* is supported.
*
* Use this macro to guard code that is specific to the X11 backend.
@@ -59,7 +59,7 @@
/**
* GDK_WINDOWING_WIN32:
*
* The #GDK_WINDOWING_WIN32 macro is defined if the Win32 backend
* The `GDK_WINDOWING_WIN32` macro is defined if the Win32 backend
* is supported.
*
* Use this macro to guard code that is specific to the Win32 backend.
@@ -68,7 +68,7 @@
/**
* GDK_WINDOWING_MACOS:
*
* The #GDK_WINDOWING_MACOS macro is defined if the MacOS backend
* The `GDK_WINDOWING_MACOS` macro is defined if the MacOS backend
* is supported.
*
* Use this macro to guard code that is specific to the MacOS backend.
@@ -77,7 +77,7 @@
/**
* GDK_WINDOWING_WAYLAND:
*
* The #GDK_WINDOWING_WAYLAND macro is defined if the Wayland backend
* The `GDK_WINDOWING_WAYLAND` macro is defined if the Wayland backend
* is supported.
*
* Use this macro to guard code that is specific to the Wayland backend.
@@ -87,6 +87,7 @@
* GDK_DISABLE_DEPRECATION_WARNINGS:
*
* A macro that should be defined before including the gdk.h header.
*
* If it is defined, no compiler warnings will be produced for uses
* of deprecated GDK APIs.
*/
@@ -126,6 +127,7 @@ static const GdkDebugKey gdk_debug_keys[] = {
{ "gl-legacy", GDK_DEBUG_GL_LEGACY, "Use a legacy OpenGL context" },
{ "gl-gles", GDK_DEBUG_GL_GLES, "Use a GLES OpenGL context" },
{ "gl-debug", GDK_DEBUG_GL_DEBUG, "Insert debugging information in OpenGL" },
{ "gl-glx", GDK_DEBUG_GL_GLX, "Use GLX on X11" },
{ "vulkan-disable", GDK_DEBUG_VULKAN_DISABLE, "Disable Vulkan support" },
{ "vulkan-validate", GDK_DEBUG_VULKAN_VALIDATE, "Load the Vulkan validation layer" },
{ "default-settings",GDK_DEBUG_DEFAULT_SETTINGS, "Force default values for xsettings" },

View File

@@ -237,7 +237,7 @@ gdk_app_launch_context_set_timestamp (GdkAppLaunchContext *context,
/**
* gdk_app_launch_context_set_icon:
* @context: a `GdkAppLaunchContext`
* @icon: (allow-none): a #GIcon, or %NULL
* @icon: (nullable): a `GIcon`
*
* Sets the icon for applications that are launched with this
* context.
@@ -267,12 +267,12 @@ gdk_app_launch_context_set_icon (GdkAppLaunchContext *context,
/**
* gdk_app_launch_context_set_icon_name:
* @context: a `GdkAppLaunchContext`
* @icon_name: (allow-none): an icon name, or %NULL
* @icon_name: (nullable): an icon name
*
* Sets the icon for applications that are launched with this context.
*
* The @icon_name will be interpreted in the same way as the Icon field
* in desktop files. See also [method@Gdk.AppLaunchContext.set_icon()].
* in desktop files. See also [method@Gdk.AppLaunchContext.set_icon].
*
* If both @icon and @icon_name are set, the @icon_name takes priority.
* If neither @icon or @icon_name is set, the icon is taken from either

View File

@@ -26,9 +26,9 @@
/**
* gdk_cairo_set_source_rgba:
* @cr: a cairo context
* @rgba: a #GdkRGBA
* @rgba: a `GdkRGBA`
*
* Sets the specified #GdkRGBA as the source color of @cr.
* Sets the specified `GdkRGBA` as the source color of @cr.
*/
void
gdk_cairo_set_source_rgba (cairo_t *cr,
@@ -47,7 +47,7 @@ gdk_cairo_set_source_rgba (cairo_t *cr,
/**
* gdk_cairo_rectangle:
* @cr: a cairo context
* @rectangle: a #GdkRectangle
* @rectangle: a `GdkRectangle`
*
* Adds the given rectangle to the current path of @cr.
*/
@@ -66,7 +66,7 @@ gdk_cairo_rectangle (cairo_t *cr,
/**
* gdk_cairo_region:
* @cr: a cairo context
* @region: a #cairo_region_t
* @region: a `cairo_region_t`
*
* Adds the given region to the current path of @cr.
*/
@@ -185,7 +185,7 @@ gdk_cairo_surface_paint_pixbuf (cairo_surface_t *surface,
/**
* gdk_cairo_set_source_pixbuf:
* @cr: a cairo context
* @pixbuf: a #GdkPixbuf
* @pixbuf: a `GdkPixbuf`
* @pixbuf_x: X coordinate of location to place upper left corner of @pixbuf
* @pixbuf_y: Y coordinate of location to place upper left corner of @pixbuf
*
@@ -232,7 +232,7 @@ gdk_cairo_set_source_pixbuf (cairo_t *cr,
* You must explicitly check the return value of you want to handle
* that case.
*
* Returns: %TRUE if the extents fit in a #GdkRectangle, %FALSE if not
* Returns: %TRUE if the extents fit in a `GdkRectangle`, %FALSE if not
*/
gboolean
_gdk_cairo_surface_extents (cairo_surface_t *surface,
@@ -287,7 +287,7 @@ _gdk_cairo_surface_extents (cairo_surface_t *surface,
* This function takes into account device offsets that might be
* set with cairo_surface_set_device_offset().
*
* Returns: A `cairo_region_t`; must be freed with cairo_region_destroy()
* Returns: (transfer full): A `cairo_region_t`
*/
cairo_region_t *
gdk_cairo_region_create_from_surface (cairo_surface_t *surface)

View File

@@ -34,8 +34,8 @@
* draw context.
*
* `GdkCairoContext`s are created for a surface using
* [method@Gdk.Surface.create_cairo_context], and the context can then be used
* to draw on that surface.
* [method@Gdk.Surface.create_cairo_context], and the context
* can then be used to draw on that surface.
*/
typedef struct _GdkCairoContextPrivate GdkCairoContextPrivate;
@@ -59,7 +59,7 @@ gdk_cairo_context_init (GdkCairoContext *self)
/**
* gdk_cairo_context_cairo_create:
* @self: a #GdkCairoContext that is currently drawing
* @self: a `GdkCairoContext` that is currently drawing
*
* Retrieves a Cairo context to be used to draw on the `GdkSurface`
* of @context.
@@ -70,9 +70,8 @@ gdk_cairo_context_init (GdkCairoContext *self)
* The returned context is guaranteed to be valid until
* [method@Gdk.DrawContext.end_frame] is called.
*
* Returns: (transfer full) (nullable): a Cairo context to be used
* to draw the contents of the `GdkSurface`. %NULL is returned
* when @context is not drawing.
* Returns: (transfer full) (nullable): a Cairo context
* to draw on `GdkSurface
*/
cairo_t *
gdk_cairo_context_cairo_create (GdkCairoContext *self)

View File

@@ -504,8 +504,8 @@ gdk_clipboard_is_local (GdkClipboard *clipboard)
* If the @clipboard is empty or its contents are not owned by the
* current process, %NULL will be returned.
*
* Returns: (transfer none) (nullable): The content of a clipboard or %NULL
* if the clipboard does not maintain any content.
* Returns: (transfer none) (nullable): The content of a clipboard
* if the clipboard does not maintain any content
*/
GdkContentProvider *
gdk_clipboard_get_content (GdkClipboard *clipboard)
@@ -520,8 +520,8 @@ gdk_clipboard_get_content (GdkClipboard *clipboard)
/**
* gdk_clipboard_store_async:
* @clipboard: a `GdkClipboard`
* @io_priority: the I/O priority of the request.
* @cancellable: (nullable): optional `GCancellable` object, %NULL to ignore.
* @io_priority: the I/O priority of the request
* @cancellable: (nullable): optional `GCancellable` object
* @callback: (scope async): callback to call when the request is satisfied
* @user_data: (closure): the data to pass to callback function
*
@@ -554,19 +554,19 @@ gdk_clipboard_store_async (GdkClipboard *clipboard,
if (priv->local)
{
return GDK_CLIPBOARD_GET_CLASS (clipboard)->store_async (clipboard,
io_priority,
cancellable,
callback,
user_data);
GDK_CLIPBOARD_GET_CLASS (clipboard)->store_async (clipboard,
io_priority,
cancellable,
callback,
user_data);
}
else
{
return gdk_clipboard_store_default_async (clipboard,
io_priority,
cancellable,
callback,
user_data);
gdk_clipboard_store_default_async (clipboard,
io_priority,
cancellable,
callback,
user_data);
}
}
@@ -574,7 +574,7 @@ gdk_clipboard_store_async (GdkClipboard *clipboard,
* gdk_clipboard_store_finish:
* @clipboard: a `GdkClipboard`
* @result: a `GAsyncResult`
* @error: a `GError` location to store the error occurring, or %NULL to ignore.
* @error: a `GError` location to store the error occurring
*
* Finishes an asynchronous clipboard store.
*
@@ -637,7 +637,7 @@ gdk_clipboard_read_internal (GdkClipboard *clipboard,
* @clipboard: a `GdkClipboard`
* @mime_types: a %NULL-terminated array of mime types to choose from
* @io_priority: the I/O priority of the request
* @cancellable: (nullable): optional `GCancellable` object, %NULL to ignore.
* @cancellable: (nullable): optional `GCancellable` object
* @callback: (scope async): callback to call when the request is satisfied
* @user_data: (closure): the data to pass to callback function
*
@@ -676,15 +676,15 @@ gdk_clipboard_read_async (GdkClipboard *clipboard,
* gdk_clipboard_read_finish:
* @clipboard: a `GdkClipboard`
* @result: a `GAsyncResult`
* @out_mime_type: (out) (allow-none) (transfer none): pointer to store
* the chosen mime type in or %NULL
* @error: a `GError` location to store the error occurring, or %NULL to ignore.
* @out_mime_type: (out) (optional) (transfer none): location to store
* the chosen mime type
* @error: a `GError` location to store the error occurring
*
* Finishes an asynchronous clipboard read.
*
* See [method@Gdk.Clipboard.read_async].
*
* Returns: (transfer full) (nullable): a `GInputStream` or %NULL on error.
* Returns: (transfer full) (nullable): a `GInputStream`
*/
GInputStream *
gdk_clipboard_read_finish (GdkClipboard *clipboard,
@@ -833,7 +833,7 @@ gdk_clipboard_read_value_internal (GdkClipboard *clipboard,
* @clipboard: a `GdkClipboard`
* @type: a `GType` to read
* @io_priority: the I/O priority of the request
* @cancellable: (nullable): optional #GCancellable object, %NULL to ignore.
* @cancellable: (nullable): optional `GCancellable` object
* @callback: (scope async): callback to call when the request is satisfied
* @user_data: (closure): the data to pass to callback function
*
@@ -872,7 +872,7 @@ gdk_clipboard_read_value_async (GdkClipboard *clipboard,
* gdk_clipboard_read_value_finish:
* @clipboard: a `GdkClipboard`
* @result: a `GAsyncResult`
* @error: a GError` location to store the error occurring, or %NULL to ignore
* @error: a GError` location to store the error occurring
*
* Finishes an asynchronous clipboard read.
*
@@ -905,7 +905,7 @@ gdk_clipboard_read_value_finish (GdkClipboard *clipboard,
* call [method@Gdk.Clipboard.read_texture_finish] to get the result.
*
* This is a simple wrapper around [method@Gdk.Clipboard.read_value_async].
* Use that function or [methos@Gdk.Clipboard.read_async] directly if you
* Use that function or [method@Gdk.Clipboard.read_async] directly if you
* need more control over the operation.
*/
void
@@ -931,13 +931,13 @@ gdk_clipboard_read_texture_async (GdkClipboard *clipboard,
* gdk_clipboard_read_texture_finish:
* @clipboard: a `GdkClipboard`
* @result: a `GAsyncResult`
* @error: a `GError` location to store the error occurring, or %NULL to ignore
* @error: a `GError` location to store the error occurring
*
* Finishes an asynchronous clipboard read.
*
* See [method@Gdk.Clipboard.read_texture_async].
*
* Returns: (transfer full) (nullable): a new `GdkTexture` or %NULL on error
* Returns: (transfer full) (nullable): a new `GdkTexture`
*/
GdkTexture *
gdk_clipboard_read_texture_finish (GdkClipboard *clipboard,
@@ -960,7 +960,7 @@ gdk_clipboard_read_texture_finish (GdkClipboard *clipboard,
/**
* gdk_clipboard_read_text_async:
* @clipboard: a `GdkClipboard`
* @cancellable: (nullable): optional `GCancellable` object, %NULL to ignore
* @cancellable: (nullable): optional `GCancellable` object
* @callback: (scope async): callback to call when the request is satisfied
* @user_data: (closure): the data to pass to callback function
*
@@ -996,13 +996,13 @@ gdk_clipboard_read_text_async (GdkClipboard *clipboard,
* gdk_clipboard_read_text_finish:
* @clipboard: a `GdkClipboard`
* @result: a `GAsyncResult`
* @error: a `GError` location to store the error occurring, or %NULL to ignore
* @error: a `GError` location to store the error occurring
*
* Finishes an asynchronous clipboard read.
*
* See [method@Gdk.Clipboard.read_text_async].
*
* Returns: (transfer full) (nullable): a new string or %NULL on error
* Returns: (transfer full) (nullable): a new string
*/
char *
gdk_clipboard_read_text_finish (GdkClipboard *clipboard,
@@ -1194,8 +1194,8 @@ gdk_clipboard_claim_remote (GdkClipboard *clipboard,
/**
* gdk_clipboard_set_content:
* @clipboard: a `GdkClipboard`
* @provider: (transfer none) (allow-none): the new contents of @clipboard or
* %NULL to clear the clipboard
* @provider: (transfer none) (nullable): the new contents of @clipboard
* or %NULL to clear the clipboard
*
* Sets a new content provider on @clipboard.
*

View File

@@ -190,9 +190,9 @@ gdk_content_deserializer_get_mime_type (GdkContentDeserializer *deserializer)
* gdk_content_deserializer_get_gtype:
* @deserializer: a `GdkContentDeserializer`
*
* Gets the GType to create an instance of.
* Gets the `GType` to create an instance of.
*
* Returns: the GType for the current operation
* Returns: the `GType` for the current operation
*/
GType
gdk_content_deserializer_get_gtype (GdkContentDeserializer *deserializer)
@@ -224,7 +224,7 @@ gdk_content_deserializer_get_value (GdkContentDeserializer *deserializer)
*
* Gets the input stream for the current operation.
*
* This is the stream that was passed to [func@content_deserialize_async].
* This is the stream that was passed to [func@Gdk.content_deserialize_async].
*
* Returns: (transfer none): the input stream for the current operation
*/
@@ -242,7 +242,7 @@ gdk_content_deserializer_get_input_stream (GdkContentDeserializer *deserializer)
*
* Gets the I/O priority for the current operation.
*
* This is the priority that was passed to [funccontent_deserialize_async].
* This is the priority that was passed to [func@Gdk.content_deserialize_async].
*
* Returns: the I/O priority for the current operation
*/
@@ -260,7 +260,7 @@ gdk_content_deserializer_get_priority (GdkContentDeserializer *deserializer)
*
* Gets the cancellable for the current operation.
*
* This is the `GCancellable` that was passed to [func@content_deserialize_async].
* This is the `GCancellable` that was passed to [func@Gdk.content_deserialize_async].
*
* Returns: (transfer none): the cancellable for the current operation
*/
@@ -364,7 +364,7 @@ gdk_content_deserializer_return_success (GdkContentDeserializer *deserializer)
/**
* gdk_content_deserializer_return_error:
* @deserializer: a `GdkContentDeserializer`
* @error: a `GError`
* @error: (transfer full): a `GError`
*
* Indicate that the deserialization has ended with an error.
*
@@ -539,7 +539,7 @@ deserialize_not_found (GdkContentDeserializer *deserializer)
* indicate a higher priority.
*
* When the operation is finished, @callback will be called. You must then
* call [func@content_deserialize_finish] to get the result of the operation.
* call [func@Gdk.content_deserialize_finish] to get the result of the operation.
*/
void
gdk_content_deserialize_async (GInputStream *stream,
@@ -672,9 +672,18 @@ string_deserializer_finish (GObject *source,
}
else
{
GOutputStream *mem_stream = g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (stream));
/* write a terminating NULL byte */
if (g_output_stream_write (mem_stream, "", 1, NULL, &error) < 0 ||
!g_output_stream_close (mem_stream, NULL, &error))
{
gdk_content_deserializer_return_error (deserializer, error);
return;
}
g_value_take_string (gdk_content_deserializer_get_value (deserializer),
g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (
g_filter_output_stream_get_base_stream (G_FILTER_OUTPUT_STREAM (stream)))));
g_memory_output_stream_steal_data (G_MEMORY_OUTPUT_STREAM (mem_stream)));
}
gdk_content_deserializer_return_success (deserializer);
}
@@ -703,7 +712,7 @@ string_deserializer (GdkContentDeserializer *deserializer)
g_output_stream_splice_async (filter,
gdk_content_deserializer_get_input_stream (deserializer),
G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,
G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE,
gdk_content_deserializer_get_priority (deserializer),
gdk_content_deserializer_get_cancellable (deserializer),
string_deserializer_finish,
@@ -731,7 +740,8 @@ file_uri_deserializer_finish (GObject *source,
}
/* write terminating NULL */
if (!g_output_stream_write (stream, "", 1, NULL, &error))
if (g_output_stream_write (stream, "", 1, NULL, &error) < 0 ||
!g_output_stream_close (stream, NULL, &error))
{
gdk_content_deserializer_return_error (deserializer, error);
return;
@@ -771,7 +781,7 @@ file_uri_deserializer (GdkContentDeserializer *deserializer)
g_output_stream_splice_async (output,
gdk_content_deserializer_get_input_stream (deserializer),
G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE | G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,
G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE,
gdk_content_deserializer_get_priority (deserializer),
gdk_content_deserializer_get_cancellable (deserializer),
file_uri_deserializer_finish,
@@ -921,7 +931,7 @@ init (void)
gdk_content_register_deserializer (mime,
G_TYPE_STRING,
string_deserializer,
mime,
(gpointer) charset,
g_free);
}
gdk_content_register_deserializer ("text/plain",

View File

@@ -36,7 +36,7 @@ typedef struct _GdkContentDeserializer GdkContentDeserializer;
/**
* GdkContentDeserializeFunc:
* @deserializer: a #GdkContentDeserializer
* @deserializer: a `GdkContentDeserializer`
*
* The type of a function that can be registered with gdk_content_register_deserializer().
*

View File

@@ -48,7 +48,7 @@
*
* `GdkContentFormats` is an immutable struct. After creation, you cannot change
* the types it represents. Instead, new `GdkContentFormats` have to be created.
* The [struct@Gdk.ContentFormatsBuilder]` structure is meant to help in this
* The [struct@Gdk.ContentFormatsBuilder] structure is meant to help in this
* endeavor.
*/
@@ -84,8 +84,8 @@ G_DEFINE_BOXED_TYPE (GdkContentFormats, gdk_content_formats,
* If @string is not a valid mime type, %NULL is returned instead.
* See RFC 2048 for the syntax if mime types.
*
* Returns: An interned string for the canonicalized mime type
* or %NULL if the string wasn't a valid mime type
* Returns: (nullable): An interned string for the canonicalized
* mime type or %NULL if the string wasn't a valid mime type
*/
const char *
gdk_intern_mime_type (const char *string)
@@ -125,7 +125,7 @@ gdk_content_formats_new_take (GType * gtypes,
/**
* gdk_content_formats_new:
* @mime_types: (array length=n_mime_types) (allow-none): Pointer to an
* @mime_types: (array length=n_mime_types) (nullable): Pointer to an
* array of mime types
* @n_mime_types: number of entries in @mime_types.
*
@@ -133,7 +133,7 @@ gdk_content_formats_new_take (GType * gtypes,
*
* The mime types must be valid and different from each other or the
* behavior of the return value is undefined. If you cannot guarantee
* this, use `GdkContentFormatsBuilder` instead.
* this, use [struct@Gdk.ContentFormatsBuilder] instead.
*
* Returns: (transfer full): the new `GdkContentFormats`.
*/
@@ -384,7 +384,7 @@ gdk_content_formats_match_gtype (const GdkContentFormats *first,
*
* If no matching mime type is found, %NULL is returned.
*
* Returns: (nullable): The first common mime type or %NULL if none.
* Returns: (nullable): The first common mime type or %NULL if none
*/
const char *
gdk_content_formats_match_mime_type (const GdkContentFormats *first,
@@ -411,7 +411,7 @@ gdk_content_formats_match_mime_type (const GdkContentFormats *first,
*
* Checks if a given `GType` is part of the given @formats.
*
* Returns: %TRUE if the #GType was found
* Returns: %TRUE if the `GType` was found
*/
gboolean
gdk_content_formats_contain_gtype (const GdkContentFormats *formats,
@@ -454,16 +454,15 @@ gdk_content_formats_contain_mime_type (const GdkContentFormats *formats,
* gdk_content_formats_get_gtypes:
* @formats: a `GdkContentFormats`
* @n_gtypes: (out) (optional): optional pointer to take the
* number of #GTypes contained in the return value
* number of `GType`s contained in the return value
*
* Gets the `GTypes` included in @formats.
* Gets the `GType`s included in @formats.
*
* Note that @formats may not contain any #GTypes, in particular when
* Note that @formats may not contain any `GType`s, in particular when
* they are empty. In that case %NULL will be returned.
*
* Returns: (transfer none) (nullable) (array length=n_gtypes):
* %G_TYPE_INVALID-terminated array of types included in @formats or
* %NULL if none.
* Returns: (transfer none) (nullable) (array length=n_gtypes zero-terminated=1):
* %G_TYPE_INVALID-terminated array of types included in @formats
*/
const GType *
gdk_content_formats_get_gtypes (const GdkContentFormats *formats,
@@ -480,17 +479,17 @@ gdk_content_formats_get_gtypes (const GdkContentFormats *formats,
/**
* gdk_content_formats_get_mime_types:
* @formats: a `GdkContentFormats`
* @n_mime_types: (out) (allow-none): optional pointer to take the
* number of mime types contained in the return value
* @n_mime_types: (out) (optional): optional pointer to take the
* number of mime types contained in the return value
*
* Gets the mime types included in @formats.
*
* Note that @formats may not contain any mime types, in particular
* when they are empty. In that case %NULL will be returned.
*
* Returns: (transfer none) (nullable): %NULL-terminated array of
* interned strings of mime types included in @formats or %NULL
* if none.
* Returns: (transfer none) (nullable) (array length=n_mime_types zero-terminated=1):
* %NULL-terminated array of interned strings of mime types included
* in @formats
*/
const char * const *
gdk_content_formats_get_mime_types (const GdkContentFormats *formats,

View File

@@ -218,7 +218,7 @@ gdk_content_provider_init (GdkContentProvider *provider)
/**
* gdk_content_provider_ref_formats: (attributes org.gtk.Method.get_property=formats)
* @provider: a #GdkContentProvider
* @provider: a `GdkContentProvider`
*
* Gets the formats that the provider can provide its current contents in.
*
@@ -234,7 +234,7 @@ gdk_content_provider_ref_formats (GdkContentProvider *provider)
/**
* gdk_content_provider_ref_storable_formats: (attributes org.gtk.Method.get_property=storable-formats)
* @provider: a #GdkContentProvider
* @provider: a `GdkContentProvider`
*
* Gets the formats that the provider suggests other applications to store
* the data in.
@@ -288,7 +288,7 @@ gdk_content_provider_content_changed (GdkContentProvider *provider)
*
* The given mime type does not need to be listed in the formats returned by
* [method@Gdk.ContentProvider.ref_formats]. However, if the given `GType` is
* not supported, #G_IO_ERROR_NOT_SUPPORTED will be reported.
* not supported, `G_IO_ERROR_NOT_SUPPORTED` will be reported.
*
* The given @stream will not be closed.
*/
@@ -319,14 +319,14 @@ gdk_content_provider_write_mime_type_async (GdkContentProvider *provider,
* gdk_content_provider_write_mime_type_finish:
* @provider: a `GdkContentProvider`
* @result: a `GAsyncResult`
* @error: a `GError` location to store the error occurring, or %NULL to ignore
* @error: a `GError` location to store the error occurring
*
* Finishes an asynchronous write operation.
*
* See [method@Gdk.ContentProvider.write_mime_type_async].
*
* Returns: %TRUE if the operation was completed successfully. Otherwise
* @error will be set to describe the failure.
* @error will be set to describe the failure.
*/
gboolean
gdk_content_provider_write_mime_type_finish (GdkContentProvider *provider,
@@ -343,7 +343,7 @@ gdk_content_provider_write_mime_type_finish (GdkContentProvider *provider,
* gdk_content_provider_get_value:
* @provider: a `GdkContentProvider`
* @value: the `GValue` to fill
* @error: a `GError` location to store the error occurring, or %NULL to ignore
* @error: a `GError` location to store the error occurring
*
* Gets the contents of @provider stored in @value.
*
@@ -351,10 +351,10 @@ gdk_content_provider_write_mime_type_finish (GdkContentProvider *provider,
* provided in. This given `GType` does not need to be listed in the formats
* returned by [method@Gdk.ContentProvider.ref_formats]. However, if the
* given `GType` is not supported, this operation can fail and
* #G_IO_ERROR_NOT_SUPPORTED will be reported.
* `G_IO_ERROR_NOT_SUPPORTED` will be reported.
*
* Returns: %TRUE if the value was set successfully. Otherwise
* @error will be set to describe the failure.
* @error will be set to describe the failure.
*/
gboolean
gdk_content_provider_get_value (GdkContentProvider *provider,
@@ -377,7 +377,7 @@ gdk_content_provider_attach_clipboard (GdkContentProvider *provider,
g_return_if_fail (GDK_IS_CONTENT_PROVIDER (provider));
g_return_if_fail (GDK_IS_CLIPBOARD (clipboard));
return GDK_CONTENT_PROVIDER_GET_CLASS (provider)->attach_clipboard (provider, clipboard);
GDK_CONTENT_PROVIDER_GET_CLASS (provider)->attach_clipboard (provider, clipboard);
}
void
@@ -387,5 +387,5 @@ gdk_content_provider_detach_clipboard (GdkContentProvider *provider,
g_return_if_fail (GDK_IS_CONTENT_PROVIDER (provider));
g_return_if_fail (GDK_IS_CLIPBOARD (clipboard));
return GDK_CONTENT_PROVIDER_GET_CLASS (provider)->detach_clipboard (provider, clipboard);
GDK_CONTENT_PROVIDER_GET_CLASS (provider)->detach_clipboard (provider, clipboard);
}

View File

@@ -45,9 +45,9 @@ struct _GdkContentProvider
/**
* GdkContentProviderClass:
* @content_changed: Signal class closure for #GdkContentProvider::content-changed
* @content_changed: Signal class closure for `GdkContentProvider::content-changed`
*
* Class structure for #GdkContentProvider.
* Class structure for `GdkContentProvider`.
*/
struct _GdkContentProviderClass
{

View File

@@ -394,7 +394,7 @@ gdk_content_provider_union_init (GdkContentProviderUnion *self)
/**
* gdk_content_provider_new_union:
* @providers: (nullable) (array length=n_providers) (transfer full):
* The #GdkContentProviders to present the union of
* The `GdkContentProvider`s to present the union of
* @n_providers: the number of providers
*
* Creates a content provider that represents all the given @providers.

View File

@@ -43,7 +43,7 @@
*
* GTK provides serializers and deserializers for common data types
* such as text, colors, images or file lists. To register your own
* serialization functions, use [func@content_register_serializer].
* serialization functions, use [func@Gdk.content_register_serializer].
*
* Also see [class@Gdk.ContentDeserializer].
*/
@@ -264,7 +264,7 @@ gdk_content_serializer_get_priority (GdkContentSerializer *serializer)
*
* Gets the cancellable for the current operation.
*
* This is the `GCancellable` that was passed to [content_serialize_async].
* This is the `GCancellable` that was passed to [func@content_serialize_async].
*
* Returns: (transfer none): the cancellable for the current operation
*/
@@ -368,7 +368,7 @@ gdk_content_serializer_return_success (GdkContentSerializer *serializer)
/**
* gdk_content_serializer_return_error:
* @serializer: a `GdkContentSerializer`
* @error: a `GError`
* @error: (transfer full): a `GError`
*
* Indicate that the serialization has ended with an error.
*
@@ -533,7 +533,7 @@ serialize_not_found (GdkContentSerializer *serializer)
* @mime_type: the mime type to serialize to
* @value: the content to serialize
* @io_priority: the I/O priority of the operation
* @cancellable: (nullable): optional #GCancellable object
* @cancellable: (nullable): optional `GCancellable` object
* @callback: (scope async): callback to call when the operation is done
* @user_data: (closure): data to pass to the callback function
*
@@ -543,7 +543,7 @@ serialize_not_found (GdkContentSerializer *serializer)
* indicate a higher priority.
*
* When the operation is finished, @callback will be called. You must then
* call [func@content_serialize_finish] to get the result of the operation.
* call [func@Gdk.content_serialize_finish] to get the result of the operation.
*/
void
gdk_content_serialize_async (GOutputStream *stream,

View File

@@ -36,7 +36,7 @@ typedef struct _GdkContentSerializer GdkContentSerializer;
/**
* GdkContentSerializeFunc:
* @serializer: a #GdkContentSerializer
* @serializer: a `GdkContentSerializer`
*
* The type of a function that can be registered with gdk_content_register_serializer().
*

View File

@@ -298,8 +298,8 @@ gdk_cursor_equal (gconstpointer a,
/**
* gdk_cursor_new_from_name:
* @name: the name of the cursor
* @fallback: (allow-none): %NULL or the `GdkCursor` to fall back to when
* this one cannot be supported
* @fallback: (nullable): %NULL or the `GdkCursor` to fall back to when
* this one cannot be supported
*
* Creates a new cursor by looking up @name in the current cursor
* theme.
@@ -340,8 +340,8 @@ gdk_cursor_new_from_name (const char *name,
* @texture: the texture providing the pixel data
* @hotspot_x: the horizontal offset of the “hotspot” of the cursor
* @hotspot_y: the vertical offset of the “hotspot” of the cursor
* @fallback: (allow-none): %NULL or the `GdkCursor` to fall back to when
* this one cannot be supported
* @fallback: (nullable): %NULL or the `GdkCursor` to fall back to when
* this one cannot be supported
*
* Creates a new cursor from a `GdkTexture`.
*
@@ -379,7 +379,7 @@ gdk_cursor_new_from_texture (GdkTexture *texture,
* it is used on does not support textured cursors.
*
* Returns: (transfer none) (nullable): the fallback of the cursor or %NULL
* to use the default cursor as fallback.
* to use the default cursor as fallback
*/
GdkCursor *
gdk_cursor_get_fallback (GdkCursor *cursor)
@@ -410,7 +410,7 @@ gdk_cursor_get_name (GdkCursor *cursor)
/**
* gdk_cursor_get_texture:
* @cursor: a #GdkCursor.
* @cursor: a `GdkCursor`
*
* Returns the texture for the cursor.
*

View File

@@ -41,9 +41,10 @@ typedef enum {
GDK_DEBUG_GL_LEGACY = 1 << 15,
GDK_DEBUG_GL_GLES = 1 << 16,
GDK_DEBUG_GL_DEBUG = 1 << 17,
GDK_DEBUG_VULKAN_DISABLE = 1 << 18,
GDK_DEBUG_VULKAN_VALIDATE = 1 << 19,
GDK_DEBUG_DEFAULT_SETTINGS= 1 << 20
GDK_DEBUG_GL_GLX = 1 << 18,
GDK_DEBUG_VULKAN_DISABLE = 1 << 19,
GDK_DEBUG_VULKAN_VALIDATE = 1 << 20,
GDK_DEBUG_DEFAULT_SETTINGS= 1 << 21
} GdkDebugFlags;
extern guint _gdk_debug_flags;

View File

@@ -107,7 +107,7 @@ gdk_device_class_init (GdkDeviceClass *klass)
/**
* GdkDevice:display: (attributes org.gtk.Property.get=gdk_device_get_display)
*
* The #GdkDisplay the #GdkDevice pertains to.
* The `GdkDisplay` the `GdkDevice` pertains to.
*/
device_props[PROP_DISPLAY] =
g_param_spec_object ("display",
@@ -520,19 +520,19 @@ gdk_device_get_property (GObject *object,
/**
* gdk_device_get_surface_at_position:
* @device: pointer `GdkDevice` to query info to
* @win_x: (out) (allow-none): return location for the X coordinate of the device location,
* relative to the surface origin, or %NULL.
* @win_y: (out) (allow-none): return location for the Y coordinate of the device location,
* relative to the surface origin, or %NULL.
* @win_x: (out) (optional): return location for the X coordinate
* of the device location relative to the surface origin
* @win_y: (out) (optional): return location for the Y coordinate
* of the device location relative to the surface origin
*
* Obtains the surface underneath @device, returning the location of the
* device in @win_x and @win_y
* device in @win_x and @win_y.
*
* Returns %NULL if the surface tree under @device is not known to GDK
* (for example, belongs to another application).
*
* Returns: (nullable) (transfer none): the `GdkSurface` under the
* device position, or %NULL
* device position
*/
GdkSurface *
gdk_device_get_surface_at_position (GdkDevice *device,
@@ -1145,7 +1145,7 @@ _gdk_device_surface_at_position (GdkDevice *device,
* }
* ```
*
* Returns: (nullable): the vendor ID, or %NULL
* Returns: (nullable): the vendor ID
*/
const char *
gdk_device_get_vendor_id (GdkDevice *device)
@@ -1164,7 +1164,7 @@ gdk_device_get_vendor_id (GdkDevice *device)
* This ID is retrieved from the device, and does not change.
* See [method@Gdk.Device.get_vendor_id] for more information.
*
* Returns: (nullable): the product ID, or %NULL
* Returns: (nullable): the product ID
*/
const char *
gdk_device_get_product_id (GdkDevice *device)
@@ -1190,7 +1190,7 @@ gdk_device_set_seat (GdkDevice *device,
/**
* gdk_device_get_seat: (attributes org.gtk.Method.get_property=seat)
* @device: A #GdkDevice
* @device: A `GdkDevice`
*
* Returns the `GdkSeat` the device belongs to.
*
@@ -1239,7 +1239,7 @@ gdk_device_get_num_touches (GdkDevice *device)
*
* Retrieves the current tool for @device.
*
* Returns: (transfer none): the `GdkDeviceTool`, or %NULL
* Returns: (transfer none): the `GdkDeviceTool`
*/
GdkDeviceTool *
gdk_device_get_device_tool (GdkDevice *device)
@@ -1368,8 +1368,7 @@ gdk_device_get_direction (GdkDevice *device)
*
* This is only relevant for keyboard devices.
*
* Returns: %TRUE if there are layouts with both directions,
* %FALSE otherwise
* Returns: %TRUE if there are layouts with both directions, %FALSE otherwise
*/
gboolean
gdk_device_has_bidi_layouts (GdkDevice *device)

View File

@@ -38,16 +38,16 @@ typedef struct _GdkTimeCoord GdkTimeCoord;
/**
* GdkInputSource:
* @GDK_SOURCE_MOUSE: the device is a mouse. (This will be reported for the core
* pointer, even if it is something else, such as a trackball.)
* pointer, even if it is something else, such as a trackball.)
* @GDK_SOURCE_PEN: the device is a stylus of a graphics tablet or similar device.
* @GDK_SOURCE_KEYBOARD: the device is a keyboard.
* @GDK_SOURCE_TOUCHSCREEN: the device is a direct-input touch device, such
* as a touchscreen or tablet
* as a touchscreen or tablet
* @GDK_SOURCE_TOUCHPAD: the device is an indirect touch device, such
* as a touchpad
* as a touchpad
* @GDK_SOURCE_TRACKPOINT: the device is a trackpoint
* @GDK_SOURCE_TABLET_PAD: the device is a "pad", a collection of buttons,
* rings and strips found in drawing tablets
* rings and strips found in drawing tablets
*
* An enumeration describing the type of an input device in general terms.
*/
@@ -64,11 +64,11 @@ typedef enum
/**
* GdkTimeCoord:
* @time: The timestamp for this event.
* @time: The timestamp for this event
* @flags: Flags indicating what axes are present
* @axes: (array fixed-size=12): axis values
*
* A #GdkTimeCoord stores a single event in a motion history.
* A `GdkTimeCoord` stores a single event in a motion history.
*/
struct _GdkTimeCoord
{

View File

@@ -36,7 +36,7 @@
* (current) for each given group, different groups may have different
* current modes. The number of available modes in a group can be found
* out through [method@Gdk.DevicePad.get_group_n_modes], and the current mode
* for a given group will be notified through events of type #GDK_PAD_GROUP_MODE.
* for a given group will be notified through events of type `GDK_PAD_GROUP_MODE`.
*/
#include "config.h"

View File

@@ -1036,8 +1036,7 @@ gdk_display_real_get_app_launch_context (GdkDisplay *display)
* Returns a `GdkAppLaunchContext` suitable for launching
* applications on the given display.
*
* Returns: (transfer full): a new `GdkAppLaunchContext` for @display.
* Free with g_object_unref() when done
* Returns: (transfer full): a new `GdkAppLaunchContext` for @display
*/
GdkAppLaunchContext *
gdk_display_get_app_launch_context (GdkDisplay *display)
@@ -1053,8 +1052,9 @@ gdk_display_get_app_launch_context (GdkDisplay *display)
*
* Opens a display.
*
* Returns: (nullable) (transfer none): a `GdkDisplay`, or %NULL if the
* display could not be opened
* If opening the display fails, `NULL` is returned.
*
* Returns: (nullable) (transfer none): a `GdkDisplay`
*/
GdkDisplay *
gdk_display_open (const char *display_name)
@@ -1073,7 +1073,7 @@ _gdk_display_get_next_serial (GdkDisplay *display)
* gdk_display_notify_startup_complete:
* @display: a `GdkDisplay`
* @startup_id: a startup-notification identifier, for which
* notification process should be completed
* notification process should be completed
*
* Indicates to the GUI environment that the application has
* finished loading, using a given identifier.
@@ -1099,7 +1099,7 @@ gdk_display_notify_startup_complete (GdkDisplay *display,
* Gets the startup notification ID for a Wayland display, or %NULL
* if no ID has been defined.
*
* Returns: (nullable): the startup notification ID for @display, or %NULL
* Returns: (nullable): the startup notification ID for @display
*/
const char *
gdk_display_get_startup_notification_id (GdkDisplay *display)
@@ -1141,13 +1141,13 @@ gdk_display_create_surface (GdkDisplay *display,
x, y, width, height);
}
/**
/*< private >
* gdk_display_get_keymap:
* @display: the `GdkDisplay`
*
* Returns the #GdkKeymap attached to @display.
* Returns the `GdkKeymap` attached to @display.
*
* Returns: (transfer none): the #GdkKeymap attached to @display.
* Returns: (transfer none): the `GdkKeymap` attached to @display.
*/
GdkKeymap *
gdk_display_get_keymap (GdkDisplay *display)
@@ -1159,8 +1159,8 @@ gdk_display_get_keymap (GdkDisplay *display)
/*< private >
* gdk_display_make_gl_context_current:
* @display: a #GdkDisplay
* @context: (optional): a #GdkGLContext, or %NULL
* @display: a `GdkDisplay`
* @context: (optional): a `GdkGLContext`
*
* Makes the given @context the current GL context, or unsets
* the current GL context if @context is %NULL.
@@ -1243,7 +1243,7 @@ gdk_display_set_composited (GdkDisplay *display,
* On modern displays, this value is always %TRUE.
*
* Returns: %TRUE if surfaces are created with an alpha channel or
* %FALSE if the display does not support this functionality.
* %FALSE if the display does not support this functionality.
*/
gboolean
gdk_display_is_rgba (GdkDisplay *display)
@@ -1343,8 +1343,8 @@ gdk_display_get_default_seat (GdkDisplay *display)
* Returns the list of seats known to @display.
*
* Returns: (transfer container) (element-type GdkSeat): the
* list of seats known to the `GdkDisplay`
**/
* list of seats known to the `GdkDisplay`
*/
GList *
gdk_display_list_seats (GdkDisplay *display)
{
@@ -1365,7 +1365,7 @@ gdk_display_list_seats (GdkDisplay *display)
* You can listen to the GListModel::items-changed signal on
* this list to monitor changes to the monitor of this display.
*
* Returns: (transfer none): a #GListModel of `GdkMonitor`
* Returns: (transfer none): a `GListModel` of `GdkMonitor`
*/
GListModel *
gdk_display_get_monitors (GdkDisplay *self)
@@ -1502,7 +1502,7 @@ gdk_display_set_cursor_theme (GdkDisplay *display,
* @display: a `GdkDisplay`
* @keyval: a keyval, such as %GDK_KEY_a, %GDK_KEY_Up, %GDK_KEY_Return, etc.
* @keys: (out) (array length=n_keys) (transfer full): return location
* for an array of `GdkKeymapKey`
* for an array of `GdkKeymapKey`
* @n_keys: return location for number of elements in returned array
*
* Obtains a list of keycode/group/level combinations that will
@@ -1540,9 +1540,9 @@ gdk_display_map_keyval (GdkDisplay *display,
* @display: a `GdkDisplay`
* @keycode: a keycode
* @keys: (out) (array length=n_entries) (transfer full) (optional): return
* location for array of `GdkKeymapKey`, or %NULL
* location for array of `GdkKeymapKey`
* @keyvals: (out) (array length=n_entries) (transfer full) (optional): return
* location for array of keyvals, or %NULL
* location for array of keyvals
* @n_entries: length of @keys and @keyvals
*
* Returns the keyvals bound to @keycode.
@@ -1577,12 +1577,11 @@ gdk_display_map_keycode (GdkDisplay *display,
* @keycode: a keycode
* @state: a modifier state
* @group: active keyboard group
* @keyval: (out) (optional): return location for keyval, or %NULL
* @effective_group: (out) (optional): return location for effective
* group, or %NULL
* @level: (out) (optional): return location for level, or %NULL
* @consumed: (out) (optional): return location for modifiers
* that were used to determine the group or level, or %NULL
* @keyval: (out) (optional): return location for keyval
* @effective_group: (out) (optional): return location for effective group
* @level: (out) (optional): return location for level
* @consumed: (out) (optional): return location for modifiers that were used
* to determine the group or level
*
* Translates the contents of a `GdkEventKey` into a keyval, effective group,
* and level.

View File

@@ -76,7 +76,7 @@
*
* When writing backend-specific code that is supposed to work with
* multiple GDK backends, you have to consider both compile time and
* runtime. At compile time, use the #GDK_WINDOWING_X11, #GDK_WINDOWING_WIN32
* runtime. At compile time, use the `GDK_WINDOWING_X11`, `GDK_WINDOWING_WIN32`
* macros, etc. to find out which backends are present in the GDK library
* you are building your application against. At runtime, use type-check
* macros like GDK_IS_X11_DISPLAY() to find out which backend is in use:
@@ -309,8 +309,7 @@ gdk_display_manager_get (void)
*
* Gets the default `GdkDisplay`.
*
* Returns: (nullable) (transfer none): a `GdkDisplay`, or %NULL if
* there is no default display.
* Returns: (nullable) (transfer none): a `GdkDisplay`
*/
GdkDisplay *
gdk_display_manager_get_default_display (GdkDisplayManager *manager)
@@ -361,8 +360,7 @@ gdk_display_manager_set_default_display (GdkDisplayManager *manager,
* List all currently open displays.
*
* Returns: (transfer container) (element-type GdkDisplay): a newly
* allocated `GSList` of `GdkDisplay` objects. Free with g_slist_free()
* when you are done with it.
* allocated `GSList` of `GdkDisplay` objects
*/
GSList *
gdk_display_manager_list_displays (GdkDisplayManager *manager)

View File

@@ -692,7 +692,7 @@ gdk_drag_set_selected_action (GdkDrag *drag,
* drag operation. The surface is owned by @drag and will be destroyed
* when the drag operation is over.
*
* Returns: (nullable) (transfer none): the drag surface, or %NULL
* Returns: (nullable) (transfer none): the drag surface
*/
GdkSurface *
gdk_drag_get_drag_surface (GdkDrag *drag)

View File

@@ -26,7 +26,7 @@
/**
* GdkDragSurface:
*
* A #GdkDragSurface is an interface for surfaces used during DND.
* A `GdkDragSurface` is an interface for surfaces used during DND.
*/
/**

View File

@@ -188,7 +188,7 @@ gdk_draw_context_init (GdkDrawContext *self)
* may be effecting the contents of the @context's surface.
*
* Returns: %TRUE if the context is between [method@Gdk.DrawContext.begin_frame]
* and [method@Gdk.DrawContext.end_frame] calls.
* and [method@Gdk.DrawContext.end_frame] calls.
*/
gboolean
gdk_draw_context_is_in_frame (GdkDrawContext *context)
@@ -219,7 +219,7 @@ gdk_draw_context_surface_resized (GdkDrawContext *context)
*
* Retrieves the `GdkDisplay` the @context is created for
*
* Returns: (nullable) (transfer none): a `GdkDisplay` or %NULL
* Returns: (nullable) (transfer none): the `GdkDisplay`
*/
GdkDisplay *
gdk_draw_context_get_display (GdkDrawContext *context)
@@ -237,7 +237,7 @@ gdk_draw_context_get_display (GdkDrawContext *context)
*
* Retrieves the surface that @context is bound to.
*
* Returns: (nullable) (transfer none): a #GdkSurface or %NULL
* Returns: (nullable) (transfer none): a `GdkSurface`
*/
GdkSurface *
gdk_draw_context_get_surface (GdkDrawContext *context)
@@ -271,7 +271,7 @@ gdk_draw_context_get_surface (GdkDrawContext *context)
* Note that the @region passed to this function is the minimum region that
* needs to be drawn and depending on implementation, windowing system and
* hardware in use, it might be necessary to draw a larger region. Drawing
* implementation must use [method@Gdk.DrawContext.get_frame_region() to
* implementation must use [method@Gdk.DrawContext.get_frame_region] to
* query the region that must be drawn.
*
* When using GTK, the widget system automatically places calls to
@@ -382,7 +382,7 @@ gdk_draw_context_end_frame (GdkDrawContext *context)
/**
* gdk_draw_context_get_frame_region:
* @context: a #GdkDrawContext
* @context: a `GdkDrawContext`
*
* Retrieves the region that is currently being repainted.
*
@@ -393,8 +393,7 @@ gdk_draw_context_end_frame (GdkDrawContext *context)
* If @context is not in between calls to [method@Gdk.DrawContext.begin_frame]
* and [method@Gdk.DrawContext.end_frame], %NULL will be returned.
*
* Returns: (transfer none) (nullable): a Cairo region or %NULL if not drawing
* a frame.
* Returns: (transfer none) (nullable): a Cairo region
*/
const cairo_region_t *
gdk_draw_context_get_frame_region (GdkDrawContext *context)

View File

@@ -657,12 +657,11 @@ gdk_drop_read_internal (GdkDrop *self,
* gdk_drop_read_async:
* @self: a `GdkDrop`
* @mime_types: (array zero-terminated=1) (element-type utf8):
* pointer to an array of mime types
* pointer to an array of mime types
* @io_priority: the I/O priority for the read operation
* @cancellable: (allow-none): optional `GCancellable` object,
* %NULL to ignore
* @cancellable: (nullable): optional `GCancellable` object
* @callback: (scope async): a `GAsyncReadyCallback` to call when
* the request is satisfied
* the request is satisfied
* @user_data: (closure): the data to pass to @callback
*
* Asynchronously read the dropped data from a `GdkDrop`
@@ -695,7 +694,7 @@ gdk_drop_read_async (GdkDrop *self,
* @self: a `GdkDrop`
* @result: a `GAsyncResult`
* @out_mime_type: (out) (type utf8): return location for the used mime type
* @error: (allow-none): location to store error information on failure, or %NULL
* @error: (nullable): location to store error information on failure
*
* Finishes an async drop read operation.
*
@@ -706,7 +705,7 @@ gdk_drop_read_async (GdkDrop *self,
*
* See [method@Gdk.Drop.read_async].
*
* Returns: (nullable) (transfer full): the `GInputStream`, or %NULL
* Returns: (nullable) (transfer full): the `GInputStream`
*/
GInputStream *
gdk_drop_read_finish (GdkDrop *self,
@@ -892,7 +891,7 @@ gdk_drop_read_value_async (GdkDrop *self,
* gdk_drop_read_value_finish:
* @self: a `GdkDrop`
* @result: a `GAsyncResult`
* @error: a `GError` location to store the error occurring, or %NULL to ignore
* @error: a `GError` location to store the error occurring
*
* Finishes an async drop read.
*

View File

@@ -258,7 +258,7 @@ gdk_event_get_type (void)
* @instance_size: the size of the instance of a GdkEvent subclass
* @instance_init: (nullable): the function to initialize the instance data
* @finalize: (nullable): the function to free the instance data
* @get_state: (nullable): the function to retrieve the #GdkModifierType
* @get_state: (nullable): the function to retrieve the `GdkModifierType`:w
* associated to the event
* @get_position: (nullable): the function to retrieve the event coordinates
* @get_sequence: (nullable): the function to retrieve the event sequence
@@ -358,7 +358,7 @@ static GType gdk_event_types[GDK_EVENT_LAST];
* Similarly to %G_DEFINE_TYPE_WITH_CODE, this macro will generate a `get_type()`
* function that registers the event type.
*
* You can specify code to be run after the type registration; the #GType of
* You can specify code to be run after the type registration; the `GType` of
* the event is available in the `gdk_define_event_type_id` variable.
*/
#define GDK_DEFINE_EVENT_TYPE(TypeName, type_name, type_info, _C_) \
@@ -382,8 +382,8 @@ type_name ## _get_type (void) \
/*< private >
* gdk_event_alloc:
* @event_type: the `GdkEvent`Type to allocate
* @surface: (nullable): the #GdkSurface of the event
* @device: (nullable): the #GdkDevice of the event
* @surface: (nullable): the `GdkSurface` of the event
* @device: (nullable): the `GdkDevice` of the event
* @time_: the event serial
*
* Allocates a `GdkEvent` for the given @event_type, and sets its
@@ -496,14 +496,13 @@ _gdk_event_emit (GdkEvent *event)
/**
* _gdk_event_queue_find_first:
* @display: a #GdkDisplay
*
* @display: a `GdkDisplay`
*
* Find the first event on the queue that is not still
* being filled in.
*
* Returns: (nullable): Pointer to the list node for that event, or
* %NULL.
**/
*
* Returns: (nullable): Pointer to the list node for that event
*/
GList*
_gdk_event_queue_find_first (GdkDisplay *display)
{
@@ -537,13 +536,13 @@ _gdk_event_queue_find_first (GdkDisplay *display)
/**
* _gdk_event_queue_append:
* @display: a #GdkDisplay
* @event: Event to append.
*
* @display: a `GdkDisplay`
* @event: Event to append
*
* Appends an event onto the tail of the event queue.
*
* Returns: the newly appended list node.
**/
*/
GList *
_gdk_event_queue_append (GdkDisplay *display,
GdkEvent *event)
@@ -555,11 +554,11 @@ _gdk_event_queue_append (GdkDisplay *display,
/*
* _gdk_event_queue_remove_link:
* @display: a #GdkDisplay
* @display: a `GdkDisplay`
* @node: node to remove
*
* Removes a specified list node from the event queue.
**/
*/
void
_gdk_event_queue_remove_link (GdkDisplay *display,
GList *node)
@@ -569,14 +568,13 @@ _gdk_event_queue_remove_link (GdkDisplay *display,
/*
* _gdk_event_unqueue:
* @display: a #GdkDisplay
* @display: a `GdkDisplay`
*
* Removes and returns the first event from the event
* queue that is not still being filled in.
*
* Returns: (nullable): the event, or %NULL. Ownership is transferred
* to the caller.
**/
* Returns: (nullable): the event
*/
GdkEvent*
_gdk_event_unqueue (GdkDisplay *display)
{
@@ -1181,7 +1179,7 @@ gdk_event_get_event_type (GdkEvent *event)
*
* Extracts the surface associated with an event.
*
* Returns: (transfer none): The #GdkSurface associated with the event
* Returns: (transfer none): The `GdkSurface` associated with the event
*/
GdkSurface *
gdk_event_get_surface (GdkEvent *event)
@@ -1197,7 +1195,7 @@ gdk_event_get_surface (GdkEvent *event)
*
* Returns the seat that originated the event.
*
* Returns: (nullable) (transfer none): a #GdkSeat.
* Returns: (nullable) (transfer none): a `GdkSeat`.
*/
GdkSeat *
gdk_event_get_seat (GdkEvent *event)
@@ -1213,7 +1211,7 @@ gdk_event_get_seat (GdkEvent *event)
*
* Returns the device of an event.
*
* Returns: (nullable) (transfer none): a #GdkDevice.
* Returns: (nullable) (transfer none): a `GdkDevice`
*/
GdkDevice *
gdk_event_get_device (GdkEvent *event)
@@ -1238,8 +1236,8 @@ gdk_event_get_device (GdkEvent *event)
* the application lifetime, if settings must be stored
* persistently across runs, see [method@Gdk.DeviceTool.get_serial].
*
* Returns: (transfer none) (nullable): The current device tool, or %NULL
**/
* Returns: (transfer none) (nullable): The current device tool
*/
GdkDeviceTool *
gdk_event_get_device_tool (GdkEvent *event)
{
@@ -1273,7 +1271,7 @@ gdk_event_get_time (GdkEvent *event)
*
* Retrieves the display associated to the @event.
*
* Returns: (transfer none) (nullable): a #GdkDisplay
* Returns: (transfer none) (nullable): a `GdkDisplay`
*/
GdkDisplay *
gdk_event_get_display (GdkEvent *event)

View File

@@ -491,7 +491,7 @@ gboolean gdk_events_get_center (GdkEvent *event1,
* GdkKeyMatch:
* @GDK_KEY_MATCH_NONE: The key event does not match
* @GDK_KEY_MATCH_PARTIAL: The key event matches if keyboard state
* (specifically, the currently active group) is ignored
* (specifically, the currently active group) is ignored
* @GDK_KEY_MATCH_EXACT: The key event matches
*
* Describes how well an event matches a given keyval and modifiers.

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