Compare commits
179 Commits
cube-spin
...
pick-insen
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9003609fc5 | ||
|
|
f8a3d05ce1 | ||
|
|
2f30bbbbf2 | ||
|
|
ca07a41f1c | ||
|
|
df18223487 | ||
|
|
b678d12c2d | ||
|
|
a0e6353667 | ||
|
|
bea7ccb41f | ||
|
|
9895f2bd3a | ||
|
|
721a12826d | ||
|
|
4b40cc27a9 | ||
|
|
c92e53622f | ||
|
|
c31185b419 | ||
|
|
5ff59c12b0 | ||
|
|
d3c0899000 | ||
|
|
32334b2e83 | ||
|
|
ea527812a0 | ||
|
|
01851e04fc | ||
|
|
299c53201d | ||
|
|
bfb5e6e72f | ||
|
|
1fab3d9e20 | ||
|
|
f950172731 | ||
|
|
9c9b4e6832 | ||
|
|
2deb0e7e1d | ||
|
|
6f6ea51290 | ||
|
|
11428fb869 | ||
|
|
d465523f65 | ||
|
|
14d97cf547 | ||
|
|
cb3d61bb0e | ||
|
|
f756c3b8a0 | ||
|
|
220c516691 | ||
|
|
ba07279c95 | ||
|
|
ef9dc43474 | ||
|
|
c6aa90f176 | ||
|
|
74352e0bee | ||
|
|
5c8a870510 | ||
|
|
7a29462ca6 | ||
|
|
c3c36d45e5 | ||
|
|
d89df8a980 | ||
|
|
7699b43ffe | ||
|
|
ea7a43beb4 | ||
|
|
70bf6d4b97 | ||
|
|
7cd9ea497b | ||
|
|
0a4a7b310d | ||
|
|
a26f400576 | ||
|
|
a97845c380 | ||
|
|
7f6213291d | ||
|
|
f184393f07 | ||
|
|
1f37600c4c | ||
|
|
08d8f2bb80 | ||
|
|
b14f0b8987 | ||
|
|
edbc99104f | ||
|
|
285293ac17 | ||
|
|
6f7d9f9613 | ||
|
|
fe822a0a24 | ||
|
|
69d4081ff8 | ||
|
|
c9d8ff21d2 | ||
|
|
824743a395 | ||
|
|
5d778175ee | ||
|
|
358ad227d5 | ||
|
|
9700543e02 | ||
|
|
ecc4c4f368 | ||
|
|
31b65e6721 | ||
|
|
cfcca335b1 | ||
|
|
3ea39210cd | ||
|
|
b79220ca19 | ||
|
|
faafd23225 | ||
|
|
62acb80671 | ||
|
|
cf6f9ad4cf | ||
|
|
c6ea37144c | ||
|
|
89c1a66403 | ||
|
|
c4c897f921 | ||
|
|
0d4ad02353 | ||
|
|
d21546d79b | ||
|
|
624c30ecd2 | ||
|
|
25abd88fc4 | ||
|
|
e493b9b702 | ||
|
|
6e0f1800c8 | ||
|
|
528f1f085e | ||
|
|
09cd6e3b5f | ||
|
|
2cc30f75a0 | ||
|
|
222805d580 | ||
|
|
56b42a2ee9 | ||
|
|
c9839b2069 | ||
|
|
b842bf7bf5 | ||
|
|
edccf89020 | ||
|
|
1825aa377b | ||
|
|
e59c6abd91 | ||
|
|
dc88a1ebc4 | ||
|
|
165a21f4bc | ||
|
|
9cb9843367 | ||
|
|
95754aa71f | ||
|
|
f559de112b | ||
|
|
9d1f348129 | ||
|
|
cf3aa570c2 | ||
|
|
7c2ce72b5f | ||
|
|
5371055495 | ||
|
|
4d6acd5d76 | ||
|
|
285e67c044 | ||
|
|
d7987e73c9 | ||
|
|
e13a8102b4 | ||
|
|
e720006110 | ||
|
|
12c4766dd0 | ||
|
|
df19224b20 | ||
|
|
167208c811 | ||
|
|
0187e91843 | ||
|
|
c70c677b5a | ||
|
|
5c31c721af | ||
|
|
7a08177a3d | ||
|
|
ad4142df19 | ||
|
|
ff4d61c087 | ||
|
|
fabef39f7f | ||
|
|
64fd5158bf | ||
|
|
8e4e4401c5 | ||
|
|
167f49caf7 | ||
|
|
6e7748b266 | ||
|
|
447dfc029f | ||
|
|
aed70a82c7 | ||
|
|
5b6031f7e4 | ||
|
|
e54e72b290 | ||
|
|
e5ea6cfcb5 | ||
|
|
998c1f83a6 | ||
|
|
41bb875221 | ||
|
|
365400c13e | ||
|
|
e2fcca4e60 | ||
|
|
0189b0c903 | ||
|
|
aacab81a3e | ||
|
|
4152e14e32 | ||
|
|
57b3cd56d7 | ||
|
|
19f4fce931 | ||
|
|
19d9d69343 | ||
|
|
68af572ba4 | ||
|
|
0eb837e4ca | ||
|
|
5b5a68c5db | ||
|
|
d2e0553384 | ||
|
|
c2c4133eb0 | ||
|
|
058986714c | ||
|
|
91bbce3fef | ||
|
|
0230cc55bc | ||
|
|
6f5675ef3c | ||
|
|
396513183b | ||
|
|
720fd2cd40 | ||
|
|
da7cd6ae25 | ||
|
|
8bae5348f9 | ||
|
|
fb4ffa468c | ||
|
|
0245ac2106 | ||
|
|
b2089b89cc | ||
|
|
56a88f107c | ||
|
|
96bf90abe4 | ||
|
|
081210688c | ||
|
|
fcde8aa94f | ||
|
|
bcac81eed9 | ||
|
|
0c7e7184e7 | ||
|
|
1e372f57f9 | ||
|
|
1ea1decfd6 | ||
|
|
04dfbf7513 | ||
|
|
f273eca7e3 | ||
|
|
53a28f7672 | ||
|
|
5261bc6585 | ||
|
|
ba3a502079 | ||
|
|
7c369f309a | ||
|
|
50906baee1 | ||
|
|
5bc8f8826f | ||
|
|
4e7eccbb49 | ||
|
|
27e47d5df6 | ||
|
|
7002688398 | ||
|
|
54167ec3fa | ||
|
|
a966fe1ed5 | ||
|
|
ab801fe782 | ||
|
|
43778bef4d | ||
|
|
f1ba94843e | ||
|
|
f932d35c95 | ||
|
|
b58a366dc6 | ||
|
|
f30ba56323 | ||
|
|
4dfe2e6e2f | ||
|
|
90c5a5ff6b | ||
|
|
6040a7370c | ||
|
|
c8d7b4a79a | ||
|
|
fad21d8dda |
@@ -18,10 +18,14 @@ fedora-x86_64:
|
||||
script:
|
||||
- bash -x ./.gitlab-ci/test-docker.sh
|
||||
artifacts:
|
||||
when: on_failure
|
||||
when: always
|
||||
reports:
|
||||
junit:
|
||||
- "${CI_PROJECT_DIR}/_build/report.xml"
|
||||
name: "gtk-${CI_COMMIT_REF_NAME}"
|
||||
paths:
|
||||
- "${CI_PROJECT_DIR}/_build/meson-logs"
|
||||
- "${CI_PROJECT_DIR}/_build/report.xml"
|
||||
cache:
|
||||
key: "$CI_JOB_NAME"
|
||||
<<: *cache-paths
|
||||
@@ -53,15 +57,46 @@ msys2-mingw32:
|
||||
script:
|
||||
- bash -x ./.gitlab-ci/flatpak-build.sh "${APPID}"
|
||||
|
||||
flatpak:demo:
|
||||
variables:
|
||||
APPID: org.gtk.Demo
|
||||
# Manual jobs, for branches and MRs
|
||||
.flatpak-manual: &flatpak-manual
|
||||
<<: *flatpak-defaults
|
||||
when: manual
|
||||
|
||||
flatpak:widget-factory:
|
||||
variables:
|
||||
APPID: org.gtk.WidgetFactory
|
||||
# Only build Flatpak bundles automatically on master
|
||||
.flatpak-master: &flatpak-master
|
||||
<<: *flatpak-defaults
|
||||
only:
|
||||
- master
|
||||
|
||||
flatpak-manual:demo:
|
||||
variables:
|
||||
APPID: org.gtk.Demo4
|
||||
<<: *flatpak-manual
|
||||
|
||||
flatpak-master:demo:
|
||||
variables:
|
||||
APPID: org.gtk.Demo4
|
||||
<<: *flatpak-master
|
||||
|
||||
flatpak-manual:widget-factory:
|
||||
variables:
|
||||
APPID: org.gtk.WidgetFactory4
|
||||
<<: *flatpak-manual
|
||||
|
||||
flatpak-master:widget-factory:
|
||||
variables:
|
||||
APPID: org.gtk.WidgetFactory4
|
||||
<<: *flatpak-master
|
||||
|
||||
flatpak-manual:icon-browser:
|
||||
variables:
|
||||
APPID: org.gtk.IconBrowser4
|
||||
<<: *flatpak-manual
|
||||
|
||||
flatpak-master:icon-browser:
|
||||
variables:
|
||||
APPID: org.gtk.IconBrowser4
|
||||
<<: *flatpak-master
|
||||
|
||||
pages:
|
||||
image: registry.gitlab.gnome.org/gnome/gtk/master:v3
|
||||
|
||||
101
.gitlab-ci/meson-junit-report.py
Executable file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
aparser = argparse.ArgumentParser(description='Turns a Meson test log into a JUnit report')
|
||||
aparser.add_argument('--project-name', metavar='NAME',
|
||||
help='The project name',
|
||||
default='unknown')
|
||||
aparser.add_argument('--job-id', metavar='ID',
|
||||
help='The job ID for the report',
|
||||
default='Unknown')
|
||||
aparser.add_argument('--branch', metavar='NAME',
|
||||
help='Branch of the project being tested',
|
||||
default='master')
|
||||
aparser.add_argument('--output', metavar='FILE',
|
||||
help='The output file, stdout by default',
|
||||
type=argparse.FileType('w'),
|
||||
default=sys.stdout)
|
||||
aparser.add_argument('infile', metavar='FILE',
|
||||
help='The input testlog.json, stdin by default',
|
||||
type=argparse.FileType('r'),
|
||||
default=sys.stdin)
|
||||
|
||||
args = aparser.parse_args()
|
||||
|
||||
outfile = args.output
|
||||
|
||||
testsuites = ET.Element('testsuites')
|
||||
testsuites.set('id', '{}/{}'.format(args.job_id, args.branch))
|
||||
testsuites.set('package', args.project_name)
|
||||
testsuites.set('timestamp', datetime.datetime.utcnow().isoformat(timespec='minutes'))
|
||||
|
||||
suites = {}
|
||||
for line in args.infile:
|
||||
data = json.loads(line)
|
||||
(full_suite, unit_name) = data['name'].split(' / ')
|
||||
(project_name, suite_name) = full_suite.split(':')
|
||||
|
||||
duration = data['duration']
|
||||
return_code = data['returncode']
|
||||
log = data['stdout']
|
||||
|
||||
unit = {
|
||||
'suite': suite_name,
|
||||
'name': unit_name,
|
||||
'duration': duration,
|
||||
'returncode': return_code,
|
||||
'stdout': log,
|
||||
}
|
||||
|
||||
units = suites.setdefault(suite_name, [])
|
||||
units.append(unit)
|
||||
|
||||
for name, units in suites.items():
|
||||
print('Processing suite {} (units: {})'.format(name, len(units)))
|
||||
|
||||
def if_failed(unit):
|
||||
if unit['returncode'] != 0:
|
||||
return True
|
||||
return False
|
||||
|
||||
def if_succeded(unit):
|
||||
if unit['returncode'] == 0:
|
||||
return True
|
||||
return False
|
||||
|
||||
successes = list(filter(if_succeded, units))
|
||||
failures = list(filter(if_failed, units))
|
||||
print(' - {}: {} pass, {} fail'.format(name, len(successes), len(failures)))
|
||||
|
||||
testsuite = ET.SubElement(testsuites, 'testsuite')
|
||||
testsuite.set('name', '{}/{}'.format(args.project_name, name))
|
||||
testsuite.set('tests', str(len(units)))
|
||||
testsuite.set('errors', str(len(failures)))
|
||||
testsuite.set('failures', str(len(failures)))
|
||||
|
||||
for unit in successes:
|
||||
testcase = ET.SubElement(testsuite, 'testcase')
|
||||
testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
|
||||
testcase.set('name', unit['name'])
|
||||
testcase.set('time', str(unit['duration']))
|
||||
|
||||
for unit in failures:
|
||||
testcase = ET.SubElement(testsuite, 'testcase')
|
||||
testcase.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
|
||||
testcase.set('name', unit['name'])
|
||||
testcase.set('time', str(unit['duration']))
|
||||
|
||||
failure = ET.SubElement(testcase, 'failure')
|
||||
failure.set('classname', '{}/{}'.format(args.project_name, unit['suite']))
|
||||
failure.set('name', unit['name'])
|
||||
failure.set('type', 'error')
|
||||
failure.text = unit['stdout']
|
||||
|
||||
output = ET.tostring(testsuites, encoding='unicode')
|
||||
outfile.write(output)
|
||||
@@ -24,6 +24,8 @@ cd _build
|
||||
ninja
|
||||
ccache --show-stats
|
||||
|
||||
set +e
|
||||
|
||||
xvfb-run -a -s "-screen 0 1024x768x24" \
|
||||
meson test \
|
||||
--timeout-multiplier 2 \
|
||||
@@ -32,3 +34,15 @@ xvfb-run -a -s "-screen 0 1024x768x24" \
|
||||
--no-suite=gtk:gsk \
|
||||
--no-suite=gtk:reftest \
|
||||
--no-suite=gtk:a11y
|
||||
|
||||
# Save the exit code
|
||||
exit_code=$?
|
||||
|
||||
# We always want to run the report generator
|
||||
$srcdir/.gitlab-ci/meson-junit-report.py \
|
||||
--project-name=gtk \
|
||||
--job-id="${CI_JOB_NAME}" \
|
||||
--output=report.xml \
|
||||
meson-logs/testlog.json
|
||||
|
||||
exit $exit_code
|
||||
|
||||
95
NEWS
@@ -1,3 +1,98 @@
|
||||
Overview of Changes in GTK+ 3.96.0
|
||||
==================================
|
||||
|
||||
* DND has been refactored. There are now separate GdkDrag and GdkDrop
|
||||
objects. This work is still incomplete
|
||||
|
||||
* The GDK_SURFACE_SUBSURFACE surface type has been removed.
|
||||
|
||||
* Use of child surfaces has been greatly reduced. This work is still
|
||||
incomplete
|
||||
|
||||
* The use of global coordinates in GDK apis has been reduced. This
|
||||
work is still incomplete
|
||||
|
||||
* Events have been simplified and are just used for input
|
||||
- expose events have been replaced by a GdkSurface::render signal
|
||||
- configure events have been replaced by a GdkSurface::size-changed signal
|
||||
- map events have been replaced by a GdkSurface::mapped property
|
||||
- gdk_event_handler_set has been replaced by a GdkSurface::event signal
|
||||
- key events no longer contain a string
|
||||
- events on unmapped widgets are ignored
|
||||
|
||||
* Warping the pointer is no longer supported
|
||||
|
||||
* The Wayland backend now uses the Settings portal for GtkSettings
|
||||
|
||||
* The Wayland input module uses the text-input-unstable-v3 protocol
|
||||
|
||||
* The Broadway backend has been rewritten to work well with GSK
|
||||
|
||||
* The color chooser has a color picker
|
||||
|
||||
* GtkApplication tracks screensaver state and has a ::query-end signal
|
||||
|
||||
* The file chooser portal backend supports file filters
|
||||
|
||||
* A number of list models have been introduced, for internal use
|
||||
and as public api:
|
||||
- GtkMapListModel
|
||||
- GtkSliceListModel
|
||||
- GtkSortListModel
|
||||
- GtkSelectionModel
|
||||
- GtkSingleSelection
|
||||
|
||||
* Support for tabular menus and combo boxes has been dropped
|
||||
|
||||
* Key themes are no longer supported
|
||||
|
||||
* GtkInvisible has been dropped
|
||||
|
||||
* A GtkRoot interface has been added that is currently implemented
|
||||
just by GtkWindow. This work is incomplete
|
||||
|
||||
* GtkWidgets can transform their children using projective linear
|
||||
transformations. This functionality is available in CSS and
|
||||
as GskTransform argument to gtk_widget_allocate. GtkFixed is
|
||||
a container that exposes this functionality. For examples of this,
|
||||
see the swing transition of GtkRevealer, the rotate transitions
|
||||
of GtkStack or the Fixed Layout example in gtk-demo.
|
||||
|
||||
* GtkEntry functionality has been moved into a new GtkText widget,
|
||||
the GtkEditable interface has been expanded, and new a new
|
||||
GtkPasswordEntry widget has been introduced.
|
||||
|
||||
* Focus handling has been rewritten, and focus-change event
|
||||
generation has been unified with crossing events.
|
||||
|
||||
* All demos and settings schemas have been renamed to avoid collisions
|
||||
with GTK3.
|
||||
|
||||
* GtkWidget can now use a GtkLayoutManager for size allocation.
|
||||
Layout managers can optionally use layout children holding layout
|
||||
properties. GtkBinLayout, GtkBoxLayout, GtkGridLayout, GtkFixedLayout
|
||||
and GtkCustomLayout are currently available, more layout manager
|
||||
implementations will appear in the future.
|
||||
|
||||
* GtkAssistant, GtkStack and GtkNotebook now have publicly
|
||||
accessible page objects for their children. The page objects
|
||||
are also exposed via a list model.
|
||||
|
||||
* GtkContainer no longer supports child properties. All existing
|
||||
child properties have been removed, converted to regular properties,
|
||||
moved to layout properties or moved to child meta objects.
|
||||
|
||||
* A number of X11-specific GtkWindow and GdkSurface apis have been
|
||||
removed
|
||||
|
||||
* GtkBuilder can specify object-valued properties inline.
|
||||
|
||||
* The gtk4-builder-tool simplify command has gained a --3to4 option
|
||||
to convert GTK3 ui files to GTK4.
|
||||
|
||||
* The inspector can show child meta objects and layout properties.
|
||||
|
||||
|
||||
Overview of Changes in GTK+ 3.94.0
|
||||
==================================
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"app-id": "org.gtk.Demo",
|
||||
"app-id": "org.gtk.Demo4",
|
||||
"runtime": "org.gnome.Platform",
|
||||
"runtime-version": "master",
|
||||
"sdk": "org.gnome.Sdk",
|
||||
@@ -9,10 +9,9 @@
|
||||
"finish-args": [
|
||||
"--device=dri",
|
||||
"--share=ipc",
|
||||
"--socket=x11",
|
||||
"--socket=fallback-x11",
|
||||
"--socket=wayland",
|
||||
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*",
|
||||
"--talk-name=ca.desrt.conf", "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
|
||||
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*"
|
||||
],
|
||||
"cleanup": [
|
||||
"/include",
|
||||
72
build-aux/flatpak/org.gtk.IconBrowser4.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"app-id": "org.gtk.IconBrowser4",
|
||||
"runtime": "org.gnome.Platform",
|
||||
"runtime-version": "master",
|
||||
"sdk": "org.gnome.Sdk",
|
||||
"command": "gtk4-icon-browser",
|
||||
"tags": ["devel", "development", "nightly"],
|
||||
"desktop-file-name-prefix": "(Development) ",
|
||||
"finish-args": [
|
||||
"--device=dri",
|
||||
"--share=ipc",
|
||||
"--socket=fallback-x11",
|
||||
"--socket=wayland",
|
||||
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*"
|
||||
],
|
||||
"cleanup": [
|
||||
"/include",
|
||||
"/lib/pkgconfig", "/share/pkgconfig",
|
||||
"/share/aclocal",
|
||||
"/man", "/share/man", "/share/gtk-doc",
|
||||
"*.la", ".a",
|
||||
"/lib/girepository-1.0",
|
||||
"/share/gir-1.0",
|
||||
"/share/doc"
|
||||
],
|
||||
"modules": [
|
||||
{
|
||||
"name" : "wayland",
|
||||
"buildsystem" : "autotools",
|
||||
"builddir" : true,
|
||||
"config-opts" : [
|
||||
"--disable-documentation"
|
||||
],
|
||||
"sources" : [
|
||||
{
|
||||
"type" : "git",
|
||||
"url" : "https://github.com/wayland-project/wayland.git"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "graphene",
|
||||
"buildsystem": "meson",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"--libdir=/app/lib",
|
||||
"-Dtests=false",
|
||||
"-Dbenchmarks=false"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://github.com/ebassi/graphene.git"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "gtk",
|
||||
"buildsystem": "meson",
|
||||
"builddir": true,
|
||||
"config-opts": [
|
||||
"--libdir=/app/lib"
|
||||
],
|
||||
"sources": [
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://gitlab.gnome.org/GNOME/gtk.git"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"app-id": "org.gtk.WidgetFactory",
|
||||
"app-id": "org.gtk.WidgetFactory4",
|
||||
"runtime": "org.gnome.Platform",
|
||||
"runtime-version": "master",
|
||||
"sdk": "org.gnome.Sdk",
|
||||
@@ -9,10 +9,9 @@
|
||||
"finish-args": [
|
||||
"--device=dri",
|
||||
"--share=ipc",
|
||||
"--socket=x11",
|
||||
"--socket=fallback-x11",
|
||||
"--socket=wayland",
|
||||
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*",
|
||||
"--talk-name=ca.desrt.conf", "--env=DCONF_USER_CONFIG_DIR=.config/dconf"
|
||||
"--talk-name=org.gtk.vfs", "--talk-name=org.gtk.vfs.*"
|
||||
],
|
||||
"cleanup": [
|
||||
"/include",
|
||||
@@ -19,7 +19,7 @@ if 'DESTDIR' not in os.environ:
|
||||
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
|
||||
|
||||
print('Updating icon cache...')
|
||||
subprocess.call(['gtk-update-icon-cache', '-q', '-t' ,'-f',
|
||||
subprocess.call(['gtk4-update-icon-cache', '-q', '-t' ,'-f',
|
||||
os.path.join(gtk_datadir, 'icons', 'hicolor')])
|
||||
|
||||
print('Updating module cache for print backends...')
|
||||
|
||||
@@ -305,13 +305,3 @@
|
||||
#mesondefine HAVE_PANGOFT
|
||||
|
||||
#mesondefine ISO_CODES_PREFIX
|
||||
|
||||
#mesondefine MALLOC_IS_ALIGNED16
|
||||
|
||||
#mesondefine HAVE_POSIX_MEMALIGN
|
||||
|
||||
#mesondefine HAVE_MEMALIGN
|
||||
|
||||
#mesondefine HAVE_ALIGNED_ALLOC
|
||||
|
||||
#mesondefine HAVE__ALIGNED_MALLOC
|
||||
|
||||
@@ -212,7 +212,7 @@ activate_about (GSimpleAction *action,
|
||||
"comments", "Program to demonstrate GTK functions.",
|
||||
"authors", authors,
|
||||
"documenters", documentors,
|
||||
"logo-icon-name", "org.gtk.Demo",
|
||||
"logo-icon-name", "org.gtk.Demo4",
|
||||
"title", "About GTK Code Demos",
|
||||
NULL);
|
||||
}
|
||||
@@ -370,7 +370,7 @@ demo_application_init (DemoApplication *app)
|
||||
GSettings *settings;
|
||||
GAction *action;
|
||||
|
||||
settings = g_settings_new ("org.gtk.Demo");
|
||||
settings = g_settings_new ("org.gtk.Demo4");
|
||||
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (app),
|
||||
app_entries, G_N_ELEMENTS (app_entries),
|
||||
@@ -397,7 +397,7 @@ demo_application_window_store_state (DemoApplicationWindow *win)
|
||||
{
|
||||
GSettings *settings;
|
||||
|
||||
settings = g_settings_new ("org.gtk.Demo");
|
||||
settings = g_settings_new ("org.gtk.Demo4");
|
||||
g_settings_set (settings, "window-size", "(ii)", win->width, win->height);
|
||||
g_settings_set_boolean (settings, "maximized", win->maximized);
|
||||
g_settings_set_boolean (settings, "fullscreen", win->fullscreen);
|
||||
@@ -409,7 +409,7 @@ demo_application_window_load_state (DemoApplicationWindow *win)
|
||||
{
|
||||
GSettings *settings;
|
||||
|
||||
settings = g_settings_new ("org.gtk.Demo");
|
||||
settings = g_settings_new ("org.gtk.Demo4");
|
||||
g_settings_get (settings, "window-size", "(ii)", &win->width, &win->height);
|
||||
win->maximized = g_settings_get_boolean (settings, "maximized");
|
||||
win->fullscreen = g_settings_get_boolean (settings, "fullscreen");
|
||||
@@ -541,7 +541,7 @@ main (int argc, char *argv[])
|
||||
GtkApplication *app;
|
||||
|
||||
app = GTK_APPLICATION (g_object_new (demo_application_get_type (),
|
||||
"application-id", "org.gtk.Demo2",
|
||||
"application-id", "org.gtk.Demo4.App",
|
||||
"flags", G_APPLICATION_HANDLES_OPEN,
|
||||
NULL));
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="DemoApplicationWindow" parent="GtkApplicationWindow">
|
||||
<property name="title" translatable="yes">Application Class</property>
|
||||
@@ -32,11 +33,11 @@
|
||||
<property name="action-name">win.logo</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkInfoBar" id="infobar">
|
||||
@@ -63,11 +64,11 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
@@ -79,20 +80,20 @@
|
||||
<property name="buffer">buffer</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStatusbar" id="status">
|
||||
<property name="hexpand">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -52,7 +52,7 @@ do_application_demo (GtkWidget *toplevel)
|
||||
|
||||
if (watch == 0)
|
||||
watch = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
||||
"org.gtk.Demo2",
|
||||
"org.gtk.Demo4.App",
|
||||
0,
|
||||
on_name_appeared,
|
||||
on_name_vanished,
|
||||
@@ -80,8 +80,8 @@ do_application_demo (GtkWidget *toplevel)
|
||||
else
|
||||
{
|
||||
g_dbus_connection_call_sync (g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL),
|
||||
"org.gtk.Demo2",
|
||||
"/org/gtk/Demo2",
|
||||
"org.gtk.Demo4.App",
|
||||
"/org/gtk/Demo4/App",
|
||||
"org.gtk.Actions",
|
||||
"Activate",
|
||||
g_variant_new ("(sava{sv})", "quit", NULL, NULL),
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<menu id="appmenu">
|
||||
<section>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.20"/>
|
||||
<object class="GtkWindow" id="window">
|
||||
@@ -16,11 +17,11 @@
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow">
|
||||
@@ -28,22 +29,22 @@
|
||||
<property name="vexpand">1</property>
|
||||
<property name="shadow-type">in</property>
|
||||
<property name="min-content-width">150</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStackSwitcher">
|
||||
<property name="halign">center</property>
|
||||
<property name="hexpand">1</property>
|
||||
<property name="stack">stack</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStack" id="stack">
|
||||
@@ -66,53 +67,53 @@
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Duck</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Background</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<style>
|
||||
<class name="duck"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<style>
|
||||
<class name="gradient"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">
|
||||
Blended picture</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
<property name="column-span">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
@@ -120,12 +121,12 @@ Blended picture</property>
|
||||
<style>
|
||||
<class name="blend0"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
<property name="column-span">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
@@ -145,53 +146,53 @@ Blended picture</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Red</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">Blue</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<style>
|
||||
<class name="red"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<style>
|
||||
<class name="blue"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label" translatable="yes">
|
||||
Blended picture</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
<property name="column-span">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
@@ -199,12 +200,12 @@ Blended picture</property>
|
||||
<style>
|
||||
<class name="blend1"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
<property name="column-span">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
@@ -227,33 +228,33 @@ Blended picture</property>
|
||||
<style>
|
||||
<class name="cyan"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<style>
|
||||
<class name="magenta"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<style>
|
||||
<class name="yellow"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
@@ -261,11 +262,11 @@ Blended picture</property>
|
||||
<style>
|
||||
<class name="blend2"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -274,11 +275,11 @@ Blended picture</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -287,11 +288,11 @@ Blended picture</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -300,11 +301,11 @@ Blended picture</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -313,21 +314,21 @@ Blended picture</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"></attribute>
|
||||
</attributes>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GdkCursor" id="default_cursor">
|
||||
<property name="name">default</property>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
@@ -10,7 +10,7 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="org.gtk.Demo-symbolic.svg"
|
||||
sodipodi:docname="org.gtk.Demo4-symbolic.svg"
|
||||
height="16.03125"
|
||||
id="svg7384"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
@@ -163,6 +163,7 @@
|
||||
<file>expander.c</file>
|
||||
<file>filtermodel.c</file>
|
||||
<file>fishbowl.c</file>
|
||||
<file>fixed.c</file>
|
||||
<file>flowbox.c</file>
|
||||
<file>foreigndrawing.c</file>
|
||||
<file>font_features.c</file>
|
||||
@@ -270,7 +271,10 @@
|
||||
<file>demotaggedentry.c</file>
|
||||
<file>demotaggedentry.h</file>
|
||||
</gresource>
|
||||
<gresource prefix="/org/gtk/Demo">
|
||||
<gresource prefix="/fixed">
|
||||
<file>fixed.css</file>
|
||||
</gresource>
|
||||
<gresource prefix="/org/gtk/Demo4">
|
||||
<file>icons/16x16/actions/application-exit.png</file>
|
||||
<file>icons/16x16/actions/document-new.png</file>
|
||||
<file>icons/16x16/actions/document-open.png</file>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkListStore" id="liststore1">
|
||||
<columns>
|
||||
|
||||
@@ -243,7 +243,7 @@ pressed_cb (GtkGesture *gesture,
|
||||
GtkWidget *child;
|
||||
|
||||
widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
|
||||
child = gtk_widget_pick (widget, x, y);
|
||||
child = gtk_widget_pick (widget, x, y, TRUE);
|
||||
|
||||
if (gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)) == GDK_BUTTON_SECONDARY)
|
||||
{
|
||||
@@ -320,7 +320,7 @@ released_cb (GtkGesture *gesture,
|
||||
GtkWidget *child;
|
||||
|
||||
widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (gesture));
|
||||
child = gtk_widget_pick (widget, x, y);
|
||||
child = gtk_widget_pick (widget, x, y, TRUE);
|
||||
|
||||
if (gtk_gesture_single_get_current_button (GTK_GESTURE_SINGLE (gesture)) == GDK_BUTTON_PRIMARY)
|
||||
{
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.16"/>
|
||||
<object class="GtkListStore" id="liststore1">
|
||||
@@ -44,11 +45,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="treeview1"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview1">
|
||||
@@ -83,11 +84,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label1"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview2">
|
||||
@@ -134,11 +135,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label2"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
@@ -150,11 +151,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="treeview2"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label3">
|
||||
@@ -166,11 +167,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="treeview3"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview3">
|
||||
@@ -199,11 +200,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label3"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkWindow" id="window">
|
||||
<property name="title" translatable="yes">Fishbowl</property>
|
||||
@@ -27,25 +28,21 @@
|
||||
<object class="GtkLabel">
|
||||
<property name="label">fps</property>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkLabel">
|
||||
<property name="label" bind-source="bowl" bind-property="framerate"/>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Icons, </property>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkLabel">
|
||||
<property name="label" bind-source="bowl" bind-property="count"/>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkToggleButton" id="changes_allow">
|
||||
@@ -53,7 +50,6 @@
|
||||
<property name="icon-name">changes-allow</property>
|
||||
<property name="relief">none</property>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkToggleButton" id="changes_prevent">
|
||||
@@ -62,7 +58,6 @@
|
||||
<property name="icon-name">changes-prevent</property>
|
||||
<property name="relief">none</property>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
167
demos/gtk-demo/fixed.c
Normal file
@@ -0,0 +1,167 @@
|
||||
/* Fixed layout
|
||||
*
|
||||
* GtkFixed is a container that allows placing and transforming
|
||||
* widgets manually.
|
||||
*/
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
/* This enumeration determines the paint order */
|
||||
enum {
|
||||
FACE_BACK,
|
||||
FACE_LEFT,
|
||||
FACE_BOTTOM,
|
||||
FACE_RIGHT,
|
||||
FACE_TOP,
|
||||
FACE_FRONT,
|
||||
|
||||
N_FACES
|
||||
};
|
||||
|
||||
/* Map face widgets to CSS classes */
|
||||
static struct {
|
||||
GtkWidget *face;
|
||||
const char *css_class;
|
||||
} faces[N_FACES] = {
|
||||
[FACE_BACK] = { NULL, "back", },
|
||||
[FACE_LEFT] = { NULL, "left", },
|
||||
[FACE_RIGHT] = { NULL, "right", },
|
||||
[FACE_TOP] = { NULL, "top", },
|
||||
[FACE_BOTTOM] = { NULL, "bottom", },
|
||||
[FACE_FRONT] = { NULL, "front", },
|
||||
};
|
||||
|
||||
static GtkWidget *
|
||||
create_faces (void)
|
||||
{
|
||||
GtkWidget *fixed = gtk_fixed_new ();
|
||||
int face_size = 200;
|
||||
float w, h, d, p;
|
||||
|
||||
gtk_widget_set_overflow (fixed, GTK_OVERFLOW_VISIBLE);
|
||||
|
||||
w = (float) face_size / 2.f;
|
||||
h = (float) face_size / 2.f;
|
||||
d = (float) face_size / 2.f;
|
||||
p = face_size * 3.f;
|
||||
|
||||
for (int i = 0; i < N_FACES; i++)
|
||||
{
|
||||
GskTransform *transform = NULL;
|
||||
|
||||
/* Add a face */
|
||||
faces[i].face = gtk_frame_new (NULL);
|
||||
gtk_widget_set_size_request (faces[i].face, face_size, face_size);
|
||||
gtk_style_context_add_class (gtk_widget_get_style_context (faces[i].face), faces[i].css_class);
|
||||
gtk_container_add (GTK_CONTAINER (fixed), faces[i].face);
|
||||
|
||||
/* Set up the transformation for each face */
|
||||
transform = gsk_transform_translate (transform, &GRAPHENE_POINT_INIT (w, h));
|
||||
transform = gsk_transform_perspective (transform, p);
|
||||
transform = gsk_transform_rotate_3d (transform, -30.f, graphene_vec3_x_axis ());
|
||||
transform = gsk_transform_rotate_3d (transform, 135.f, graphene_vec3_y_axis ());
|
||||
transform = gsk_transform_translate_3d (transform, &GRAPHENE_POINT3D_INIT (0, 0, -face_size / 6.f));
|
||||
|
||||
switch (i)
|
||||
{
|
||||
case FACE_FRONT:
|
||||
transform = gsk_transform_rotate_3d (transform, 0.f, graphene_vec3_y_axis ());
|
||||
break;
|
||||
|
||||
case FACE_BACK:
|
||||
transform = gsk_transform_rotate_3d (transform, -180.f, graphene_vec3_y_axis ());
|
||||
break;
|
||||
|
||||
case FACE_RIGHT:
|
||||
transform = gsk_transform_rotate_3d (transform, 90.f, graphene_vec3_y_axis ());
|
||||
break;
|
||||
|
||||
case FACE_LEFT:
|
||||
transform = gsk_transform_rotate_3d (transform, -90.f, graphene_vec3_y_axis ());
|
||||
break;
|
||||
|
||||
case FACE_TOP:
|
||||
transform = gsk_transform_rotate_3d (transform, 90.f, graphene_vec3_x_axis ());
|
||||
break;
|
||||
|
||||
case FACE_BOTTOM:
|
||||
transform = gsk_transform_rotate_3d (transform, -90.f, graphene_vec3_x_axis ());
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
transform = gsk_transform_translate_3d (transform, &GRAPHENE_POINT3D_INIT (0, 0, d));
|
||||
transform = gsk_transform_translate_3d (transform, &GRAPHENE_POINT3D_INIT (-w, -h, 0));
|
||||
|
||||
gtk_fixed_set_child_transform (GTK_FIXED (fixed), faces[i].face, transform);
|
||||
gsk_transform_unref (transform);
|
||||
}
|
||||
|
||||
return fixed;
|
||||
}
|
||||
|
||||
static GtkWidget *demo_window = NULL;
|
||||
static GtkCssProvider *provider = NULL;
|
||||
|
||||
static void
|
||||
close_window (GtkWidget *widget)
|
||||
{
|
||||
/* Reset the state */
|
||||
for (int i = 0; i < N_FACES; i++)
|
||||
faces[i].face = NULL;
|
||||
|
||||
gtk_style_context_remove_provider_for_display (gdk_display_get_default (),
|
||||
GTK_STYLE_PROVIDER (provider));
|
||||
provider = NULL;
|
||||
|
||||
demo_window = NULL;
|
||||
}
|
||||
|
||||
static GtkWidget *
|
||||
create_demo_window (GtkWidget *do_widget)
|
||||
{
|
||||
GtkWidget *window, *sw, *fixed, *cube;
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_display (GTK_WINDOW (window), gtk_widget_get_display (do_widget));
|
||||
gtk_window_set_title (GTK_WINDOW (window), "Fixed layout");
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
|
||||
g_signal_connect (window, "destroy", G_CALLBACK (close_window), NULL);
|
||||
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_container_add (GTK_CONTAINER (window), sw);
|
||||
|
||||
fixed = gtk_fixed_new ();
|
||||
gtk_container_add (GTK_CONTAINER (sw), fixed);
|
||||
gtk_widget_set_halign (GTK_WIDGET (fixed), GTK_ALIGN_CENTER);
|
||||
gtk_widget_set_valign (GTK_WIDGET (fixed), GTK_ALIGN_CENTER);
|
||||
|
||||
cube = create_faces ();
|
||||
gtk_container_add (GTK_CONTAINER (fixed), cube);
|
||||
gtk_widget_set_overflow (fixed, GTK_OVERFLOW_VISIBLE);
|
||||
|
||||
provider = gtk_css_provider_new ();
|
||||
gtk_css_provider_load_from_resource (provider, "/fixed/fixed.css");
|
||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||
GTK_STYLE_PROVIDER (provider),
|
||||
800);
|
||||
g_object_unref (provider);
|
||||
|
||||
return window;
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
do_fixed (GtkWidget *do_widget)
|
||||
{
|
||||
if (demo_window == NULL)
|
||||
demo_window = create_demo_window (do_widget);
|
||||
|
||||
if (!gtk_widget_get_visible (demo_window))
|
||||
gtk_widget_show (demo_window);
|
||||
else
|
||||
gtk_widget_destroy (demo_window);
|
||||
|
||||
return demo_window;
|
||||
}
|
||||
29
demos/gtk-demo/fixed.css
Normal file
@@ -0,0 +1,29 @@
|
||||
frame.front {
|
||||
border: 2px solid white;
|
||||
background-color: rgba(228, 0, 0, 0.8);
|
||||
}
|
||||
|
||||
frame.back {
|
||||
border: 2px solid white;
|
||||
background-color: rgba(228, 0, 0, 0.8);
|
||||
}
|
||||
|
||||
frame.right {
|
||||
border: 2px solid white;
|
||||
background-color: rgba(127, 231, 25, 0.8);
|
||||
}
|
||||
|
||||
frame.left {
|
||||
border: 2px solid white;
|
||||
background-color: rgba(127, 231, 25, 0.8);
|
||||
}
|
||||
|
||||
frame.top {
|
||||
border: 2px solid white;
|
||||
background-color: rgba(114, 159, 207, 0.8);
|
||||
}
|
||||
|
||||
frame.bottom {
|
||||
border: 2px solid white;
|
||||
background-color: rgba(114, 159, 207, 0.8);
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.12"/>
|
||||
<object class="GtkWindow" id="window">
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface domain="gtk40">
|
||||
<object class="GtkMenu" id="menu1">
|
||||
<child>
|
||||
@@ -28,12 +29,12 @@
|
||||
<property name="margin-start">8</property>
|
||||
<property name="margin-end">8</property>
|
||||
<property name="icon-name">image-missing</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
<property name="row-span">5</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
<property name="height">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box1">
|
||||
@@ -74,11 +75,11 @@
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="content_label">
|
||||
@@ -91,11 +92,11 @@
|
||||
<accessibility>
|
||||
<role type="static"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="resent_box">
|
||||
@@ -118,11 +119,11 @@
|
||||
<property name="uri">http://www.gtk.org</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box3">
|
||||
@@ -181,11 +182,11 @@
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="details_revealer">
|
||||
@@ -250,11 +251,11 @@ FAVORITES</property>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">4</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -58,7 +58,7 @@ activate_about (GSimpleAction *action,
|
||||
"website", "http://www.gtk.org",
|
||||
"comments", "Program to demonstrate GTK widgets",
|
||||
"authors", authors,
|
||||
"logo-icon-name", "org.gtk.Demo",
|
||||
"logo-icon-name", "org.gtk.Demo4",
|
||||
"title", "About GTK Demo",
|
||||
NULL);
|
||||
}
|
||||
@@ -668,7 +668,7 @@ add_data_tab (const gchar *demoname)
|
||||
gtk_widget_show (label);
|
||||
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), widget, label);
|
||||
g_object_set (gtk_notebook_get_page (GTK_NOTEBOOK (notebook), widget),
|
||||
"tab-expand", TRUE,
|
||||
"tab-expand", FALSE,
|
||||
NULL);
|
||||
|
||||
g_free (resource_name);
|
||||
@@ -1212,7 +1212,7 @@ main (int argc, char **argv)
|
||||
}
|
||||
/* -- End of hack -- */
|
||||
|
||||
app = gtk_application_new ("org.gtk.Demo", G_APPLICATION_NON_UNIQUE|G_APPLICATION_HANDLES_COMMAND_LINE);
|
||||
app = gtk_application_new ("org.gtk.Demo4", G_APPLICATION_NON_UNIQUE|G_APPLICATION_HANDLES_COMMAND_LINE);
|
||||
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (app),
|
||||
app_entries, G_N_ELEMENTS (app_entries),
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkTreeStore" id="treestore">
|
||||
<columns>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<menu id="appmenu">
|
||||
<section>
|
||||
|
||||
@@ -24,6 +24,7 @@ demos = files([
|
||||
'expander.c',
|
||||
'filtermodel.c',
|
||||
'fishbowl.c',
|
||||
'fixed.c',
|
||||
'foreigndrawing.c',
|
||||
'gestures.c',
|
||||
'glarea.c',
|
||||
@@ -134,11 +135,11 @@ foreach size: ['scalable', 'symbolic']
|
||||
endforeach
|
||||
|
||||
# desktop file
|
||||
install_data('org.gtk.Demo.desktop', install_dir: gtk_applicationsdir)
|
||||
install_data('org.gtk.Demo4.desktop', install_dir: gtk_applicationsdir)
|
||||
|
||||
# GSettings
|
||||
install_data('org.gtk.Demo.gschema.xml', install_dir: gtk_schemasdir)
|
||||
install_data('org.gtk.Demo4.gschema.xml', install_dir: gtk_schemasdir)
|
||||
gnome.compile_schemas()
|
||||
|
||||
# appdata
|
||||
install_data('org.gtk.Demo.appdata.xml', install_dir: gtk_appdatadir)
|
||||
install_data('org.gtk.Demo4.appdata.xml', install_dir: gtk_appdatadir)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkWindow" id="window1">
|
||||
<child type="titlebar">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop">
|
||||
<id>org.gtk.Demo.desktop</id>
|
||||
<id>org.gtk.Demo4.desktop</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>LGPL-2.0+</project_license>
|
||||
<name>GTK Demo</name>
|
||||
@@ -2,7 +2,7 @@
|
||||
Name=GTK Demo
|
||||
Comment=GTK code examples and demonstrations
|
||||
Exec=gtk4-demo
|
||||
Icon=org.gtk.Demo
|
||||
Icon=org.gtk.Demo4
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
@@ -2,14 +2,14 @@
|
||||
|
||||
<schemalist>
|
||||
|
||||
<enum id='org.gtk.Demo.Color'>
|
||||
<enum id='org.gtk.Demo4.Color'>
|
||||
<value nick='red' value='0'/>
|
||||
<value nick='green' value='1'/>
|
||||
<value nick='blue' value='2'/>
|
||||
</enum>
|
||||
|
||||
<schema id='org.gtk.Demo' path='/org/gtk/Demo/'>
|
||||
<key name='color' enum='org.gtk.Demo.Color'>
|
||||
<schema id='org.gtk.Demo4' path='/org/gtk/Demo4/'>
|
||||
<key name='color' enum='org.gtk.Demo4.Color'>
|
||||
<default>'red'</default>
|
||||
</key>
|
||||
<key name='window-size' type='(ii)'>
|
||||
@@ -27,10 +27,16 @@ toggle_resize (GtkWidget *widget,
|
||||
|
||||
is_child1 = (child == gtk_paned_get_child1 (paned));
|
||||
|
||||
gtk_container_child_get (GTK_CONTAINER (paned), child,
|
||||
"resize", &resize,
|
||||
"shrink", &shrink,
|
||||
NULL);
|
||||
if (is_child1)
|
||||
g_object_get (paned,
|
||||
"resize-child1", &resize,
|
||||
"shrink-child1", &shrink,
|
||||
NULL);
|
||||
else
|
||||
g_object_get (paned,
|
||||
"resize-child2", &resize,
|
||||
"shrink-child2", &shrink,
|
||||
NULL);
|
||||
|
||||
g_object_ref (child);
|
||||
gtk_container_remove (GTK_CONTAINER (parent), child);
|
||||
@@ -55,10 +61,16 @@ toggle_shrink (GtkWidget *widget,
|
||||
|
||||
is_child1 = (child == gtk_paned_get_child1 (paned));
|
||||
|
||||
gtk_container_child_get (GTK_CONTAINER (paned), child,
|
||||
"resize", &resize,
|
||||
"shrink", &shrink,
|
||||
NULL);
|
||||
if (is_child1)
|
||||
g_object_get (paned,
|
||||
"resize-child1", &resize,
|
||||
"shrink-child1", &shrink,
|
||||
NULL);
|
||||
else
|
||||
g_object_get (paned,
|
||||
"resize-child2", &resize,
|
||||
"shrink-child2", &shrink,
|
||||
NULL);
|
||||
|
||||
g_object_ref (child);
|
||||
gtk_container_remove (GTK_CONTAINER (parent), child);
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkListStore" id="liststore1">
|
||||
<columns>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkWindow" id="window">
|
||||
<property name="default-width">300</property>
|
||||
@@ -17,11 +18,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="revealer1">
|
||||
@@ -33,11 +34,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="revealer2">
|
||||
@@ -49,11 +50,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">3</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">3</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="revealer3">
|
||||
@@ -64,11 +65,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="revealer4">
|
||||
@@ -80,11 +81,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="revealer5">
|
||||
@@ -96,11 +97,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="revealer6">
|
||||
@@ -112,11 +113,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">4</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">4</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="revealer7">
|
||||
@@ -127,11 +128,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">4</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRevealer" id="revealer8">
|
||||
@@ -143,11 +144,11 @@
|
||||
<property name="icon-size">large</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkAdjustment" id="adjustment1">
|
||||
<property name="upper">4</property>
|
||||
@@ -31,11 +32,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="scale_plain"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="scale_plain">
|
||||
@@ -47,11 +48,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label_plain"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_marks">
|
||||
@@ -60,11 +61,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="scale_marks"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="scale_marks">
|
||||
@@ -83,11 +84,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label_marks"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_discrete">
|
||||
@@ -96,11 +97,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="scale_discrete"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="scale_discrete">
|
||||
@@ -120,11 +121,11 @@
|
||||
<mark value="3" position="bottom"/>
|
||||
<mark value="4" position="bottom"/>
|
||||
</marks>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkShortcutsWindow" id="shortcuts-boxes">
|
||||
<property name="modal">1</property>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkShortcutsWindow" id="shortcuts-builder">
|
||||
<property name="modal">1</property>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkShortcutsWindow" id="shortcuts-clocks">
|
||||
<property name="modal">1</property>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkShortcutsWindow" id="shortcuts-gedit">
|
||||
<property name="modal">1</property>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkWindow" id="window1">
|
||||
<property name="title" translatable="yes">Shortcuts</property>
|
||||
|
||||
@@ -65,7 +65,7 @@ do_sidebar (GtkWidget *do_widget)
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
widget = gtk_image_new_from_icon_name ("org.gtk.Demo");
|
||||
widget = gtk_image_new_from_icon_name ("org.gtk.Demo4");
|
||||
gtk_image_set_pixel_size (GTK_IMAGE (widget), 256);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -228,7 +228,7 @@ puzzle_button_pressed (GtkGestureMultiPress *gesture,
|
||||
int l, t, i;
|
||||
int pos;
|
||||
|
||||
child = gtk_widget_pick (grid, x, y);
|
||||
child = gtk_widget_pick (grid, x, y, TRUE);
|
||||
|
||||
if (!child)
|
||||
{
|
||||
@@ -236,10 +236,7 @@ puzzle_button_pressed (GtkGestureMultiPress *gesture,
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_container_child_get (GTK_CONTAINER (grid), child,
|
||||
"left-attach", &l,
|
||||
"top-attach", &t,
|
||||
NULL);
|
||||
gtk_grid_query_child (GTK_GRID (grid), child, &l, &t, NULL, NULL);
|
||||
|
||||
if (l == pos_x && t == pos_y)
|
||||
{
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkAdjustment" id="basic_adjustment">
|
||||
<property name="lower">-10000</property>
|
||||
@@ -35,11 +36,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">basic_spin</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="basic_spin">
|
||||
@@ -49,21 +50,21 @@
|
||||
<property name="climb-rate">1</property>
|
||||
<property name="digits">2</property>
|
||||
<property name="numeric">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="basic_label">
|
||||
<property name="width-chars">10</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -71,11 +72,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">hex_spin</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="hex_spin">
|
||||
@@ -85,21 +86,21 @@
|
||||
<signal name="input" handler="hex_spin_input"/>
|
||||
<signal name="output" handler="hex_spin_output"/>
|
||||
<property name="wrap">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="hex_label">
|
||||
<property name="width-chars">10</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -107,11 +108,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">time_spin</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="time_spin">
|
||||
@@ -121,21 +122,21 @@
|
||||
<signal name="input" handler="time_spin_input"/>
|
||||
<signal name="output" handler="time_spin_output"/>
|
||||
<property name="wrap">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="time_label">
|
||||
<property name="width-chars">10</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -143,11 +144,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">month_spin</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinButton" id="month_spin">
|
||||
@@ -158,21 +159,21 @@
|
||||
<property name="adjustment">month_adjustment</property>
|
||||
<property name="wrap">1</property>
|
||||
<property name="update-policy">if-valid</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="month_label">
|
||||
<property name="width-chars">10</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkWindow" id="window1">
|
||||
<property name="title" translatable="yes">Stack</property>
|
||||
@@ -7,11 +8,11 @@
|
||||
<object class="GtkStackSwitcher">
|
||||
<property name="stack">stack</property>
|
||||
<property name="halign">center</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStack" id="stack">
|
||||
@@ -25,7 +26,7 @@
|
||||
<object class="GtkImage">
|
||||
<property name="margin-top">20</property>
|
||||
<property name="margin-bottom">20</property>
|
||||
<property name="icon-name">org.gtk.Demo</property>
|
||||
<property name="icon-name">org.gtk.Demo4</property>
|
||||
</object>
|
||||
</property>
|
||||
</object>
|
||||
@@ -57,11 +58,11 @@
|
||||
</property>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="GtkGrid" id="grid">
|
||||
<property name="row-spacing">10</property>
|
||||
|
||||
|
Before Width: | Height: | Size: 5.2 KiB After Width: | Height: | Size: 5.2 KiB |
@@ -10,7 +10,7 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
sodipodi:docname="org.gtk.IconBrowser-symbolic.svg"
|
||||
sodipodi:docname="org.gtk.IconBrowser4-symbolic.svg"
|
||||
height="16.03125"
|
||||
id="svg7384"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"
|
||||
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 7.1 KiB |
@@ -68,6 +68,6 @@ IconBrowserApp *
|
||||
icon_browser_app_new (void)
|
||||
{
|
||||
return g_object_new (ICON_BROWSER_APP_TYPE,
|
||||
"application-id", "org.gtk.IconBrowser",
|
||||
"application-id", "org.gtk.IconBrowser4",
|
||||
NULL);
|
||||
}
|
||||
|
||||
@@ -285,19 +285,6 @@ populate (IconBrowserWindow *win)
|
||||
g_strfreev (groups);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
key_event_cb (GtkEventController *controller,
|
||||
guint keyval,
|
||||
guint keycode,
|
||||
GdkModifierType state,
|
||||
gpointer data)
|
||||
{
|
||||
IconBrowserWindow *win = data;
|
||||
|
||||
return gtk_search_bar_handle_event (GTK_SEARCH_BAR (win->searchbar),
|
||||
gtk_get_current_event ());
|
||||
}
|
||||
|
||||
static void
|
||||
copy_to_clipboard (GtkButton *button,
|
||||
IconBrowserWindow *win)
|
||||
@@ -452,7 +439,6 @@ static void
|
||||
icon_browser_window_init (IconBrowserWindow *win)
|
||||
{
|
||||
GdkContentFormats *list;
|
||||
GtkEventController *controller;
|
||||
|
||||
gtk_widget_init_template (GTK_WIDGET (win));
|
||||
|
||||
@@ -479,13 +465,11 @@ icon_browser_window_init (IconBrowserWindow *win)
|
||||
|
||||
g_signal_connect (win->searchbar, "notify::search-mode-enabled",
|
||||
G_CALLBACK (search_mode_toggled), win);
|
||||
gtk_search_bar_set_key_capture_widget (GTK_SEARCH_BAR (win->searchbar),
|
||||
GTK_WIDGET (win));
|
||||
|
||||
symbolic_toggled (GTK_TOGGLE_BUTTON (win->symbolic_radio), win);
|
||||
|
||||
controller = gtk_event_controller_key_new ();
|
||||
g_signal_connect (controller, "key-pressed", G_CALLBACK (key_event_cb), win);
|
||||
gtk_widget_add_controller (GTK_WIDGET (win), controller);
|
||||
|
||||
populate (win);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ executable('gtk4-icon-browser',
|
||||
link_args: extra_demo_ldflags,
|
||||
install: true)
|
||||
|
||||
install_data('org.gtk.IconBrowser.desktop', install_dir: gtk_applicationsdir)
|
||||
install_data('org.gtk.IconBrowser4.desktop', install_dir: gtk_applicationsdir)
|
||||
|
||||
# icons
|
||||
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
Name=Icon Browser
|
||||
Comment=An application that shows themed icons
|
||||
Exec=gtk4-icon-browser
|
||||
Icon=org.gtk.IconBrowser
|
||||
Icon=org.gtk.IconBrowser4
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object class="IconStore" id="store"/>
|
||||
<object class="GtkTreeModelFilter" id="filter_model">
|
||||
@@ -46,7 +47,6 @@
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
@@ -134,11 +134,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label1"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image2">
|
||||
@@ -147,11 +147,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label2"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image3">
|
||||
@@ -160,11 +160,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label3"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image4">
|
||||
@@ -173,11 +173,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label4"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">3</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">3</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image5">
|
||||
@@ -186,11 +186,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label5"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">4</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">4</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkImage" id="image6">
|
||||
@@ -199,11 +199,11 @@
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="label6"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">5</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">5</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label1">
|
||||
@@ -216,11 +216,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image1"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label2">
|
||||
@@ -233,11 +233,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image2"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label3">
|
||||
@@ -250,11 +250,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image3"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label4">
|
||||
@@ -267,11 +267,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image4"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">3</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">3</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label5">
|
||||
@@ -284,11 +284,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image5"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">4</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">4</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label6">
|
||||
@@ -301,11 +301,11 @@
|
||||
<accessibility>
|
||||
<relation type="label-for" target="image6"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">5</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">5</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
@@ -13,7 +13,7 @@ executable('gtk4-widget-factory',
|
||||
install: true)
|
||||
|
||||
# desktop file
|
||||
install_data('org.gtk.WidgetFactory.desktop', install_dir: gtk_applicationsdir)
|
||||
install_data('org.gtk.WidgetFactory4.desktop', install_dir: gtk_applicationsdir)
|
||||
|
||||
# icons
|
||||
icontheme_dir = join_paths(gtk_datadir, 'icons/hicolor')
|
||||
@@ -25,4 +25,4 @@ foreach size: ['scalable', 'symbolic']
|
||||
endforeach
|
||||
|
||||
# appdata
|
||||
install_data('org.gtk.WidgetFactory.appdata.xml', install_dir: gtk_appdatadir)
|
||||
install_data('org.gtk.WidgetFactory4.appdata.xml', install_dir: gtk_appdatadir)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop">
|
||||
<id>org.gtk.WidgetFactory.desktop</id>
|
||||
<id>org.gtk.WidgetFactory4.desktop</id>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>LGPL-2.0+</project_license>
|
||||
<name>GTK Widget Factory</name>
|
||||
@@ -2,7 +2,7 @@
|
||||
Name=Widget Factory
|
||||
Comment=A showcase for GTK widgets, designed for testing themes.
|
||||
Exec=gtk4-widget-factory
|
||||
Icon=org.gtk.WidgetFactory
|
||||
Icon=org.gtk.WidgetFactory4
|
||||
Terminal=false
|
||||
Type=Application
|
||||
StartupNotify=true
|
||||
@@ -232,7 +232,7 @@ activate_about (GSimpleAction *action,
|
||||
"website", "http://www.gtk.org",
|
||||
"comments", "Program to demonstrate GTK themes and widgets",
|
||||
"authors", authors,
|
||||
"logo-icon-name", "org.gtk.WidgetFactory",
|
||||
"logo-icon-name", "org.gtk.WidgetFactory4",
|
||||
"title", "About GTK Widget Factory",
|
||||
"system-information", s->str,
|
||||
NULL);
|
||||
@@ -1657,13 +1657,13 @@ activate (GApplication *app)
|
||||
g_type_ensure (my_text_view_get_type ());
|
||||
|
||||
provider = gtk_css_provider_new ();
|
||||
gtk_css_provider_load_from_resource (provider, "/org/gtk/WidgetFactory/widget-factory.css");
|
||||
gtk_css_provider_load_from_resource (provider, "/org/gtk/WidgetFactory4/widget-factory.css");
|
||||
gtk_style_context_add_provider_for_display (gdk_display_get_default (),
|
||||
GTK_STYLE_PROVIDER (provider),
|
||||
GTK_STYLE_PROVIDER_PRIORITY_USER);
|
||||
g_object_unref (provider);
|
||||
|
||||
builder = gtk_builder_new_from_resource ("/org/gtk/WidgetFactory/widget-factory.ui");
|
||||
builder = gtk_builder_new_from_resource ("/org/gtk/WidgetFactory4/widget-factory.ui");
|
||||
gtk_builder_add_callback_symbol (builder, "on_entry_icon_release", (GCallback)on_entry_icon_release);
|
||||
gtk_builder_add_callback_symbol (builder, "on_scale_button_value_changed", (GCallback)on_scale_button_value_changed);
|
||||
gtk_builder_add_callback_symbol (builder, "on_scale_button_query_tooltip", (GCallback)on_scale_button_query_tooltip);
|
||||
@@ -1944,7 +1944,7 @@ main (int argc, char *argv[])
|
||||
};
|
||||
gint status;
|
||||
|
||||
app = gtk_application_new ("org.gtk.WidgetFactory", G_APPLICATION_NON_UNIQUE);
|
||||
app = gtk_application_new ("org.gtk.WidgetFactory4", G_APPLICATION_NON_UNIQUE);
|
||||
|
||||
g_action_map_add_action_entries (G_ACTION_MAP (app),
|
||||
app_entries, G_N_ELEMENTS (app_entries),
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<gresources>
|
||||
<gresource prefix="/org/gtk/WidgetFactory">
|
||||
<gresource prefix="/org/gtk/WidgetFactory4">
|
||||
<file preprocess="xml-stripblanks">widget-factory.ui</file>
|
||||
</gresource>
|
||||
<gresource prefix="/org/gtk/WidgetFactory">
|
||||
<gresource prefix="/org/gtk/WidgetFactory4">
|
||||
<file>widget-factory.css</file>
|
||||
</gresource>
|
||||
<gresource prefix="/org/gtk/WidgetFactory/gtk">
|
||||
<gresource prefix="/org/gtk/WidgetFactory4/gtk">
|
||||
<file preprocess="xml-stripblanks">help-overlay.ui</file>
|
||||
</gresource>
|
||||
<gresource prefix="/org/gtk/WidgetFactory">
|
||||
<gresource prefix="/org/gtk/WidgetFactory4">
|
||||
<file>icons/16x16/actions/document-new.png</file>
|
||||
<file>icons/16x16/actions/document-save.png</file>
|
||||
<file>icons/16x16/actions/edit-find.png</file>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<menu id="gear_menu">
|
||||
<section>
|
||||
@@ -593,32 +594,32 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="label" translatable="yes">checkbutton</property>
|
||||
<property name="can-focus">1</property>
|
||||
<property name="active">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton2">
|
||||
<property name="label" translatable="yes">checkbutton</property>
|
||||
<property name="can-focus">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton3">
|
||||
<property name="label" translatable="yes">checkbutton</property>
|
||||
<property name="inconsistent">1</property>
|
||||
<property name="can-focus">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton4">
|
||||
@@ -626,22 +627,22 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="sensitive">0</property>
|
||||
<property name="can-focus">1</property>
|
||||
<property name="active">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton5">
|
||||
<property name="label" translatable="yes">checkbutton</property>
|
||||
<property name="sensitive">0</property>
|
||||
<property name="can-focus">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">4</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="checkbutton6">
|
||||
@@ -649,22 +650,22 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="sensitive">0</property>
|
||||
<property name="inconsistent">1</property>
|
||||
<property name="can-focus">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">5</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radiobutton1">
|
||||
<property name="label" translatable="yes">radiobutton</property>
|
||||
<property name="can-focus">1</property>
|
||||
<property name="active">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radiobutton2">
|
||||
@@ -672,11 +673,11 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="can-focus">1</property>
|
||||
<property name="active">1</property>
|
||||
<property name="group">radiobutton1</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radiobutton3">
|
||||
@@ -685,11 +686,11 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="can-focus">1</property>
|
||||
<property name="active">1</property>
|
||||
<property name="group">radiobutton1</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radiobutton4">
|
||||
@@ -697,11 +698,11 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="sensitive">0</property>
|
||||
<property name="can-focus">1</property>
|
||||
<property name="active">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radiobutton5">
|
||||
@@ -710,11 +711,11 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="can-focus">1</property>
|
||||
<property name="active">1</property>
|
||||
<property name="group">radiobutton3</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">4</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkRadioButton" id="radiobutton6">
|
||||
@@ -724,46 +725,47 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="can-focus">1</property>
|
||||
<property name="active">1</property>
|
||||
<property name="group">radiobutton3</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">5</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinner" id="spinner1">
|
||||
<property name="active">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinner" id="spinner2"/>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
<object class="GtkSpinner" id="spinner2">
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinner" id="spinner3">
|
||||
<property name="active">1</property>
|
||||
<property name="sensitive">0</property>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSpinner" id="spinner4">
|
||||
<property name="sensitive">0</property>
|
||||
<layout>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">4</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">2</property>
|
||||
<property name="top-attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
@@ -1502,11 +1504,11 @@ Suspendisse feugiat quam quis dolor accumsan cursus.</property>
|
||||
<property name="valign">center</property>
|
||||
<property name="value">.5</property>
|
||||
<property name="halign">center</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScaleButton" id="mic-button">
|
||||
@@ -1520,11 +1522,11 @@ microphone-sensitivity-medium-symbolic</property>
|
||||
<property name="halign">center</property>
|
||||
<signal name="query-tooltip" handler="on_scale_button_query_tooltip" swapped="no"/>
|
||||
<signal name="value-changed" handler="on_scale_button_value_changed" swapped="no"/>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
@@ -1569,7 +1571,7 @@ microphone-sensitivity-medium-symbolic</property>
|
||||
<property name="title">Logo</property>
|
||||
<property name="child">
|
||||
<object class="GtkImage" id="imageo">
|
||||
<property name="icon-name">gtk3-widget-factory</property>
|
||||
<property name="icon-name">org.gtk.WidgetFactory4</property>
|
||||
<property name="pixel-size">256</property>
|
||||
</object>
|
||||
</property>
|
||||
@@ -3193,20 +3195,20 @@ bad things might happen.</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="details_entry">
|
||||
<property name="valign">baseline</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -3218,20 +3220,20 @@ bad things might happen.</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="more_details_entry">
|
||||
<property name="valign">baseline</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -3243,22 +3245,22 @@ bad things might happen.</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScale" id="level_scale">
|
||||
<property name="valign">baseline</property>
|
||||
<property name="draw-value">0</property>
|
||||
<property name="adjustment">adjustment1</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
@@ -3270,21 +3272,21 @@ bad things might happen.</property>
|
||||
<style>
|
||||
<class name="dim-label"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSwitch" id="mode_switch">
|
||||
<property name="halign">start</property>
|
||||
<property name="valign">baseline</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
@@ -3342,11 +3344,11 @@ bad things might happen.</property>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="open_popover_entry"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="description_label">
|
||||
@@ -3356,11 +3358,11 @@ bad things might happen.</property>
|
||||
<accessibility>
|
||||
<relation type="label-for" target="open_popover_textview"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow">
|
||||
@@ -3377,11 +3379,11 @@ bad things might happen.</property>
|
||||
</accessibility>
|
||||
</object>
|
||||
</child>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="open_popover_entry">
|
||||
@@ -3389,11 +3391,11 @@ bad things might happen.</property>
|
||||
<accessibility>
|
||||
<relation type="labelled-by" target="title_label"/>
|
||||
</accessibility>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="open_popover_button">
|
||||
@@ -3405,11 +3407,11 @@ bad things might happen.</property>
|
||||
<style>
|
||||
<class name="suggested-action"/>
|
||||
</style>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -502,10 +502,6 @@ gdk_device_get_n_keys
|
||||
gdk_device_get_axes
|
||||
gdk_device_get_seat
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_device_grab
|
||||
gdk_device_ungrab
|
||||
|
||||
<SUBSECTION>
|
||||
gdk_device_get_state
|
||||
gdk_device_get_position
|
||||
@@ -1001,7 +997,6 @@ gdk_wayland_display_get_wl_display
|
||||
gdk_wayland_display_query_registry
|
||||
gdk_wayland_surface_new_subsurface
|
||||
gdk_wayland_surface_get_wl_surface
|
||||
gdk_wayland_surface_set_use_custom_surface
|
||||
GdkWaylandSurfaceExported
|
||||
gdk_wayland_surface_export_handle
|
||||
gdk_wayland_surface_unexport_handle
|
||||
|
||||
@@ -54,16 +54,6 @@ Start your applications like this:
|
||||
<programlisting>
|
||||
GDK_BACKEND=broadway BROADWAY_DISPLAY=:5 gtk4-demo
|
||||
</programlisting>
|
||||
|
||||
You can add password protection for your session by creating a file in
|
||||
<filename>$XDG_CONFIG_HOME/broadway.passwd</filename> or <filename>$HOME/.config/broadway.passwd</filename>
|
||||
with a crypt(3) style password hash.
|
||||
|
||||
A simple way to generate it is with openssl:
|
||||
<programlisting>
|
||||
openssl passwd -1 > ~/.config/broadway.passwd
|
||||
</programlisting>
|
||||
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
|
||||
@@ -92,7 +92,6 @@
|
||||
<xi:include href="xml/gtkheaderbar.xml" />
|
||||
<xi:include href="xml/gtkoverlay.xml" />
|
||||
<xi:include href="xml/gtkpaned.xml" />
|
||||
<xi:include href="xml/gtklayout.xml" />
|
||||
<xi:include href="xml/gtknotebook.xml" />
|
||||
<xi:include href="xml/gtkexpander.xml" />
|
||||
<xi:include href="xml/gtkorientable.xml" />
|
||||
@@ -104,7 +103,11 @@
|
||||
<title>Layout Managers</title>
|
||||
<xi:include href="xml/gtklayoutmanager.xml" />
|
||||
<xi:include href="xml/gtklayoutchild.xml" />
|
||||
<xi:include href="xml/gtkbinlayout.xml" />
|
||||
<xi:include href="xml/gtkboxlayout.xml" />
|
||||
<xi:include href="xml/gtkcustomlayout.xml" />
|
||||
<xi:include href="xml/gtkfixedlayout.xml" />
|
||||
<xi:include href="xml/gtkgridlayout.xml" />
|
||||
</chapter>
|
||||
|
||||
<chapter id="DisplayWidgets">
|
||||
|
||||
@@ -744,10 +744,8 @@ gtk_combo_box_text_get_type
|
||||
<TITLE>GtkContainer</TITLE>
|
||||
GtkContainer
|
||||
GtkContainerClass
|
||||
GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID
|
||||
gtk_container_add
|
||||
gtk_container_remove
|
||||
gtk_container_add_with_properties
|
||||
gtk_container_foreach
|
||||
gtk_container_get_children
|
||||
gtk_container_get_path_for_child
|
||||
@@ -756,19 +754,7 @@ gtk_container_set_focus_vadjustment
|
||||
gtk_container_get_focus_hadjustment
|
||||
gtk_container_set_focus_hadjustment
|
||||
gtk_container_child_type
|
||||
gtk_container_child_get
|
||||
gtk_container_child_set
|
||||
gtk_container_child_get_property
|
||||
gtk_container_child_set_property
|
||||
gtk_container_child_get_valist
|
||||
gtk_container_child_set_valist
|
||||
gtk_container_child_notify
|
||||
gtk_container_child_notify_by_pspec
|
||||
gtk_container_forall
|
||||
gtk_container_class_find_child_property
|
||||
gtk_container_class_install_child_property
|
||||
gtk_container_class_install_child_properties
|
||||
gtk_container_class_list_child_properties
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_CONTAINER
|
||||
@@ -1739,27 +1725,6 @@ GtkLabelPrivate
|
||||
GtkLabelSelectionInfo
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtklayout</FILE>
|
||||
<TITLE>GtkLayout</TITLE>
|
||||
GtkLayout
|
||||
gtk_layout_new
|
||||
gtk_layout_put
|
||||
gtk_layout_move
|
||||
gtk_layout_set_size
|
||||
gtk_layout_get_size
|
||||
<SUBSECTION Standard>
|
||||
GTK_LAYOUT
|
||||
GTK_IS_LAYOUT
|
||||
GTK_TYPE_LAYOUT
|
||||
GTK_LAYOUT_CLASS
|
||||
GTK_IS_LAYOUT_CLASS
|
||||
GTK_LAYOUT_GET_CLASS
|
||||
<SUBSECTION Private>
|
||||
GtkLayoutPrivate
|
||||
gtk_layout_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtklinkbutton</FILE>
|
||||
<TITLE>GtkLinkButton</TITLE>
|
||||
@@ -2514,7 +2479,6 @@ gtk_search_bar_get_search_mode
|
||||
gtk_search_bar_set_search_mode
|
||||
gtk_search_bar_get_show_close_button
|
||||
gtk_search_bar_set_show_close_button
|
||||
gtk_search_bar_handle_event
|
||||
gtk_search_bar_set_key_capture_widget
|
||||
gtk_search_bar_get_key_capture_widget
|
||||
<SUBSECTION Standard>
|
||||
@@ -2533,7 +2497,6 @@ gtk_search_bar_get_type
|
||||
<TITLE>GtkSearchEntry</TITLE>
|
||||
GtkSearchEntry
|
||||
gtk_search_entry_new
|
||||
gtk_search_entry_handle_event
|
||||
gtk_search_entry_set_key_capture_widget
|
||||
gtk_search_entry_get_key_capture_widget
|
||||
<SUBSECTION Standard>
|
||||
@@ -4508,8 +4471,6 @@ gtk_widget_class_set_accessible_type
|
||||
gtk_widget_class_set_accessible_role
|
||||
gtk_widget_get_accessible
|
||||
gtk_widget_child_focus
|
||||
gtk_widget_child_notify
|
||||
gtk_widget_freeze_child_notify
|
||||
gtk_widget_get_child_visible
|
||||
gtk_widget_get_parent
|
||||
gtk_widget_get_settings
|
||||
@@ -4519,7 +4480,6 @@ gtk_widget_get_display
|
||||
gtk_widget_get_size_request
|
||||
gtk_widget_set_child_visible
|
||||
gtk_widget_set_size_request
|
||||
gtk_widget_thaw_child_notify
|
||||
gtk_widget_list_mnemonic_labels
|
||||
gtk_widget_add_mnemonic_label
|
||||
gtk_widget_remove_mnemonic_label
|
||||
@@ -5055,8 +5015,6 @@ gtk_style_context_get_state
|
||||
gtk_style_context_get_valist
|
||||
gtk_style_context_get_section
|
||||
gtk_style_context_get_color
|
||||
gtk_style_context_get_background_color
|
||||
gtk_style_context_get_border_color
|
||||
gtk_style_context_get_border
|
||||
gtk_style_context_get_padding
|
||||
gtk_style_context_get_margin
|
||||
@@ -7215,3 +7173,85 @@ gtk_box_layout_get_baseline_position
|
||||
GTK_TYPE_BOX_LAYOUT
|
||||
gtk_box_layout_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkcustomlayout</FILE>
|
||||
GtkCustomLayout
|
||||
|
||||
GtkCustomRequestModeFunc
|
||||
GtkCustomMeasureFunc
|
||||
GtkCustomAllocateFunc
|
||||
|
||||
gtk_custom_layout_new
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_CUSTOM_LAYOUT
|
||||
gtk_custom_layout_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkbinlayout</FILE>
|
||||
GtkBinLayout
|
||||
|
||||
gtk_bin_layout_new
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_BIN_LAYOUT
|
||||
gtk_bin_layout_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkfixedlayout</FILE>
|
||||
GtkFixedLayout
|
||||
|
||||
gtk_fixed_layout_new
|
||||
|
||||
<SUBSECTION>
|
||||
GtkFixedLayoutChild
|
||||
|
||||
gtk_fixed_layout_child_set_position
|
||||
gtk_fixed_layout_child_get_position
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_FIXED_LAYOUT
|
||||
gtk_fixed_layout_get_type
|
||||
GTK_TYPE_FIXED_LAYOUT_CHILD
|
||||
gtk_fixed_layout_child_get_type
|
||||
</SECTION>
|
||||
|
||||
<SECTION>
|
||||
<FILE>gtkgridlayout</FILE>
|
||||
GtkGridLayout
|
||||
|
||||
gtk_grid_layout_new
|
||||
gtk_grid_layout_set_row_homogeneous
|
||||
gtk_grid_layout_get_row_homogeneous
|
||||
gtk_grid_layout_set_row_spacing
|
||||
gtk_grid_layout_get_row_spacing
|
||||
gtk_grid_layout_set_column_homogeneous
|
||||
gtk_grid_layout_get_column_homogeneous
|
||||
gtk_grid_layout_set_column_spacing
|
||||
gtk_grid_layout_get_column_spacing
|
||||
gtk_grid_layout_set_row_baseline_position
|
||||
gtk_grid_layout_get_row_baseline_position
|
||||
gtk_grid_layout_set_baseline_row
|
||||
gtk_grid_layout_get_baseline_row
|
||||
|
||||
<SUBSECTION>
|
||||
GtkGridLayoutChild
|
||||
|
||||
gtk_grid_layout_child_set_top_attach
|
||||
gtk_grid_layout_child_get_top_attach
|
||||
gtk_grid_layout_child_set_left_attach
|
||||
gtk_grid_layout_child_get_left_attach
|
||||
gtk_grid_layout_child_set_column_span
|
||||
gtk_grid_layout_child_get_column_span
|
||||
gtk_grid_layout_child_set_row_span
|
||||
gtk_grid_layout_child_get_row_span
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_TYPE_GRID_LAYOUT
|
||||
gtk_grid_layout_get_type
|
||||
GTK_TYPE_GRID_LAYOUT_CHILD
|
||||
gtk_grid_layout_child_get_type
|
||||
</SECTION>
|
||||
|
||||
@@ -16,7 +16,9 @@ gtk_aspect_frame_get_type
|
||||
gtk_assistant_get_type
|
||||
gtk_assistant_page_get_type
|
||||
gtk_bin_get_type
|
||||
gtk_bin_layout_get_type
|
||||
gtk_box_get_type
|
||||
gtk_box_layout_get_type
|
||||
gtk_builder_get_type
|
||||
gtk_buildable_get_type
|
||||
gtk_button_get_type
|
||||
@@ -64,6 +66,7 @@ gtk_file_chooser_get_type
|
||||
gtk_file_chooser_widget_get_type
|
||||
gtk_file_filter_get_type
|
||||
gtk_fixed_get_type
|
||||
gtk_fixed_layout_get_type
|
||||
gtk_flow_box_get_type
|
||||
gtk_flow_box_child_get_type
|
||||
gtk_font_button_get_type
|
||||
@@ -83,6 +86,8 @@ gtk_gesture_swipe_get_type
|
||||
gtk_gesture_zoom_get_type
|
||||
gtk_gl_area_get_type
|
||||
gtk_grid_get_type
|
||||
gtk_grid_layout_child_get_type
|
||||
gtk_grid_layout_get_type
|
||||
gtk_header_bar_get_type
|
||||
gtk_icon_theme_get_type
|
||||
gtk_icon_view_get_type
|
||||
@@ -92,7 +97,8 @@ gtk_im_context_simple_get_type
|
||||
gtk_im_multicontext_get_type
|
||||
gtk_info_bar_get_type
|
||||
gtk_label_get_type
|
||||
gtk_layout_get_type
|
||||
gtk_layout_child_get_type
|
||||
gtk_layout_manager_get_type
|
||||
gtk_link_button_get_type
|
||||
gtk_list_store_get_type
|
||||
gtk_list_box_get_type
|
||||
|
||||
@@ -665,6 +665,16 @@
|
||||
pass-through == !can-pick.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<title>Use GtkFixed instead of GtkLayout</title>
|
||||
<para>
|
||||
Since GtkScrolledWindow can deal with widgets that do not implement
|
||||
the GtkScrollable interface by automatically wrapping them into a
|
||||
GtkViewport, GtkLayout is redundant, and has been removed in favor
|
||||
of the existing GtkFixed container widget.
|
||||
</para>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
</chapter>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppPrefs" parent="GtkDialog">
|
||||
<property name="title" translatable="yes">Preferences</property>
|
||||
@@ -16,18 +17,19 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">font</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFontButton" id="font"/>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
<object class="GtkFontButton" id="font">
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="transitionlabel">
|
||||
@@ -35,11 +37,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">transition</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="transition">
|
||||
@@ -48,11 +50,11 @@
|
||||
<item translatable="yes" id="crossfade">Fade</item>
|
||||
<item translatable="yes" id="slide-left-right">Slide</item>
|
||||
</items>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppWindow" parent="GtkApplicationWindow">
|
||||
<property name="title" translatable="yes">Example Application</property>
|
||||
@@ -27,7 +28,6 @@
|
||||
<property name="sensitive">0</property>
|
||||
<property name="icon-name">edit-find-symbolic</property>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkMenuButton" id="gears">
|
||||
@@ -36,7 +36,6 @@
|
||||
<class name="image-button"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppPrefs" parent="GtkDialog">
|
||||
<property name="title" translatable="yes">Preferences</property>
|
||||
@@ -16,18 +17,19 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">font</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFontButton" id="font"/>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
<object class="GtkFontButton" id="font">
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="transitionlabel">
|
||||
@@ -35,11 +37,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">transition</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="transition">
|
||||
@@ -48,11 +50,11 @@
|
||||
<item translatable="yes" id="crossfade">Fade</item>
|
||||
<item translatable="yes" id="slide-left-right">Slide</item>
|
||||
</items>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppPrefs" parent="GtkDialog">
|
||||
<property name="title" translatable="yes">Preferences</property>
|
||||
@@ -16,18 +17,19 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">font</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFontButton" id="font"/>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
<object class="GtkFontButton" id="font">
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="transitionlabel">
|
||||
@@ -35,11 +37,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">transition</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="transition">
|
||||
@@ -48,11 +50,11 @@
|
||||
<item translatable="yes" id="crossfade">Fade</item>
|
||||
<item translatable="yes" id="slide-left-right">Slide</item>
|
||||
</items>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppWindow" parent="GtkApplicationWindow">
|
||||
<property name="title" translatable="yes">Example Application</property>
|
||||
@@ -18,7 +19,6 @@
|
||||
<property name="sensitive">0</property>
|
||||
<property name="icon-name">edit-find-symbolic</property>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppPrefs" parent="GtkDialog">
|
||||
<property name="title" translatable="yes">Preferences</property>
|
||||
@@ -16,18 +17,19 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">font</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFontButton" id="font"/>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
<object class="GtkFontButton" id="font">
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="transitionlabel">
|
||||
@@ -35,11 +37,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">transition</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="transition">
|
||||
@@ -48,11 +50,11 @@
|
||||
<item translatable="yes" id="crossfade">Fade</item>
|
||||
<item translatable="yes" id="slide-left-right">Slide</item>
|
||||
</items>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppWindow" parent="GtkApplicationWindow">
|
||||
<property name="title" translatable="yes">Example Application</property>
|
||||
@@ -18,7 +19,6 @@
|
||||
<property name="sensitive">0</property>
|
||||
<property name="icon-name">edit-find-symbolic</property>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkMenuButton" id="gears">
|
||||
@@ -27,7 +27,6 @@
|
||||
<class name="image-button"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppPrefs" parent="GtkDialog">
|
||||
<property name="title" translatable="yes">Preferences</property>
|
||||
@@ -16,18 +17,19 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">font</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFontButton" id="font"/>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
<object class="GtkFontButton" id="font">
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="transitionlabel">
|
||||
@@ -35,11 +37,11 @@
|
||||
<property name="use-underline">1</property>
|
||||
<property name="mnemonic-widget">transition</property>
|
||||
<property name="xalign">1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="transition">
|
||||
@@ -48,11 +50,11 @@
|
||||
<item translatable="yes" id="crossfade">Fade</item>
|
||||
<item translatable="yes" id="slide-left-right">Slide</item>
|
||||
</items>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<template class="ExampleAppWindow" parent="GtkApplicationWindow">
|
||||
<property name="title" translatable="yes">Example Application</property>
|
||||
@@ -29,7 +30,6 @@
|
||||
<property name="sensitive">0</property>
|
||||
<property name="icon-name">edit-find-symbolic</property>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
<child type="end">
|
||||
<object class="GtkMenuButton" id="gears">
|
||||
@@ -38,7 +38,6 @@
|
||||
<class name="image-button"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<interface>
|
||||
<object id="window" class="GtkWindow">
|
||||
<property name="title">Grid</property>
|
||||
@@ -6,30 +7,30 @@
|
||||
<child>
|
||||
<object id="button1" class="GtkButton">
|
||||
<property name="label">Button 1</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object id="button2" class="GtkButton">
|
||||
<property name="label">Button 2</property>
|
||||
<layout>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object id="quit" class="GtkButton">
|
||||
<property name="label">Quit</property>
|
||||
<layout>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
<property name="column-span">2</property>
|
||||
</layout>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">1</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "broadway-output.h"
|
||||
|
||||
//#define DEBUG_NODE_SENDING
|
||||
//#define DEBUG_NODE_SENDING_REMOVE
|
||||
|
||||
/************************************************************************
|
||||
* Basic I/O primitives *
|
||||
@@ -113,7 +114,7 @@ broadway_output_set_next_serial (BroadwayOutput *output,
|
||||
************************************************************************/
|
||||
|
||||
static void
|
||||
append_char (BroadwayOutput *output, char c)
|
||||
append_uint8 (BroadwayOutput *output, guint8 c)
|
||||
{
|
||||
g_string_append_c (output->buf, c);
|
||||
}
|
||||
@@ -172,7 +173,7 @@ patch_uint32 (BroadwayOutput *output, guint32 v, gsize offset)
|
||||
static void
|
||||
write_header(BroadwayOutput *output, char op)
|
||||
{
|
||||
append_char (output, op);
|
||||
append_uint8 (output, op);
|
||||
append_uint32 (output, output->serial++);
|
||||
}
|
||||
|
||||
@@ -317,15 +318,25 @@ static void
|
||||
append_type (BroadwayOutput *output, guint32 type, BroadwayNode *node)
|
||||
{
|
||||
#ifdef DEBUG_NODE_SENDING
|
||||
g_print ("%*s%s", append_node_depth*2, "", broadway_node_type_names[type]);
|
||||
g_print ("%*s%s(%d/%d)", append_node_depth*2, "", broadway_node_type_names[type], node->id, node->output_id);
|
||||
if (type == BROADWAY_NODE_TEXTURE)
|
||||
g_print (" %u", node->data[4]);
|
||||
g_print (" tx=%u", node->data[4]);
|
||||
g_print ("\n");
|
||||
#endif
|
||||
|
||||
append_uint32 (output, type);
|
||||
}
|
||||
|
||||
static BroadwayNode *
|
||||
lookup_old_node (GHashTable *old_node_lookup,
|
||||
guint32 id)
|
||||
{
|
||||
if (old_node_lookup)
|
||||
return g_hash_table_lookup (old_node_lookup, GINT_TO_POINTER (id));
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/***********************************
|
||||
* This outputs the tree to the client, while at the same time diffing
|
||||
@@ -347,59 +358,230 @@ append_type (BroadwayOutput *output, guint32 type, BroadwayNode *node)
|
||||
static void
|
||||
append_node (BroadwayOutput *output,
|
||||
BroadwayNode *node,
|
||||
BroadwayNode *old_node,
|
||||
gboolean all_parents_are_kept)
|
||||
GHashTable *old_node_lookup)
|
||||
{
|
||||
guint32 i;
|
||||
BroadwayNode *reused_node;
|
||||
|
||||
append_node_depth++;
|
||||
|
||||
if (old_node != NULL && broadway_node_equal (node, old_node))
|
||||
reused_node = lookup_old_node (old_node_lookup, node->id);
|
||||
if (reused_node)
|
||||
{
|
||||
if (broadway_node_deep_equal (node, old_node))
|
||||
{
|
||||
append_type (output, BROADWAY_NODE_KEEP_ALL, node);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (all_parents_are_kept)
|
||||
{
|
||||
append_type (output, BROADWAY_NODE_KEEP_THIS, node);
|
||||
append_uint32 (output, node->n_children);
|
||||
for (i = 0; i < node->n_children; i++)
|
||||
append_node (output, node->children[i],
|
||||
i < old_node->n_children ? old_node->children[i] : NULL,
|
||||
TRUE);
|
||||
|
||||
goto out;
|
||||
}
|
||||
broadway_node_mark_deep_consumed (reused_node, TRUE);
|
||||
append_type (output, BROADWAY_NODE_REUSE, node);
|
||||
append_uint32 (output, node->output_id);
|
||||
}
|
||||
else
|
||||
{
|
||||
append_type (output, node->type, node);
|
||||
append_uint32 (output, node->output_id);
|
||||
for (i = 0; i < node->n_data; i++)
|
||||
append_uint32 (output, node->data[i]);
|
||||
for (i = 0; i < node->n_children; i++)
|
||||
append_node (output,
|
||||
node->children[i],
|
||||
old_node_lookup);
|
||||
}
|
||||
|
||||
append_type (output, node->type, node);
|
||||
for (i = 0; i < node->n_data; i++)
|
||||
append_uint32 (output, node->data[i]);
|
||||
for (i = 0; i < node->n_children; i++)
|
||||
append_node (output,
|
||||
node->children[i],
|
||||
(old_node != NULL && i < old_node->n_children) ? old_node->children[i] : NULL,
|
||||
FALSE);
|
||||
|
||||
out:
|
||||
append_node_depth--;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
should_reuse_node (BroadwayOutput *output,
|
||||
BroadwayNode *node,
|
||||
BroadwayNode *old_node)
|
||||
{
|
||||
int i;
|
||||
guint32 new_texture;
|
||||
|
||||
if (old_node->reused)
|
||||
return FALSE;
|
||||
|
||||
if (node->type != old_node->type)
|
||||
return FALSE;
|
||||
|
||||
if (broadway_node_equal (node, old_node))
|
||||
return TRUE;
|
||||
|
||||
switch (node->type) {
|
||||
case BROADWAY_NODE_TRANSFORM:
|
||||
#ifdef DEBUG_NODE_SENDING
|
||||
g_print ("Patching transform node %d/%d\n",
|
||||
old_node->id, old_node->output_id);
|
||||
#endif
|
||||
append_uint32 (output, BROADWAY_NODE_OP_PATCH_TRANSFORM);
|
||||
append_uint32 (output, old_node->output_id);
|
||||
for (i = 0; i < node->n_data; i++)
|
||||
append_uint32 (output, node->data[i]);
|
||||
return TRUE;
|
||||
|
||||
case BROADWAY_NODE_TEXTURE:
|
||||
/* Check that the size, etc is the same */
|
||||
for (i = 0; i < 4; i++)
|
||||
if (node->data[i] != old_node->data[i])
|
||||
return FALSE;
|
||||
|
||||
new_texture = node->data[4];
|
||||
|
||||
#ifdef DEBUG_NODE_SENDING
|
||||
g_print ("Patching texture node %d/%d to tx=%d\n",
|
||||
old_node->id, old_node->output_id,
|
||||
new_texture);
|
||||
#endif
|
||||
append_uint32 (output, BROADWAY_NODE_OP_PATCH_TEXTURE);
|
||||
append_uint32 (output, old_node->output_id);
|
||||
append_uint32 (output, new_texture);
|
||||
return TRUE;
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static BroadwayNode *
|
||||
append_node_ops (BroadwayOutput *output,
|
||||
BroadwayNode *node,
|
||||
BroadwayNode *parent,
|
||||
BroadwayNode *previous_sibling,
|
||||
BroadwayNode *old_node,
|
||||
GHashTable *old_node_lookup)
|
||||
{
|
||||
BroadwayNode *reused_node;
|
||||
guint32 i;
|
||||
|
||||
/* Maybe can be reused from the last tree. */
|
||||
reused_node = lookup_old_node (old_node_lookup, node->id);
|
||||
if (reused_node)
|
||||
{
|
||||
g_assert (node == reused_node);
|
||||
g_assert (reused_node->reused);
|
||||
g_assert (!reused_node->consumed); /* Should only be once in the tree, and not consumed otherwise */
|
||||
|
||||
broadway_node_mark_deep_consumed (reused_node, TRUE);
|
||||
|
||||
if (node == old_node)
|
||||
{
|
||||
/* The node in the old tree at the current position is the same, so
|
||||
we need to do nothing, just don't delete it (which we won't since
|
||||
its marked used) */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We can reuse it, bu it comes from a different place or
|
||||
order, if so we need to move it in place */
|
||||
#ifdef DEBUG_NODE_SENDING
|
||||
g_print ("Move old node %d/%d to parent %d/%d after %d/%d\n",
|
||||
reused_node->id, reused_node->output_id,
|
||||
parent ? parent->id : 0,
|
||||
parent ? parent->output_id : 0,
|
||||
previous_sibling ? previous_sibling->id : 0,
|
||||
previous_sibling ? previous_sibling->output_id : 0);
|
||||
#endif
|
||||
append_uint32 (output, BROADWAY_NODE_OP_MOVE_AFTER_CHILD);
|
||||
append_uint32 (output, parent ? parent->output_id : 0);
|
||||
append_uint32 (output, previous_sibling ? previous_sibling->output_id : 0);
|
||||
append_uint32 (output, reused_node->output_id);
|
||||
}
|
||||
|
||||
return reused_node;
|
||||
}
|
||||
|
||||
/* If the next node in place is shallowly equal (but not necessarily
|
||||
* deep equal) we reuse it and tweak its children as needed.
|
||||
* Except we avoid this for reused node as those make more sense to reuse deeply.
|
||||
*/
|
||||
|
||||
if (old_node && should_reuse_node (output, node, old_node))
|
||||
{
|
||||
int old_i = 0;
|
||||
BroadwayNode *last_child = NULL;
|
||||
|
||||
old_node->consumed = TRUE; // Don't reuse again
|
||||
|
||||
// We rewrite this new node as it now represents the old node in the browser
|
||||
node->output_id = old_node->output_id;
|
||||
|
||||
/* However, we might need to rewrite then children of old_node */
|
||||
for (i = 0; i < node->n_children; i++)
|
||||
{
|
||||
BroadwayNode *child = node->children[i];
|
||||
|
||||
/* Find the next (or first) non-consumed old child, if any */
|
||||
while (old_i < old_node->n_children &&
|
||||
old_node->children[old_i]->consumed)
|
||||
old_i++;
|
||||
|
||||
last_child =
|
||||
append_node_ops (output,
|
||||
child,
|
||||
node, /* parent */
|
||||
last_child,
|
||||
(old_i < old_node->n_children) ? old_node->children[old_i] : NULL,
|
||||
old_node_lookup);
|
||||
}
|
||||
|
||||
/* Remaining old nodes are either reused elsewhere, or end up marked not consumed so are deleted at the end */
|
||||
return old_node;
|
||||
}
|
||||
|
||||
/* Fallback to create a new tree */
|
||||
#ifdef DEBUG_NODE_SENDING
|
||||
g_print ("Insert nodes in parent %d/%d, after sibling %d/%d\n",
|
||||
parent ? parent->id : 0,
|
||||
parent ? parent->output_id : 0,
|
||||
previous_sibling ? previous_sibling->id : 0,
|
||||
previous_sibling ? previous_sibling->output_id : 0);
|
||||
#endif
|
||||
append_uint32 (output, BROADWAY_NODE_OP_INSERT_NODE);
|
||||
append_uint32 (output, parent ? parent->output_id : 0);
|
||||
append_uint32 (output, previous_sibling ? previous_sibling->output_id : 0);
|
||||
|
||||
append_node(output, node, old_node_lookup);
|
||||
|
||||
return node;
|
||||
}
|
||||
|
||||
/* Remove non-consumed nodes */
|
||||
static void
|
||||
append_node_removes (BroadwayOutput *output,
|
||||
BroadwayNode *node)
|
||||
{
|
||||
// TODO: Use an array of nodes instead
|
||||
if (!node->consumed)
|
||||
{
|
||||
#ifdef DEBUG_NODE_SENDING_REMOVE
|
||||
g_print ("Remove old node non-consumed node %d/%d\n",
|
||||
node->id, node->output_id);
|
||||
#endif
|
||||
append_uint32 (output, BROADWAY_NODE_OP_REMOVE_NODE);
|
||||
append_uint32 (output, node->output_id);
|
||||
}
|
||||
|
||||
for (int i = 0; i < node->n_children; i++)
|
||||
append_node_removes (output, node->children[i]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
broadway_output_surface_set_nodes (BroadwayOutput *output,
|
||||
int id,
|
||||
BroadwayNode *root,
|
||||
BroadwayNode *old_root)
|
||||
BroadwayNode *old_root,
|
||||
GHashTable *old_node_lookup)
|
||||
{
|
||||
gsize size_pos, start, end;
|
||||
|
||||
/* Early return if nothing changed */
|
||||
if (old_root != NULL &&
|
||||
broadway_node_deep_equal (root, old_root))
|
||||
return;
|
||||
|
||||
if (old_root)
|
||||
{
|
||||
broadway_node_mark_deep_consumed (old_root, FALSE);
|
||||
broadway_node_mark_deep_reused (old_root, FALSE);
|
||||
/* This will modify children of old_root if any are shared */
|
||||
broadway_node_mark_deep_reused (root, TRUE);
|
||||
}
|
||||
|
||||
write_header (output, BROADWAY_OP_SET_NODES);
|
||||
|
||||
@@ -410,9 +592,11 @@ broadway_output_surface_set_nodes (BroadwayOutput *output,
|
||||
|
||||
start = output->buf->len;
|
||||
#ifdef DEBUG_NODE_SENDING
|
||||
g_print ("====== node tree for %d =======\n", id);
|
||||
g_print ("====== node ops for surface %d =======\n", id);
|
||||
#endif
|
||||
append_node (output, root, old_root, TRUE);
|
||||
append_node_ops (output, root, NULL, NULL, old_root, old_node_lookup);
|
||||
if (old_root)
|
||||
append_node_removes (output, old_root);
|
||||
end = output->buf->len;
|
||||
patch_uint32 (output, (end - start) / 4, size_pos);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,8 @@ void broadway_output_set_transient_for (BroadwayOutput *output,
|
||||
void broadway_output_surface_set_nodes (BroadwayOutput *output,
|
||||
int id,
|
||||
BroadwayNode *root,
|
||||
BroadwayNode *old_root);
|
||||
BroadwayNode *old_root,
|
||||
GHashTable *old_node_lookup);
|
||||
void broadway_output_upload_texture (BroadwayOutput *output,
|
||||
guint32 id,
|
||||
GBytes *texture);
|
||||
|
||||
@@ -20,13 +20,19 @@ typedef enum { /* Sync changes with broadway.js */
|
||||
BROADWAY_NODE_SHADOW = 8,
|
||||
BROADWAY_NODE_OPACITY = 9,
|
||||
BROADWAY_NODE_CLIP = 10,
|
||||
BROADWAY_NODE_KEEP_ALL = 11,
|
||||
BROADWAY_NODE_KEEP_THIS = 12,
|
||||
BROADWAY_NODE_TRANSFORM = 13,
|
||||
BROADWAY_NODE_DEBUG = 14,
|
||||
BROADWAY_NODE_REUSE = 15,
|
||||
BROADWAY_NODE_TRANSFORM = 11,
|
||||
BROADWAY_NODE_DEBUG = 12,
|
||||
BROADWAY_NODE_REUSE = 13,
|
||||
} BroadwayNodeType;
|
||||
|
||||
typedef enum { /* Sync changes with broadway.js */
|
||||
BROADWAY_NODE_OP_INSERT_NODE = 0,
|
||||
BROADWAY_NODE_OP_REMOVE_NODE = 1,
|
||||
BROADWAY_NODE_OP_MOVE_AFTER_CHILD = 2,
|
||||
BROADWAY_NODE_OP_PATCH_TEXTURE = 3,
|
||||
BROADWAY_NODE_OP_PATCH_TRANSFORM = 4,
|
||||
} BroadwayNodeOpType;
|
||||
|
||||
static const char *broadway_node_type_names[] G_GNUC_UNUSED = {
|
||||
"TEXTURE",
|
||||
"CONTAINER",
|
||||
@@ -39,51 +45,47 @@ static const char *broadway_node_type_names[] G_GNUC_UNUSED = {
|
||||
"SHADOW",
|
||||
"OPACITY",
|
||||
"CLIP",
|
||||
"KEEP_ALL",
|
||||
"KEEP_THIS",
|
||||
"TRANSLATE",
|
||||
"TRANSFORM",
|
||||
"DEBUG",
|
||||
"REUSE",
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
BROADWAY_EVENT_ENTER = 'e',
|
||||
BROADWAY_EVENT_LEAVE = 'l',
|
||||
BROADWAY_EVENT_POINTER_MOVE = 'm',
|
||||
BROADWAY_EVENT_BUTTON_PRESS = 'b',
|
||||
BROADWAY_EVENT_BUTTON_RELEASE = 'B',
|
||||
BROADWAY_EVENT_TOUCH = 't',
|
||||
BROADWAY_EVENT_SCROLL = 's',
|
||||
BROADWAY_EVENT_KEY_PRESS = 'k',
|
||||
BROADWAY_EVENT_KEY_RELEASE = 'K',
|
||||
BROADWAY_EVENT_GRAB_NOTIFY = 'g',
|
||||
BROADWAY_EVENT_UNGRAB_NOTIFY = 'u',
|
||||
BROADWAY_EVENT_CONFIGURE_NOTIFY = 'w',
|
||||
BROADWAY_EVENT_SCREEN_SIZE_CHANGED = 'd',
|
||||
BROADWAY_EVENT_FOCUS = 'f',
|
||||
BROADWAY_EVENT_ROUNDTRIP_NOTIFY = 'F',
|
||||
BROADWAY_EVENT_ENTER = 0,
|
||||
BROADWAY_EVENT_LEAVE = 1,
|
||||
BROADWAY_EVENT_POINTER_MOVE = 2,
|
||||
BROADWAY_EVENT_BUTTON_PRESS = 3,
|
||||
BROADWAY_EVENT_BUTTON_RELEASE = 4,
|
||||
BROADWAY_EVENT_TOUCH = 5,
|
||||
BROADWAY_EVENT_SCROLL = 6,
|
||||
BROADWAY_EVENT_KEY_PRESS = 7,
|
||||
BROADWAY_EVENT_KEY_RELEASE = 8,
|
||||
BROADWAY_EVENT_GRAB_NOTIFY = 9,
|
||||
BROADWAY_EVENT_UNGRAB_NOTIFY = 10,
|
||||
BROADWAY_EVENT_CONFIGURE_NOTIFY = 11,
|
||||
BROADWAY_EVENT_SCREEN_SIZE_CHANGED = 12,
|
||||
BROADWAY_EVENT_FOCUS = 13,
|
||||
BROADWAY_EVENT_ROUNDTRIP_NOTIFY = 14,
|
||||
} BroadwayEventType;
|
||||
|
||||
typedef enum {
|
||||
BROADWAY_OP_GRAB_POINTER = 'g',
|
||||
BROADWAY_OP_UNGRAB_POINTER = 'u',
|
||||
BROADWAY_OP_NEW_SURFACE = 's',
|
||||
BROADWAY_OP_SHOW_SURFACE = 'S',
|
||||
BROADWAY_OP_HIDE_SURFACE = 'H',
|
||||
BROADWAY_OP_RAISE_SURFACE = 'r',
|
||||
BROADWAY_OP_LOWER_SURFACE = 'R',
|
||||
BROADWAY_OP_DESTROY_SURFACE = 'd',
|
||||
BROADWAY_OP_MOVE_RESIZE = 'm',
|
||||
BROADWAY_OP_SET_TRANSIENT_FOR = 'p',
|
||||
BROADWAY_OP_PUT_RGB = 'i',
|
||||
BROADWAY_OP_REQUEST_AUTH = 'l',
|
||||
BROADWAY_OP_AUTH_OK = 'L',
|
||||
BROADWAY_OP_DISCONNECTED = 'D',
|
||||
BROADWAY_OP_SURFACE_UPDATE = 'b',
|
||||
BROADWAY_OP_SET_SHOW_KEYBOARD = 'k',
|
||||
BROADWAY_OP_UPLOAD_TEXTURE = 't',
|
||||
BROADWAY_OP_RELEASE_TEXTURE = 'T',
|
||||
BROADWAY_OP_SET_NODES = 'n',
|
||||
BROADWAY_OP_ROUNDTRIP = 'F',
|
||||
BROADWAY_OP_GRAB_POINTER = 0,
|
||||
BROADWAY_OP_UNGRAB_POINTER = 1,
|
||||
BROADWAY_OP_NEW_SURFACE = 2,
|
||||
BROADWAY_OP_SHOW_SURFACE = 3,
|
||||
BROADWAY_OP_HIDE_SURFACE = 4,
|
||||
BROADWAY_OP_RAISE_SURFACE = 5,
|
||||
BROADWAY_OP_LOWER_SURFACE = 6,
|
||||
BROADWAY_OP_DESTROY_SURFACE = 7,
|
||||
BROADWAY_OP_MOVE_RESIZE = 8,
|
||||
BROADWAY_OP_SET_TRANSIENT_FOR = 9,
|
||||
BROADWAY_OP_DISCONNECTED = 10,
|
||||
BROADWAY_OP_SURFACE_UPDATE = 11,
|
||||
BROADWAY_OP_SET_SHOW_KEYBOARD = 12,
|
||||
BROADWAY_OP_UPLOAD_TEXTURE = 13,
|
||||
BROADWAY_OP_RELEASE_TEXTURE = 14,
|
||||
BROADWAY_OP_SET_NODES = 15,
|
||||
BROADWAY_OP_ROUNDTRIP = 16,
|
||||
} BroadwayOpType;
|
||||
|
||||
typedef struct {
|
||||
|
||||
@@ -115,6 +115,7 @@ struct BroadwayInput {
|
||||
};
|
||||
|
||||
struct BroadwaySurface {
|
||||
guint32 owner;
|
||||
gint32 id;
|
||||
gint32 x;
|
||||
gint32 y;
|
||||
@@ -224,6 +225,33 @@ broadway_node_deep_equal (BroadwayNode *a,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
broadway_node_mark_deep_reused (BroadwayNode *node,
|
||||
gboolean reused)
|
||||
{
|
||||
node->reused = reused;
|
||||
for (int i = 0; i < node->n_children; i++)
|
||||
broadway_node_mark_deep_reused (node->children[i], reused);
|
||||
}
|
||||
|
||||
void
|
||||
broadway_node_mark_deep_consumed (BroadwayNode *node,
|
||||
gboolean consumed)
|
||||
{
|
||||
node->consumed = consumed;
|
||||
for (int i = 0; i < node->n_children; i++)
|
||||
broadway_node_mark_deep_consumed (node->children[i], consumed);
|
||||
}
|
||||
|
||||
void
|
||||
broadway_node_add_to_lookup (BroadwayNode *node,
|
||||
GHashTable *node_lookup)
|
||||
{
|
||||
g_hash_table_insert (node_lookup, GINT_TO_POINTER(node->id), node);
|
||||
for (int i = 0; i < node->n_children; i++)
|
||||
broadway_node_add_to_lookup (node->children[i], node_lookup);
|
||||
}
|
||||
|
||||
static void
|
||||
broadway_server_init (BroadwayServer *server)
|
||||
{
|
||||
@@ -444,9 +472,46 @@ process_input_message (BroadwayServer *server,
|
||||
BroadwayInputMsg *message)
|
||||
{
|
||||
gint32 client;
|
||||
BroadwaySurface *surface;
|
||||
|
||||
update_event_state (server, message);
|
||||
client = -1;
|
||||
|
||||
|
||||
switch (message->base.type) {
|
||||
case BROADWAY_EVENT_ENTER:
|
||||
case BROADWAY_EVENT_LEAVE:
|
||||
case BROADWAY_EVENT_POINTER_MOVE:
|
||||
case BROADWAY_EVENT_BUTTON_PRESS:
|
||||
case BROADWAY_EVENT_BUTTON_RELEASE:
|
||||
case BROADWAY_EVENT_SCROLL:
|
||||
case BROADWAY_EVENT_GRAB_NOTIFY:
|
||||
case BROADWAY_EVENT_UNGRAB_NOTIFY:
|
||||
surface = broadway_server_lookup_surface (server, message->pointer.event_surface_id);
|
||||
break;
|
||||
case BROADWAY_EVENT_TOUCH:
|
||||
surface = broadway_server_lookup_surface (server, message->touch.event_surface_id);
|
||||
break;
|
||||
case BROADWAY_EVENT_CONFIGURE_NOTIFY:
|
||||
surface = broadway_server_lookup_surface (server, message->configure_notify.id);
|
||||
break;
|
||||
case BROADWAY_EVENT_ROUNDTRIP_NOTIFY:
|
||||
surface = broadway_server_lookup_surface (server, message->roundtrip_notify.id);
|
||||
break;
|
||||
case BROADWAY_EVENT_KEY_PRESS:
|
||||
case BROADWAY_EVENT_KEY_RELEASE:
|
||||
/* TODO: Send to keys focused clients only... */
|
||||
case BROADWAY_EVENT_FOCUS:
|
||||
case BROADWAY_EVENT_SCREEN_SIZE_CHANGED:
|
||||
default:
|
||||
surface = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
if (surface)
|
||||
client = surface->owner;
|
||||
else
|
||||
client = -1;
|
||||
|
||||
if (is_pointer_event (message) &&
|
||||
server->pointer_grab_surface_id != -1)
|
||||
client = server->pointer_grab_client_id;
|
||||
@@ -557,6 +622,7 @@ parse_input_message (BroadwayInput *input, const unsigned char *message)
|
||||
|
||||
msg.base.type = ntohl (*p++);
|
||||
msg.base.serial = ntohl (*p++);
|
||||
|
||||
time_ = ntohl (*p++);
|
||||
|
||||
if (time_ == 0) {
|
||||
@@ -638,12 +704,19 @@ parse_input_message (BroadwayInput *input, const unsigned char *message)
|
||||
|
||||
if (rt->id == msg.roundtrip_notify.id &&
|
||||
rt->tag == msg.roundtrip_notify.tag)
|
||||
{
|
||||
server->outstanding_roundtrips = g_list_delete_link (server->outstanding_roundtrips, l);
|
||||
g_free (rt);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (l == NULL)
|
||||
g_warning ("Got unexpected rountrip reply for id %d, tag %d\n", msg.roundtrip_notify.id, msg.roundtrip_notify.tag);
|
||||
else
|
||||
{
|
||||
BroadwayOutstandingRoundtrip *rt = l->data;
|
||||
|
||||
server->outstanding_roundtrips = g_list_delete_link (server->outstanding_roundtrips, l);
|
||||
g_free (rt);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case BROADWAY_EVENT_SCREEN_SIZE_CHANGED:
|
||||
@@ -1753,6 +1826,7 @@ decode_nodes (BroadwayServer *server,
|
||||
g_ref_count_init (&node->refcount);
|
||||
node->type = type;
|
||||
node->id = id;
|
||||
node->output_id = id;
|
||||
node->texture_id = 0;
|
||||
node->n_children = n_children;
|
||||
node->children = (BroadwayNode **)((char *)node + sizeof(BroadwayNode) + (size - 1) * sizeof(guint32));
|
||||
@@ -1784,17 +1858,6 @@ decode_nodes (BroadwayServer *server,
|
||||
return node;
|
||||
}
|
||||
|
||||
static void
|
||||
init_node_lookup (BroadwaySurface *surface,
|
||||
BroadwayNode *node)
|
||||
{
|
||||
int i;
|
||||
|
||||
g_hash_table_insert (surface->node_lookup, GINT_TO_POINTER(node->id), node);
|
||||
for (i = 0; i < node->n_children; i++)
|
||||
init_node_lookup (surface, node->children[i]);
|
||||
}
|
||||
|
||||
/* passes ownership of nodes */
|
||||
void
|
||||
broadway_server_surface_update_nodes (BroadwayServer *server,
|
||||
@@ -1816,7 +1879,8 @@ broadway_server_surface_update_nodes (BroadwayServer *server,
|
||||
if (server->output != NULL)
|
||||
broadway_output_surface_set_nodes (server->output, surface->id,
|
||||
root,
|
||||
surface->nodes);
|
||||
surface->nodes,
|
||||
surface->node_lookup);
|
||||
|
||||
if (surface->nodes)
|
||||
broadway_node_unref (server, surface->nodes);
|
||||
@@ -1824,8 +1888,7 @@ broadway_server_surface_update_nodes (BroadwayServer *server,
|
||||
surface->nodes = root;
|
||||
|
||||
g_hash_table_remove_all (surface->node_lookup);
|
||||
|
||||
init_node_lookup (surface, surface->nodes);
|
||||
broadway_node_add_to_lookup (root, surface->node_lookup);
|
||||
}
|
||||
|
||||
guint32
|
||||
@@ -2003,6 +2066,7 @@ broadway_server_ungrab_pointer (BroadwayServer *server,
|
||||
|
||||
guint32
|
||||
broadway_server_new_surface (BroadwayServer *server,
|
||||
guint32 client,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
@@ -2012,6 +2076,7 @@ broadway_server_new_surface (BroadwayServer *server,
|
||||
BroadwaySurface *surface;
|
||||
|
||||
surface = g_new0 (BroadwaySurface, 1);
|
||||
surface->owner = client;
|
||||
surface->id = server->id_counter++;
|
||||
surface->x = x;
|
||||
surface->y = y;
|
||||
@@ -2097,7 +2162,8 @@ broadway_server_resync_surfaces (BroadwayServer *server)
|
||||
|
||||
if (surface->nodes)
|
||||
broadway_output_surface_set_nodes (server->output, surface->id,
|
||||
surface->nodes, NULL);
|
||||
surface->nodes,
|
||||
NULL, NULL);
|
||||
|
||||
if (surface->visible)
|
||||
broadway_output_show_surface (server->output, surface->id);
|
||||
|
||||
@@ -25,10 +25,16 @@ struct _BroadwayNode {
|
||||
grefcount refcount;
|
||||
guint32 type;
|
||||
guint32 id;
|
||||
guint32 output_id;
|
||||
guint32 hash; /* deep hash */
|
||||
guint32 n_children;
|
||||
BroadwayNode **children;
|
||||
guint32 texture_id;
|
||||
|
||||
/* Scratch stuff used during diff */
|
||||
gboolean reused;
|
||||
gboolean consumed;
|
||||
|
||||
guint32 n_data;
|
||||
guint32 data[1];
|
||||
};
|
||||
@@ -37,6 +43,12 @@ gboolean broadway_node_equal (BroadwayNode *
|
||||
BroadwayNode *b);
|
||||
gboolean broadway_node_deep_equal (BroadwayNode *a,
|
||||
BroadwayNode *b);
|
||||
void broadway_node_mark_deep_reused (BroadwayNode *node,
|
||||
gboolean reused);
|
||||
void broadway_node_mark_deep_consumed (BroadwayNode *node,
|
||||
gboolean consumed);
|
||||
void broadway_node_add_to_lookup (BroadwayNode *node,
|
||||
GHashTable *node_lookup);
|
||||
BroadwayServer *broadway_server_new (char *address,
|
||||
int port,
|
||||
const char *ssl_cert,
|
||||
@@ -74,6 +86,7 @@ gint32 broadway_server_get_mouse_surface (BroadwayServer *
|
||||
void broadway_server_set_show_keyboard (BroadwayServer *server,
|
||||
gboolean show);
|
||||
guint32 broadway_server_new_surface (BroadwayServer *server,
|
||||
guint32 client,
|
||||
int x,
|
||||
int y,
|
||||
int width,
|
||||
|
||||
@@ -11,59 +11,63 @@ const BROADWAY_NODE_LINEAR_GRADIENT = 7;
|
||||
const BROADWAY_NODE_SHADOW = 8;
|
||||
const BROADWAY_NODE_OPACITY = 9;
|
||||
const BROADWAY_NODE_CLIP = 10;
|
||||
const BROADWAY_NODE_KEEP_ALL = 11;
|
||||
const BROADWAY_NODE_KEEP_THIS = 12;
|
||||
const BROADWAY_NODE_TRANSFORM = 13;
|
||||
const BROADWAY_NODE_DEBUG = 14;
|
||||
const BROADWAY_NODE_REUSE = 15;
|
||||
const BROADWAY_NODE_TRANSFORM = 11;
|
||||
const BROADWAY_NODE_DEBUG = 12;
|
||||
const BROADWAY_NODE_REUSE = 13;
|
||||
|
||||
const BROADWAY_OP_GRAB_POINTER = 'g';
|
||||
const BROADWAY_OP_UNGRAB_POINTER = 'u';
|
||||
const BROADWAY_OP_NEW_SURFACE = 's';
|
||||
const BROADWAY_OP_SHOW_SURFACE = 'S';
|
||||
const BROADWAY_OP_HIDE_SURFACE = 'H';
|
||||
const BROADWAY_OP_RAISE_SURFACE = 'r';
|
||||
const BROADWAY_OP_LOWER_SURFACE = 'R';
|
||||
const BROADWAY_OP_DESTROY_SURFACE = 'd';
|
||||
const BROADWAY_OP_MOVE_RESIZE = 'm';
|
||||
const BROADWAY_OP_SET_TRANSIENT_FOR = 'p';
|
||||
const BROADWAY_OP_PUT_RGB = 'i';
|
||||
const BROADWAY_OP_REQUEST_AUTH = 'l';
|
||||
const BROADWAY_OP_AUTH_OK = 'L';
|
||||
const BROADWAY_OP_DISCONNECTED = 'D';
|
||||
const BROADWAY_OP_SURFACE_UPDATE = 'b';
|
||||
const BROADWAY_OP_SET_SHOW_KEYBOARD = 'k';
|
||||
const BROADWAY_OP_UPLOAD_TEXTURE = 't';
|
||||
const BROADWAY_OP_RELEASE_TEXTURE = 'T';
|
||||
const BROADWAY_OP_SET_NODES = 'n';
|
||||
const BROADWAY_OP_ROUNDTRIP = 'F';
|
||||
const BROADWAY_NODE_OP_INSERT_NODE = 0;
|
||||
const BROADWAY_NODE_OP_REMOVE_NODE = 1;
|
||||
const BROADWAY_NODE_OP_MOVE_AFTER_CHILD = 2;
|
||||
const BROADWAY_NODE_OP_PATCH_TEXTURE = 3;
|
||||
const BROADWAY_NODE_OP_PATCH_TRANSFORM = 4;
|
||||
|
||||
const BROADWAY_EVENT_ENTER = 'e';
|
||||
const BROADWAY_EVENT_LEAVE = 'l';
|
||||
const BROADWAY_EVENT_POINTER_MOVE = 'm';
|
||||
const BROADWAY_EVENT_BUTTON_PRESS = 'b';
|
||||
const BROADWAY_EVENT_BUTTON_RELEASE = 'B';
|
||||
const BROADWAY_EVENT_TOUCH = 't';
|
||||
const BROADWAY_EVENT_SCROLL = 's';
|
||||
const BROADWAY_EVENT_KEY_PRESS = 'k';
|
||||
const BROADWAY_EVENT_KEY_RELEASE = 'K';
|
||||
const BROADWAY_EVENT_GRAB_NOTIFY = 'g';
|
||||
const BROADWAY_EVENT_UNGRAB_NOTIFY = 'u';
|
||||
const BROADWAY_EVENT_CONFIGURE_NOTIFY = 'w';
|
||||
const BROADWAY_EVENT_SCREEN_SIZE_CHANGED = 'd';
|
||||
const BROADWAY_EVENT_FOCUS = 'f';
|
||||
const BROADWAY_EVENT_ROUNDTRIP_NOTIFY = 'F';
|
||||
const BROADWAY_OP_GRAB_POINTER = 0;
|
||||
const BROADWAY_OP_UNGRAB_POINTER = 1;
|
||||
const BROADWAY_OP_NEW_SURFACE = 2;
|
||||
const BROADWAY_OP_SHOW_SURFACE = 3;
|
||||
const BROADWAY_OP_HIDE_SURFACE = 4;
|
||||
const BROADWAY_OP_RAISE_SURFACE = 5;
|
||||
const BROADWAY_OP_LOWER_SURFACE = 6;
|
||||
const BROADWAY_OP_DESTROY_SURFACE = 7;
|
||||
const BROADWAY_OP_MOVE_RESIZE = 8;
|
||||
const BROADWAY_OP_SET_TRANSIENT_FOR = 9;
|
||||
const BROADWAY_OP_DISCONNECTED = 10;
|
||||
const BROADWAY_OP_SURFACE_UPDATE = 11;
|
||||
const BROADWAY_OP_SET_SHOW_KEYBOARD = 12;
|
||||
const BROADWAY_OP_UPLOAD_TEXTURE = 13;
|
||||
const BROADWAY_OP_RELEASE_TEXTURE = 14;
|
||||
const BROADWAY_OP_SET_NODES = 15;
|
||||
const BROADWAY_OP_ROUNDTRIP = 16;
|
||||
|
||||
const BROADWAY_EVENT_ENTER = 0;
|
||||
const BROADWAY_EVENT_LEAVE = 1;
|
||||
const BROADWAY_EVENT_POINTER_MOVE = 2;
|
||||
const BROADWAY_EVENT_BUTTON_PRESS = 3;
|
||||
const BROADWAY_EVENT_BUTTON_RELEASE = 4;
|
||||
const BROADWAY_EVENT_TOUCH = 5;
|
||||
const BROADWAY_EVENT_SCROLL = 6;
|
||||
const BROADWAY_EVENT_KEY_PRESS = 7;
|
||||
const BROADWAY_EVENT_KEY_RELEASE = 8;
|
||||
const BROADWAY_EVENT_GRAB_NOTIFY = 9;
|
||||
const BROADWAY_EVENT_UNGRAB_NOTIFY = 10;
|
||||
const BROADWAY_EVENT_CONFIGURE_NOTIFY = 11;
|
||||
const BROADWAY_EVENT_SCREEN_SIZE_CHANGED = 12;
|
||||
const BROADWAY_EVENT_FOCUS = 13;
|
||||
const BROADWAY_EVENT_ROUNDTRIP_NOTIFY = 14;
|
||||
|
||||
const DISPLAY_OP_REPLACE_CHILD = 0;
|
||||
const DISPLAY_OP_APPEND_CHILD = 1;
|
||||
const DISPLAY_OP_APPEND_ROOT = 2;
|
||||
const DISPLAY_OP_SHOW_SURFACE = 3;
|
||||
const DISPLAY_OP_HIDE_SURFACE = 4;
|
||||
const DISPLAY_OP_DELETE_NODE = 5;
|
||||
const DISPLAY_OP_MOVE_NODE = 6;
|
||||
const DISPLAY_OP_RESIZE_NODE = 7;
|
||||
const DISPLAY_OP_RESTACK_SURFACES = 8;
|
||||
const DISPLAY_OP_DELETE_SURFACE = 9;
|
||||
const DISPLAY_OP_INSERT_AFTER_CHILD = 2;
|
||||
const DISPLAY_OP_APPEND_ROOT = 3;
|
||||
const DISPLAY_OP_SHOW_SURFACE = 4;
|
||||
const DISPLAY_OP_HIDE_SURFACE = 5;
|
||||
const DISPLAY_OP_DELETE_NODE = 6;
|
||||
const DISPLAY_OP_MOVE_NODE = 7;
|
||||
const DISPLAY_OP_RESIZE_NODE = 8;
|
||||
const DISPLAY_OP_RESTACK_SURFACES = 9;
|
||||
const DISPLAY_OP_DELETE_SURFACE = 10;
|
||||
const DISPLAY_OP_CHANGE_TEXTURE = 11;
|
||||
const DISPLAY_OP_CHANGE_TRANSFORM = 12;
|
||||
|
||||
// GdkCrossingMode
|
||||
const GDK_CROSSING_NORMAL = 0;
|
||||
@@ -89,6 +93,63 @@ const GDK_HYPER_MASK = 1 << 27;
|
||||
const GDK_META_MASK = 1 << 28;
|
||||
const GDK_RELEASE_MASK = 1 << 30;
|
||||
|
||||
|
||||
var useDataUrls = window.location.search.includes("datauri");
|
||||
|
||||
/* This base64code is based on https://github.com/beatgammit/base64-js/blob/master/index.js which is MIT licensed */
|
||||
|
||||
var b64_lookup = [];
|
||||
var base64_code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
||||
for (var i = 0, len = base64_code.length; i < len; ++i) {
|
||||
b64_lookup[i] = base64_code[i];
|
||||
}
|
||||
|
||||
function tripletToBase64 (num) {
|
||||
return b64_lookup[num >> 18 & 0x3F] +
|
||||
b64_lookup[num >> 12 & 0x3F] +
|
||||
b64_lookup[num >> 6 & 0x3F] +
|
||||
b64_lookup[num & 0x3F];
|
||||
}
|
||||
|
||||
function encodeBase64Chunk (uint8, start, end) {
|
||||
var tmp;
|
||||
var output = [];
|
||||
for (var i = start; i < end; i += 3) {
|
||||
tmp =
|
||||
((uint8[i] << 16) & 0xFF0000) +
|
||||
((uint8[i + 1] << 8) & 0xFF00) +
|
||||
(uint8[i + 2] & 0xFF);
|
||||
output.push(tripletToBase64(tmp));
|
||||
}
|
||||
return output.join('');
|
||||
}
|
||||
|
||||
function bytesToDataUri(uint8) {
|
||||
var tmp;
|
||||
var len = uint8.length;
|
||||
var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes
|
||||
var parts = [];
|
||||
var maxChunkLength = 16383; // must be multiple of 3
|
||||
|
||||
parts.push("data:image/png;base64,");
|
||||
|
||||
// go through the array every three bytes, we'll deal with trailing stuff later
|
||||
for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
|
||||
parts.push(encodeBase64Chunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));
|
||||
}
|
||||
|
||||
// pad the end with zeros, but make sure to not forget the extra bytes
|
||||
if (extraBytes === 1) {
|
||||
tmp = uint8[len - 1];
|
||||
parts.push(b64_lookup[tmp >> 2] + b64_lookup[(tmp << 4) & 0x3F] + '==');
|
||||
} else if (extraBytes === 2) {
|
||||
tmp = (uint8[len - 2] << 8) + uint8[len - 1];
|
||||
parts.push(b64_lookup[tmp >> 10] + b64_lookup[(tmp >> 4) & 0x3F] + b64_lookup[(tmp << 2) & 0x3F] + '=');
|
||||
}
|
||||
|
||||
return parts.join('');
|
||||
}
|
||||
|
||||
/* Helper functions for debugging */
|
||||
var logDiv = null;
|
||||
function log(str) {
|
||||
@@ -198,8 +259,15 @@ function getButtonMask (button) {
|
||||
}
|
||||
|
||||
function Texture(id, data) {
|
||||
var blob = new Blob([data],{type: "image/png"});
|
||||
this.url = window.URL.createObjectURL(blob);
|
||||
var url;
|
||||
if (useDataUrls) {
|
||||
url = bytesToDataUri(data);
|
||||
} else {
|
||||
var blob = new Blob([data],{type: "image/png"});
|
||||
url = window.URL.createObjectURL(blob);
|
||||
}
|
||||
|
||||
this.url = url;
|
||||
this.refcount = 1;
|
||||
this.id = id;
|
||||
|
||||
@@ -217,7 +285,9 @@ Texture.prototype.ref = function() {
|
||||
Texture.prototype.unref = function() {
|
||||
this.refcount -= 1;
|
||||
if (this.refcount == 0) {
|
||||
window.URL.revokeObjectURL(this.url);
|
||||
if (this.url.startsWith("blob")) {
|
||||
window.URL.revokeObjectURL(this.url);
|
||||
}
|
||||
delete textures[this.id];
|
||||
}
|
||||
}
|
||||
@@ -234,6 +304,7 @@ function cmdCreateSurface(id, x, y, width, height, isTemp)
|
||||
surface.transientParent = 0;
|
||||
surface.visible = false;
|
||||
surface.imageData = null;
|
||||
surface.nodes = {};
|
||||
|
||||
var div = document.createElement('div');
|
||||
div.surface = surface;
|
||||
@@ -296,12 +367,13 @@ function cmdLowerSurface(id)
|
||||
moveToHelper(surface, 0);
|
||||
}
|
||||
|
||||
function TransformNodes(node_data, div, display_commands) {
|
||||
function TransformNodes(node_data, div, nodes, display_commands) {
|
||||
this.node_data = node_data;
|
||||
this.display_commands = display_commands;
|
||||
this.data_pos = 0;
|
||||
this.div = div;
|
||||
this.outstanding = 1;
|
||||
this.nodes = nodes;
|
||||
}
|
||||
|
||||
TransformNodes.prototype.decode_uint32 = function() {
|
||||
@@ -441,6 +513,28 @@ TransformNodes.prototype.decode_string = function() {
|
||||
return utf8_to_string (utf8);
|
||||
}
|
||||
|
||||
TransformNodes.prototype.decode_transform = function() {
|
||||
var transform_type = this.decode_uint32();
|
||||
|
||||
if (transform_type == 0) {
|
||||
var point = this.decode_point();
|
||||
return "translate(" + px(point.x) + "," + px(point.y) + ")";
|
||||
} else if (transform_type == 1) {
|
||||
var m = new Array();
|
||||
for (var i = 0; i < 16; i++) {
|
||||
m[i] = this.decode_float ();
|
||||
}
|
||||
|
||||
return "matrix3d(" +
|
||||
m[0] + "," + m[1] + "," + m[2] + "," + m[3]+ "," +
|
||||
m[4] + "," + m[5] + "," + m[6] + "," + m[7] + "," +
|
||||
m[8] + "," + m[9] + "," + m[10] + "," + m[11] + "," +
|
||||
m[12] + "," + m[13] + "," + m[14] + "," + m[15] + ")";
|
||||
} else {
|
||||
alert("Unexpected transform type " + transform_type);
|
||||
}
|
||||
}
|
||||
|
||||
function args() {
|
||||
var argsLength = arguments.length;
|
||||
var strings = [];
|
||||
@@ -474,27 +568,44 @@ function set_rrect_style (div, rrect) {
|
||||
div.style["border-bottom-left-radius"] = args(px(rrect.sizes[3].width), px(rrect.sizes[3].height));
|
||||
}
|
||||
|
||||
TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
TransformNodes.prototype.createDiv = function(id)
|
||||
{
|
||||
var div = document.createElement('div');
|
||||
div.node_id = id;
|
||||
this.nodes[id] = div;
|
||||
return div;
|
||||
}
|
||||
|
||||
TransformNodes.prototype.createImage = function(id)
|
||||
{
|
||||
var image = new Image();
|
||||
image.node_id = id;
|
||||
this.nodes[id] = image;
|
||||
return image;
|
||||
}
|
||||
|
||||
TransformNodes.prototype.insertNode = function(parent, previousSibling, is_toplevel)
|
||||
{
|
||||
var type = this.decode_uint32();
|
||||
var id = this.decode_uint32();
|
||||
var newNode = null;
|
||||
|
||||
// We need to dup this because as we reuse children the original order is lost
|
||||
var oldChildren = [];
|
||||
if (oldNode) {
|
||||
for (var i = 0; i < oldNode.children.length; i++)
|
||||
oldChildren[i] = oldNode.children[i];
|
||||
}
|
||||
var oldNode = null;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
/* Reuse divs from last frame */
|
||||
case BROADWAY_NODE_REUSE:
|
||||
{
|
||||
oldNode = this.nodes[id];
|
||||
}
|
||||
break;
|
||||
/* Leaf nodes */
|
||||
|
||||
case BROADWAY_NODE_TEXTURE:
|
||||
{
|
||||
var rect = this.decode_rect();
|
||||
var texture_id = this.decode_uint32();
|
||||
var image = new Image();
|
||||
var image = this.createImage(id);
|
||||
image.width = rect.width;
|
||||
image.height = rect.height;
|
||||
image.style["position"] = "absolute";
|
||||
@@ -511,7 +622,7 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
{
|
||||
var rect = this.decode_rect();
|
||||
var c = this.decode_color ();
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
set_rect_style(div, rect);
|
||||
div.style["background-color"] = c;
|
||||
@@ -529,7 +640,7 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
for (var i = 0; i < 4; i++)
|
||||
border_colors[i] = this.decode_color();
|
||||
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
rrect.bounds.width -= border_widths[1] + border_widths[3];
|
||||
rrect.bounds.height -= border_widths[0] + border_widths[2];
|
||||
@@ -556,7 +667,7 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
var spread = this.decode_float();
|
||||
var blur = this.decode_float();
|
||||
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
set_rrect_style(div, rrect);
|
||||
div.style["box-shadow"] = args(px(dx), px(dy), px(blur), px(spread), color);
|
||||
@@ -573,7 +684,7 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
var spread = this.decode_float();
|
||||
var blur = this.decode_float();
|
||||
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
set_rrect_style(div, rrect);
|
||||
div.style["box-shadow"] = args("inset", px(dx), px(dy), px(blur), px(spread), color);
|
||||
@@ -588,7 +699,7 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
var start = this.decode_point ();
|
||||
var end = this.decode_point ();
|
||||
var stops = this.decode_color_stops ();
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
set_rect_style(div, rect);
|
||||
|
||||
@@ -632,31 +743,13 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
|
||||
case BROADWAY_NODE_TRANSFORM:
|
||||
{
|
||||
var transform_type = this.decode_uint32();
|
||||
var transform_string;
|
||||
var transform_string = this.decode_transform();
|
||||
|
||||
if (transform_type == 0) {
|
||||
var point = this.decode_point();
|
||||
transform_string = "translate(" + px(point.x) + "," + px(point.y) + ")";
|
||||
} else if (transform_type == 1) {
|
||||
var m = new Array();
|
||||
for (var i = 0; i < 16; i++) {
|
||||
m[i] = this.decode_float ();
|
||||
}
|
||||
|
||||
transform_string =
|
||||
"matrix3d(" +
|
||||
m[0] + "," + m[1] + "," + m[2] + "," + m[3]+ "," +
|
||||
m[4] + "," + m[5] + "," + m[6] + "," + m[7] + "," +
|
||||
m[8] + "," + m[9] + "," + m[10] + "," + m[11] + "," +
|
||||
m[12] + "," + m[13] + "," + m[14] + "," + m[15] + ")";
|
||||
}
|
||||
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["transform"] = transform_string;
|
||||
div.style["transform-origin"] = "0px 0px";
|
||||
|
||||
this.insertNode(div, -1, oldChildren[0]);
|
||||
this.insertNode(div, null, false);
|
||||
newNode = div;
|
||||
}
|
||||
break;
|
||||
@@ -664,11 +757,11 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
case BROADWAY_NODE_CLIP:
|
||||
{
|
||||
var rect = this.decode_rect();
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
set_rect_style(div, rect);
|
||||
div.style["overflow"] = "hidden";
|
||||
this.insertNode(div, -1, oldChildren[0]);
|
||||
this.insertNode(div, null, false);
|
||||
newNode = div;
|
||||
}
|
||||
break;
|
||||
@@ -676,11 +769,11 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
case BROADWAY_NODE_ROUNDED_CLIP:
|
||||
{
|
||||
var rrect = this.decode_rounded_rect();
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
set_rrect_style(div, rrect);
|
||||
div.style["overflow"] = "hidden";
|
||||
this.insertNode(div, -1, oldChildren[0]);
|
||||
this.insertNode(div, null, false);
|
||||
newNode = div;
|
||||
}
|
||||
break;
|
||||
@@ -688,13 +781,13 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
case BROADWAY_NODE_OPACITY:
|
||||
{
|
||||
var opacity = this.decode_float();
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
div.style["left"] = px(0);
|
||||
div.style["top"] = px(0);
|
||||
div.style["opacity"] = opacity;
|
||||
|
||||
this.insertNode(div, -1, oldChildren[0]);
|
||||
this.insertNode(div, null, false);
|
||||
newNode = div;
|
||||
}
|
||||
break;
|
||||
@@ -710,13 +803,13 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
var blur = this.decode_float();
|
||||
filters = filters + "drop-shadow(" + args (px(dx), px(dy), px(blur), color) + ")";
|
||||
}
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.style["position"] = "absolute";
|
||||
div.style["left"] = px(0);
|
||||
div.style["top"] = px(0);
|
||||
div.style["filter"] = filters;
|
||||
|
||||
this.insertNode(div, -1, oldChildren[0]);
|
||||
this.insertNode(div, null, false);
|
||||
newNode = div;
|
||||
}
|
||||
break;
|
||||
@@ -724,9 +817,9 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
case 14: // DEBUG
|
||||
{
|
||||
var str = this.decode_string();
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
div.setAttribute('debug', str);
|
||||
this.insertNode(div, -1, oldChildren[0]);
|
||||
this.insertNode(div, null, false);
|
||||
newNode = div;
|
||||
}
|
||||
break;
|
||||
@@ -735,73 +828,98 @@ TransformNodes.prototype.insertNode = function(parent, posInParent, oldNode)
|
||||
|
||||
case BROADWAY_NODE_CONTAINER:
|
||||
{
|
||||
var div = document.createElement('div');
|
||||
var div = this.createDiv(id);
|
||||
var len = this.decode_uint32();
|
||||
var lastChild = null;
|
||||
for (var i = 0; i < len; i++) {
|
||||
this.insertNode(div, -1, oldChildren[i]);
|
||||
lastChild = this.insertNode(div, lastChild, false);
|
||||
}
|
||||
newNode = div;
|
||||
}
|
||||
break;
|
||||
|
||||
case BROADWAY_NODE_KEEP_ALL:
|
||||
{
|
||||
if (!oldNode)
|
||||
alert("KEEP_ALL with no oldNode");
|
||||
|
||||
if (oldNode.parentNode != parent)
|
||||
newNode = oldNode;
|
||||
else
|
||||
newNode = null;
|
||||
}
|
||||
break;
|
||||
|
||||
case BROADWAY_NODE_KEEP_THIS:
|
||||
{
|
||||
if (!oldNode)
|
||||
alert("KEEP_THIS with no oldNode ");
|
||||
|
||||
/* We only get keep-this if all parents were kept, check this */
|
||||
if (oldNode.parentNode != parent)
|
||||
alert("Got KEEP_THIS for non-kept parent");
|
||||
|
||||
var len = this.decode_uint32();
|
||||
var i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
this.insertNode(oldNode, i,
|
||||
oldChildren[i]);
|
||||
}
|
||||
|
||||
/* Remove children that are after the new length */
|
||||
for (i = oldChildren.length - 1; i > len - 1; i--)
|
||||
this.display_commands.push([DISPLAY_OP_DELETE_NODE, oldChildren[i]]);
|
||||
|
||||
/* NOTE: No need to modify the parent, we're keeping this node as is */
|
||||
newNode = null;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
alert("Unexpected node type " + type);
|
||||
}
|
||||
|
||||
if (newNode) {
|
||||
if (posInParent >= 0 && parent.children[posInParent])
|
||||
this.display_commands.push([DISPLAY_OP_REPLACE_CHILD, parent, newNode, parent.children[posInParent]]);
|
||||
else
|
||||
this.display_commands.push([DISPLAY_OP_APPEND_CHILD, parent, newNode]);
|
||||
if (is_toplevel)
|
||||
this.display_commands.push([DISPLAY_OP_INSERT_AFTER_CHILD, parent, previousSibling, newNode]);
|
||||
else // It is safe to display directly because we have not added the toplevel to the document yet
|
||||
parent.appendChild(newNode);
|
||||
return newNode;
|
||||
} else if (oldNode) {
|
||||
// This must be delayed until display ops, because it will remove from the old parent
|
||||
this.display_commands.push([DISPLAY_OP_INSERT_AFTER_CHILD, parent, previousSibling, oldNode]);
|
||||
return oldNode;
|
||||
}
|
||||
}
|
||||
|
||||
TransformNodes.prototype.execute = function(display_commands)
|
||||
{
|
||||
var div = this.div;
|
||||
this.insertNode(div, 0, div.firstChild, display_commands);
|
||||
if (this.data_pos != this.node_data.byteLength)
|
||||
alert ("Did not consume entire array (len " + this.node_data.byteLength + ")");
|
||||
}
|
||||
var root = this.div;
|
||||
|
||||
while (this.data_pos < this.node_data.byteLength) {
|
||||
var op = this.decode_uint32();
|
||||
var parentId, parent;
|
||||
|
||||
switch (op) {
|
||||
case BROADWAY_NODE_OP_INSERT_NODE:
|
||||
parentId = this.decode_uint32();
|
||||
if (parentId == 0)
|
||||
parent = root;
|
||||
else {
|
||||
parent = this.nodes[parentId];
|
||||
if (parent == null)
|
||||
console.log("Wanted to insert into parent " + parentId + " but it is unknown");
|
||||
}
|
||||
|
||||
var previousChildId = this.decode_uint32();
|
||||
var previousChild = null;
|
||||
if (previousChildId != 0)
|
||||
previousChild = this.nodes[previousChildId];
|
||||
this.insertNode(parent, previousChild, true);
|
||||
break;
|
||||
case BROADWAY_NODE_OP_REMOVE_NODE:
|
||||
var removeId = this.decode_uint32();
|
||||
var remove = this.nodes[removeId];
|
||||
delete this.nodes[removeId];
|
||||
if (remove == null)
|
||||
console.log("Wanted to delete node " + removeId + " but it is unknown");
|
||||
|
||||
this.display_commands.push([DISPLAY_OP_DELETE_NODE, remove]);
|
||||
break;
|
||||
case BROADWAY_NODE_OP_MOVE_AFTER_CHILD:
|
||||
parentId = this.decode_uint32();
|
||||
if (parentId == 0)
|
||||
parent = root;
|
||||
else
|
||||
parent = this.nodes[parentId];
|
||||
var previousChildId = this.decode_uint32();
|
||||
var previousChild = null;
|
||||
if (previousChildId != 0)
|
||||
previousChild = this.nodes[previousChildId];
|
||||
var toMoveId = this.decode_uint32();
|
||||
var toMove = this.nodes[toMoveId];
|
||||
this.display_commands.push([DISPLAY_OP_INSERT_AFTER_CHILD, parent, previousChild, toMove]);
|
||||
break;
|
||||
case BROADWAY_NODE_OP_PATCH_TEXTURE:
|
||||
var textureNodeId = this.decode_uint32();
|
||||
var textureNode = this.nodes[textureNodeId];
|
||||
var textureId = this.decode_uint32();
|
||||
var texture = textures[textureId].ref();
|
||||
this.display_commands.push([DISPLAY_OP_CHANGE_TEXTURE, textureNode, texture]);
|
||||
break;
|
||||
case BROADWAY_NODE_OP_PATCH_TRANSFORM:
|
||||
var transformNodeId = this.decode_uint32();
|
||||
var transformNode = this.nodes[transformNodeId];
|
||||
var transformString = this.decode_transform();
|
||||
this.display_commands.push([DISPLAY_OP_CHANGE_TRANSFORM, transformNode, transformString]);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function cmdGrabPointer(id, ownerEvents)
|
||||
{
|
||||
@@ -818,7 +936,7 @@ function cmdUngrabPointer()
|
||||
|
||||
function handleDisplayCommands(display_commands)
|
||||
{
|
||||
var div;
|
||||
var div, parent;
|
||||
var len = display_commands.length;
|
||||
for (var i = 0; i < len; i++) {
|
||||
var cmd = display_commands[i];
|
||||
@@ -830,6 +948,15 @@ function handleDisplayCommands(display_commands)
|
||||
case DISPLAY_OP_APPEND_CHILD:
|
||||
cmd[1].appendChild(cmd[2]);
|
||||
break;
|
||||
case DISPLAY_OP_INSERT_AFTER_CHILD:
|
||||
parent = cmd[1];
|
||||
var afterThis = cmd[2];
|
||||
div = cmd[3];
|
||||
if (afterThis == null) // First
|
||||
parent.insertBefore(div, parent.firstChild);
|
||||
else
|
||||
parent.insertBefore(div, afterThis.nextSibling);
|
||||
break;
|
||||
case DISPLAY_OP_APPEND_ROOT:
|
||||
document.body.appendChild(cmd[1]);
|
||||
break;
|
||||
@@ -867,7 +994,21 @@ function handleDisplayCommands(display_commands)
|
||||
var id = cmd[1];
|
||||
delete surfaces[id];
|
||||
break;
|
||||
|
||||
case DISPLAY_OP_CHANGE_TEXTURE:
|
||||
var image = cmd[1];
|
||||
var texture = cmd[2];
|
||||
// We need a new closure here to have a separate copy of "template" for each iteration...
|
||||
function a_block(t) {
|
||||
image.src = t.url;
|
||||
// Unref blob url when loaded
|
||||
image.onload = function() { t.unref(); };
|
||||
}(texture);
|
||||
break;
|
||||
case DISPLAY_OP_CHANGE_TRANSFORM:
|
||||
var div = cmd[1];
|
||||
var transform_string = cmd[2];
|
||||
div.style["transform"] = transform_string;
|
||||
break;
|
||||
default:
|
||||
alert("Unknown display op " + command);
|
||||
}
|
||||
@@ -882,7 +1023,7 @@ function handleCommands(cmd, display_commands, new_textures, modified_trees)
|
||||
while (res && cmd.pos < cmd.length) {
|
||||
var id, x, y, w, h, q, surface;
|
||||
var saved_pos = cmd.pos;
|
||||
var command = cmd.get_char();
|
||||
var command = cmd.get_uint8();
|
||||
lastSerial = cmd.get_32();
|
||||
switch (command) {
|
||||
case BROADWAY_OP_DISCONNECTED:
|
||||
@@ -976,6 +1117,7 @@ function handleCommands(cmd, display_commands, new_textures, modified_trees)
|
||||
display_commands.push([DISPLAY_OP_RESIZE_NODE, surface.div, surface.width, surface.height]);
|
||||
|
||||
}
|
||||
sendConfigureNotify(surface);
|
||||
break;
|
||||
|
||||
case BROADWAY_OP_RAISE_SURFACE:
|
||||
@@ -1013,7 +1155,7 @@ function handleCommands(cmd, display_commands, new_textures, modified_trees)
|
||||
|
||||
var node_data = cmd.get_nodes ();
|
||||
surface = surfaces[id];
|
||||
var transform_nodes = new TransformNodes (node_data, surface.div, display_commands);
|
||||
var transform_nodes = new TransformNodes (node_data, surface.div, surface.nodes, display_commands);
|
||||
transform_nodes.execute();
|
||||
}
|
||||
break;
|
||||
@@ -1117,8 +1259,8 @@ function BinCommands(message) {
|
||||
this.pos = 0;
|
||||
}
|
||||
|
||||
BinCommands.prototype.get_char = function() {
|
||||
return String.fromCharCode(this.dataview.getUint8(this.pos++));
|
||||
BinCommands.prototype.get_uint8 = function() {
|
||||
return this.dataview.getUint8(this.pos++);
|
||||
};
|
||||
BinCommands.prototype.get_bool = function() {
|
||||
return this.dataview.getUint8(this.pos++) != 0;
|
||||
@@ -1185,7 +1327,7 @@ function sendInput(cmd, args)
|
||||
if (inputSocket == null)
|
||||
return;
|
||||
|
||||
var fullArgs = [cmd.charCodeAt(0), lastSerial, lastTimeStamp].concat(args);
|
||||
var fullArgs = [cmd, lastSerial, lastTimeStamp].concat(args);
|
||||
var buffer = new ArrayBuffer(fullArgs.length * 4);
|
||||
var view = new DataView(buffer);
|
||||
fullArgs.forEach(function(arg, i) {
|
||||
|
||||
@@ -234,7 +234,7 @@ client_handle_request (BroadwayClient *client,
|
||||
{
|
||||
case BROADWAY_REQUEST_NEW_SURFACE:
|
||||
reply_new_surface.id =
|
||||
broadway_server_new_surface (server,
|
||||
broadway_server_new_surface (server, client->id,
|
||||
request->new_surface.x,
|
||||
request->new_surface.y,
|
||||
request->new_surface.width,
|
||||
|
||||
@@ -38,6 +38,7 @@ typedef struct BroadwayInput BroadwayInput;
|
||||
|
||||
struct _GdkBroadwayServer {
|
||||
GObject parent_instance;
|
||||
GdkDisplay *display;
|
||||
|
||||
guint32 next_serial;
|
||||
guint32 next_texture_id;
|
||||
@@ -96,7 +97,9 @@ _gdk_broadway_server_get_next_serial (GdkBroadwayServer *server)
|
||||
}
|
||||
|
||||
GdkBroadwayServer *
|
||||
_gdk_broadway_server_new (const char *display, GError **error)
|
||||
_gdk_broadway_server_new (GdkDisplay *display,
|
||||
const char *display_name,
|
||||
GError **error)
|
||||
{
|
||||
GdkBroadwayServer *server;
|
||||
GSocketClient *client;
|
||||
@@ -108,14 +111,14 @@ _gdk_broadway_server_new (const char *display, GError **error)
|
||||
char *local_socket_type = NULL;
|
||||
int port;
|
||||
|
||||
if (display == NULL)
|
||||
display = ":0";
|
||||
if (display_name == NULL)
|
||||
display_name = ":0";
|
||||
|
||||
if (display[0] == ':' && g_ascii_isdigit(display[1]))
|
||||
if (display_name[0] == ':' && g_ascii_isdigit(display_name[1]))
|
||||
{
|
||||
char *path, *basename;
|
||||
|
||||
port = strtol (display + strlen (":"), NULL, 10);
|
||||
port = strtol (display_name + strlen (":"), NULL, 10);
|
||||
basename = g_strdup_printf ("broadway%d.socket", port + 1);
|
||||
path = g_build_filename (g_get_user_runtime_dir (), basename, NULL);
|
||||
g_free (basename);
|
||||
@@ -127,7 +130,7 @@ _gdk_broadway_server_new (const char *display, GError **error)
|
||||
else
|
||||
{
|
||||
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
|
||||
_("Broadway display type not supported: %s"), display);
|
||||
_("Broadway display type not supported: %s"), display_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -145,6 +148,7 @@ _gdk_broadway_server_new (const char *display, GError **error)
|
||||
|
||||
server = g_object_new (GDK_TYPE_BROADWAY_SERVER, NULL);
|
||||
server->connection = connection;
|
||||
server->display = display;
|
||||
|
||||
in = g_io_stream_get_input_stream (G_IO_STREAM (server->connection));
|
||||
pollable = G_POLLABLE_INPUT_STREAM (in);
|
||||
@@ -346,7 +350,7 @@ process_input_messages (GdkBroadwayServer *server)
|
||||
server->incomming);
|
||||
|
||||
if (reply->base.type == BROADWAY_REPLY_EVENT)
|
||||
_gdk_broadway_events_got_input (&reply->event.msg);
|
||||
_gdk_broadway_events_got_input (server->display, &reply->event.msg);
|
||||
else
|
||||
g_warning ("Unhandled reply type %d", reply->base.type);
|
||||
g_free (reply);
|
||||
|
||||
@@ -14,7 +14,8 @@ typedef struct _GdkBroadwayServerClass GdkBroadwayServerClass;
|
||||
#define GDK_IS_BROADWAY_SERVER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_BROADWAY_SERVER))
|
||||
#define GDK_BROADWAY_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_BROADWAY_SERVER, GdkBroadwayServerClass))
|
||||
|
||||
GdkBroadwayServer *_gdk_broadway_server_new (const char *display,
|
||||
GdkBroadwayServer *_gdk_broadway_server_new (GdkDisplay *display,
|
||||
const char *display_name,
|
||||
GError **error);
|
||||
void _gdk_broadway_server_flush (GdkBroadwayServer *server);
|
||||
void _gdk_broadway_server_sync (GdkBroadwayServer *server);
|
||||
|
||||
@@ -174,7 +174,7 @@ _gdk_broadway_display_open (const gchar *display_name)
|
||||
if (display_name == NULL)
|
||||
display_name = g_getenv ("BROADWAY_DISPLAY");
|
||||
|
||||
broadway_display->server = _gdk_broadway_server_new (display_name, &error);
|
||||
broadway_display->server = _gdk_broadway_server_new (display, display_name, &error);
|
||||
if (broadway_display->server == NULL)
|
||||
{
|
||||
g_printerr ("Unable to init Broadway server: %s\n", error->message);
|
||||
@@ -386,6 +386,31 @@ gdk_broadway_display_ensure_texture (GdkDisplay *display,
|
||||
return data->id;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
flush_idle (gpointer data)
|
||||
{
|
||||
GdkDisplay *display = data;
|
||||
GdkBroadwayDisplay *broadway_display = GDK_BROADWAY_DISPLAY (display);
|
||||
|
||||
broadway_display->idle_flush_id = 0;
|
||||
gdk_display_flush (display);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
gdk_broadway_display_flush_in_idle (GdkDisplay *display)
|
||||
{
|
||||
GdkBroadwayDisplay *broadway_display = GDK_BROADWAY_DISPLAY (display);
|
||||
|
||||
if (broadway_display->idle_flush_id == 0)
|
||||
{
|
||||
broadway_display->idle_flush_id = g_idle_add (flush_idle, g_object_ref (display));
|
||||
g_source_set_name_by_id (broadway_display->idle_flush_id, "[gtk] flush_idle");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gdk_broadway_display_class_init (GdkBroadwayDisplayClass * class)
|
||||
{
|
||||
|
||||
@@ -56,6 +56,8 @@ struct _GdkBroadwayDisplay
|
||||
GdkMonitor *monitor;
|
||||
|
||||
GHashTable *texture_cache;
|
||||
|
||||
guint idle_flush_id;
|
||||
};
|
||||
|
||||
struct _GdkBroadwayDisplayClass
|
||||
|
||||
@@ -83,30 +83,14 @@ gdk_event_source_check (GSource *source)
|
||||
}
|
||||
|
||||
void
|
||||
_gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
_gdk_broadway_events_got_input (GdkDisplay *display,
|
||||
BroadwayInputMsg *message)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
GdkBroadwayDisplay *display_broadway;
|
||||
GdkSeat *seat;
|
||||
GdkSurface *surface;
|
||||
GdkEvent *event = NULL;
|
||||
GList *node;
|
||||
GSList *list, *d;
|
||||
|
||||
display = NULL;
|
||||
|
||||
list = gdk_display_manager_list_displays (gdk_display_manager_get ());
|
||||
for (d = list; d; d = d->next)
|
||||
{
|
||||
if (GDK_IS_BROADWAY_DISPLAY (d->data))
|
||||
{
|
||||
display = d->data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
g_slist_free (list);
|
||||
|
||||
g_assert (display != NULL);
|
||||
|
||||
display_broadway = GDK_BROADWAY_DISPLAY (display);
|
||||
seat = gdk_display_get_default_seat (display);
|
||||
@@ -176,14 +160,14 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
break;
|
||||
case BROADWAY_EVENT_BUTTON_PRESS:
|
||||
case BROADWAY_EVENT_BUTTON_RELEASE:
|
||||
if (message->base.type != 'b' &&
|
||||
if (message->base.type != BROADWAY_EVENT_BUTTON_PRESS &&
|
||||
_gdk_broadway_moveresize_handle_event (display, message))
|
||||
break;
|
||||
|
||||
surface = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.event_surface_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (message->base.type == 'b' ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
|
||||
event = gdk_event_new (message->base.type == BROADWAY_EVENT_BUTTON_PRESS ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->button.time = message->base.time;
|
||||
event->button.x = message->pointer.win_x;
|
||||
@@ -278,7 +262,7 @@ _gdk_broadway_events_got_input (BroadwayInputMsg *message)
|
||||
GINT_TO_POINTER (message->key.surface_id));
|
||||
if (surface)
|
||||
{
|
||||
event = gdk_event_new (message->base.type == 'k' ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
|
||||
event = gdk_event_new (message->base.type == BROADWAY_EVENT_KEY_PRESS ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
|
||||
event->any.surface = g_object_ref (surface);
|
||||
event->key.time = message->base.time;
|
||||
event->key.keyval = message->key.key;
|
||||
|
||||
@@ -41,6 +41,8 @@
|
||||
guint32 gdk_broadway_display_ensure_texture (GdkDisplay *display,
|
||||
GdkTexture *texture);
|
||||
|
||||
void gdk_broadway_display_flush_in_idle (GdkDisplay *display);
|
||||
|
||||
void gdk_broadway_surface_set_nodes (GdkSurface *surface,
|
||||
GArray *nodes,
|
||||
GPtrArray *node_textures);
|
||||
@@ -78,7 +80,8 @@ gboolean _gdk_keymap_key_is_modifier (GdkKeymap *keymap,
|
||||
void _gdk_broadway_display_size_changed (GdkDisplay *display,
|
||||
BroadwayInputScreenResizeNotify *msg);
|
||||
|
||||
void _gdk_broadway_events_got_input (BroadwayInputMsg *message);
|
||||
void _gdk_broadway_events_got_input (GdkDisplay *display,
|
||||
BroadwayInputMsg *message);
|
||||
|
||||
void _gdk_broadway_display_init_root_window (GdkDisplay *display);
|
||||
void _gdk_broadway_display_init_dnd (GdkDisplay *display);
|
||||
|
||||
@@ -73,39 +73,6 @@ G_DEFINE_TYPE (GdkSurfaceImplBroadway,
|
||||
gdk_surface_impl_broadway,
|
||||
GDK_TYPE_SURFACE_IMPL)
|
||||
|
||||
static GdkDisplay *
|
||||
find_broadway_display (void)
|
||||
{
|
||||
GdkDisplay *display;
|
||||
GSList *list, *l;
|
||||
|
||||
display = NULL;
|
||||
|
||||
list = gdk_display_manager_list_displays (gdk_display_manager_get ());
|
||||
for (l = list; l; l = l->next)
|
||||
{
|
||||
if (GDK_IS_BROADWAY_DISPLAY (l->data))
|
||||
{
|
||||
display = l->data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
g_slist_free (list);
|
||||
|
||||
return display;
|
||||
}
|
||||
|
||||
static guint flush_id = 0;
|
||||
|
||||
static gboolean
|
||||
flush_idle (gpointer data)
|
||||
{
|
||||
flush_id = 0;
|
||||
|
||||
gdk_display_flush (find_broadway_display ());
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* We need to flush in an idle rather than AFTER_PAINT, as the clock
|
||||
is frozen during e.g. surface resizes so the paint will not happen
|
||||
@@ -113,11 +80,7 @@ flush_idle (gpointer data)
|
||||
static void
|
||||
queue_flush (GdkSurface *surface)
|
||||
{
|
||||
if (flush_id == 0)
|
||||
{
|
||||
flush_id = g_idle_add (flush_idle, NULL);
|
||||
g_source_set_name_by_id (flush_id, "[gtk] flush_idle");
|
||||
}
|
||||
gdk_broadway_display_flush_in_idle (gdk_surface_get_display (surface));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -165,13 +128,32 @@ _gdk_broadway_roundtrip_notify (GdkSurface *surface,
|
||||
guint32 tag,
|
||||
gboolean local_reply)
|
||||
{
|
||||
GdkSurfaceImplBroadway *impl = GDK_SURFACE_IMPL_BROADWAY (surface->impl);
|
||||
GdkFrameClock *clock = gdk_surface_get_frame_clock (surface);
|
||||
GdkFrameTimings *timings;
|
||||
|
||||
timings = gdk_frame_clock_get_timings (clock, impl->pending_frame_counter);
|
||||
impl->pending_frame_counter = 0;
|
||||
|
||||
/* If there is no remove web client, rate limit update to once a second */
|
||||
if (local_reply)
|
||||
g_timeout_add_seconds (1, (GSourceFunc)thaw_clock_cb, g_object_ref (clock));
|
||||
else
|
||||
_gdk_frame_clock_thaw (clock);
|
||||
|
||||
if (timings)
|
||||
{
|
||||
timings->refresh_interval = 33333; /* default to 1/30th of a second */
|
||||
// This isn't quite right, since we've done a rountrip back too, can we do better?
|
||||
timings->presentation_time = g_get_monotonic_time ();
|
||||
timings->complete = TRUE;
|
||||
|
||||
|
||||
#ifdef G_ENABLE_DEBUG
|
||||
if ((_gdk_debug_flags & GDK_DEBUG_FRAMES) != 0)
|
||||
_gdk_frame_clock_debug_print_timings (clock, timings);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -182,6 +164,7 @@ on_frame_clock_after_paint (GdkFrameClock *clock,
|
||||
GdkSurfaceImplBroadway *impl = GDK_SURFACE_IMPL_BROADWAY (surface->impl);
|
||||
GdkBroadwayDisplay *broadway_display;
|
||||
|
||||
impl->pending_frame_counter = gdk_frame_clock_get_frame_counter (clock);
|
||||
_gdk_frame_clock_freeze (gdk_surface_get_frame_clock (surface));
|
||||
|
||||
broadway_display = GDK_BROADWAY_DISPLAY (display);
|
||||
@@ -191,6 +174,30 @@ on_frame_clock_after_paint (GdkFrameClock *clock,
|
||||
gdk_display_flush (display);
|
||||
}
|
||||
|
||||
static void
|
||||
on_frame_clock_before_paint (GdkFrameClock *clock,
|
||||
GdkSurface *surface)
|
||||
{
|
||||
GdkFrameTimings *timings = gdk_frame_clock_get_current_timings (clock);
|
||||
gint64 presentation_time;
|
||||
gint64 refresh_interval;
|
||||
|
||||
if (surface->update_freeze_count > 0)
|
||||
return;
|
||||
|
||||
gdk_frame_clock_get_refresh_info (clock,
|
||||
timings->frame_time,
|
||||
&refresh_interval, &presentation_time);
|
||||
if (presentation_time != 0)
|
||||
{
|
||||
timings->predicted_presentation_time = presentation_time + refresh_interval;
|
||||
}
|
||||
else
|
||||
{
|
||||
timings->predicted_presentation_time = timings->frame_time + refresh_interval / 2 + refresh_interval;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
connect_frame_clock (GdkSurface *surface)
|
||||
{
|
||||
@@ -198,6 +205,8 @@ connect_frame_clock (GdkSurface *surface)
|
||||
{
|
||||
GdkFrameClock *frame_clock = gdk_surface_get_frame_clock (surface);
|
||||
|
||||
g_signal_connect (frame_clock, "before-paint",
|
||||
G_CALLBACK (on_frame_clock_before_paint), surface);
|
||||
g_signal_connect (frame_clock, "after-paint",
|
||||
G_CALLBACK (on_frame_clock_after_paint), surface);
|
||||
}
|
||||
@@ -1208,8 +1217,8 @@ gdk_broadway_surface_begin_resize_drag (GdkSurface *surface,
|
||||
GdkSurfaceEdge edge,
|
||||
GdkDevice *device,
|
||||
gint button,
|
||||
gint root_x,
|
||||
gint root_y,
|
||||
gint x,
|
||||
gint y,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MoveResizeData *mv_resize;
|
||||
@@ -1232,8 +1241,8 @@ gdk_broadway_surface_begin_resize_drag (GdkSurface *surface,
|
||||
mv_resize->is_resize = TRUE;
|
||||
mv_resize->moveresize_button = button;
|
||||
mv_resize->resize_edge = edge;
|
||||
mv_resize->moveresize_x = root_x;
|
||||
mv_resize->moveresize_y = root_y;
|
||||
mv_resize->moveresize_x = x + impl->wrapper->x;
|
||||
mv_resize->moveresize_y = y + impl->wrapper->y;
|
||||
mv_resize->moveresize_surface = g_object_ref (surface);
|
||||
|
||||
mv_resize->moveresize_orig_width = gdk_surface_get_width (surface);
|
||||
@@ -1251,8 +1260,8 @@ static void
|
||||
gdk_broadway_surface_begin_move_drag (GdkSurface *surface,
|
||||
GdkDevice *device,
|
||||
gint button,
|
||||
gint root_x,
|
||||
gint root_y,
|
||||
gint x,
|
||||
gint y,
|
||||
guint32 timestamp)
|
||||
{
|
||||
MoveResizeData *mv_resize;
|
||||
@@ -1274,8 +1283,8 @@ gdk_broadway_surface_begin_move_drag (GdkSurface *surface,
|
||||
|
||||
mv_resize->is_resize = FALSE;
|
||||
mv_resize->moveresize_button = button;
|
||||
mv_resize->moveresize_x = root_x;
|
||||
mv_resize->moveresize_y = root_y;
|
||||
mv_resize->moveresize_x = x + impl->wrapper->x;
|
||||
mv_resize->moveresize_y = y + impl->wrapper->y;
|
||||
mv_resize->moveresize_surface = g_object_ref (surface);
|
||||
|
||||
mv_resize->moveresize_orig_width = gdk_surface_get_width (surface);
|
||||
|
||||
@@ -61,6 +61,8 @@ struct _GdkSurfaceImplBroadway
|
||||
int pre_maximize_width;
|
||||
int pre_maximize_height;
|
||||
|
||||
gint64 pending_frame_counter;
|
||||
|
||||
gboolean dirty;
|
||||
gboolean last_synced;
|
||||
|
||||
|
||||
@@ -331,8 +331,8 @@ gdk_clipboard_read_local_async (GdkClipboard *clipboard,
|
||||
|
||||
static GInputStream *
|
||||
gdk_clipboard_read_local_finish (GdkClipboard *clipboard,
|
||||
const char **out_mime_type,
|
||||
GAsyncResult *result,
|
||||
const char **out_mime_type,
|
||||
GError **error)
|
||||
{
|
||||
g_return_val_if_fail (g_task_is_valid (result, clipboard), NULL);
|
||||
@@ -673,9 +673,9 @@ 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
|
||||
* @result: a #GAsyncResult
|
||||
* @error: a #GError location to store the error occurring, or %NULL to
|
||||
* ignore.
|
||||
*
|
||||
@@ -685,8 +685,8 @@ gdk_clipboard_read_async (GdkClipboard *clipboard,
|
||||
**/
|
||||
GInputStream *
|
||||
gdk_clipboard_read_finish (GdkClipboard *clipboard,
|
||||
const char **out_mime_type,
|
||||
GAsyncResult *result,
|
||||
const char **out_mime_type,
|
||||
GError **error)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_CLIPBOARD (clipboard), NULL);
|
||||
@@ -696,11 +696,11 @@ gdk_clipboard_read_finish (GdkClipboard *clipboard,
|
||||
* read was ongoing */
|
||||
if (g_async_result_is_tagged (result, gdk_clipboard_read_local_async))
|
||||
{
|
||||
return gdk_clipboard_read_local_finish (clipboard, out_mime_type, result, error);
|
||||
return gdk_clipboard_read_local_finish (clipboard, result, out_mime_type, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GDK_CLIPBOARD_GET_CLASS (clipboard)->read_finish (clipboard, out_mime_type, result, error);
|
||||
return GDK_CLIPBOARD_GET_CLASS (clipboard)->read_finish (clipboard, result, out_mime_type, error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -733,7 +733,7 @@ gdk_clipboard_read_value_got_stream (GObject *source,
|
||||
GTask *task = data;
|
||||
const char *mime_type;
|
||||
|
||||
stream = gdk_clipboard_read_finish (GDK_CLIPBOARD (source), &mime_type, result, &error);
|
||||
stream = gdk_clipboard_read_finish (GDK_CLIPBOARD (source), result, &mime_type, &error);
|
||||
if (stream == NULL)
|
||||
{
|
||||
g_task_return_error (task, error);
|
||||
|
||||
@@ -66,8 +66,8 @@ void gdk_clipboard_read_async (GdkClipboard *
|
||||
gpointer user_data);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GInputStream * gdk_clipboard_read_finish (GdkClipboard *clipboard,
|
||||
const char **out_mime_type,
|
||||
GAsyncResult *result,
|
||||
const char **out_mime_type,
|
||||
GError **error);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_read_value_async (GdkClipboard *clipboard,
|
||||
@@ -81,14 +81,14 @@ const GValue * gdk_clipboard_read_value_finish (GdkClipboard *
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_read_texture_async(GdkClipboard *clipboard,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
void gdk_clipboard_read_texture_async (GdkClipboard *clipboard,
|
||||
GCancellable *cancellable,
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkTexture * gdk_clipboard_read_texture_finish (GdkClipboard *clipboard,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
GdkTexture * gdk_clipboard_read_texture_finish (GdkClipboard *clipboard,
|
||||
GAsyncResult *result,
|
||||
GError **error);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
void gdk_clipboard_read_text_async (GdkClipboard *clipboard,
|
||||
GCancellable *cancellable,
|
||||
|
||||
@@ -60,8 +60,8 @@ struct _GdkClipboardClass
|
||||
GAsyncReadyCallback callback,
|
||||
gpointer user_data);
|
||||
GInputStream * (* read_finish) (GdkClipboard *clipboard,
|
||||
const char **out_mime_type,
|
||||
GAsyncResult *result,
|
||||
const char **out_mime_type,
|
||||
GError **error);
|
||||
};
|
||||
|
||||
|
||||
@@ -1242,56 +1242,6 @@ get_native_grab_event_mask (GdkEventMask grab_mask)
|
||||
GDK_BUTTON3_MOTION_MASK));
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_grab:
|
||||
* @device: a #GdkDevice. To get the device you can use gtk_get_current_event_device()
|
||||
* or gdk_event_get_device() if the grab is in reaction to an event. Also, you can use
|
||||
* gdk_seat_get_pointer() but only in code that isn’t triggered by a
|
||||
* #GdkEvent and there aren’t other means to get a meaningful #GdkDevice to operate on.
|
||||
* @surface: the #GdkSurface which will own the grab (the grab surface)
|
||||
* @grab_ownership: specifies the grab ownership.
|
||||
* @owner_events: if %FALSE then all device events are reported with respect to
|
||||
* @surface and are only reported if selected by @event_mask. If
|
||||
* %TRUE then pointer events for this application are reported
|
||||
* as normal, but pointer events outside this application are
|
||||
* reported with respect to @surface and only if selected by
|
||||
* @event_mask. In either mode, unreported events are discarded.
|
||||
* @event_mask: specifies the event mask, which is used in accordance with
|
||||
* @owner_events.
|
||||
* @cursor: (allow-none): the cursor to display while the grab is active if the device is
|
||||
* a pointer. If this is %NULL then the normal cursors are used for
|
||||
* @surface and its descendants, and the cursor for @surface is used
|
||||
* elsewhere.
|
||||
* @time_: the timestamp of the event which led to this pointer grab. This
|
||||
* usually comes from the #GdkEvent struct, though %GDK_CURRENT_TIME
|
||||
* can be used if the time isn’t known.
|
||||
*
|
||||
* Grabs the device so that all events coming from this device are passed to
|
||||
* this application until the device is ungrabbed with gdk_device_ungrab(),
|
||||
* or the surface becomes unviewable. This overrides any previous grab on the device
|
||||
* by this client.
|
||||
*
|
||||
* Note that @device and @surface need to be on the same display.
|
||||
*
|
||||
* Device grabs are used for operations which need complete control over the
|
||||
* given device events (either pointer or keyboard). For example in GTK+ this
|
||||
* is used for Drag and Drop operations, popup menus and such.
|
||||
*
|
||||
* Note that if the event mask of an X window has selected both button press
|
||||
* and button release events, then a button press event will cause an automatic
|
||||
* pointer grab until the button is released. X does this automatically since
|
||||
* most applications expect to receive button press and release events in pairs.
|
||||
* It is equivalent to a pointer grab on the surface with @owner_events set to
|
||||
* %TRUE.
|
||||
*
|
||||
* If you set up anything at the time you take the grab that needs to be
|
||||
* cleaned up when the grab ends, you should handle the #GdkEventGrabBroken
|
||||
* events that are emitted when the grab ends unvoluntarily.
|
||||
*
|
||||
* Returns: %GDK_GRAB_SUCCESS if the grab was successful.
|
||||
*
|
||||
* Deprecated: Use gdk_seat_grab() instead.
|
||||
**/
|
||||
GdkGrabStatus
|
||||
gdk_device_grab (GdkDevice *device,
|
||||
GdkSurface *surface,
|
||||
@@ -1344,15 +1294,6 @@ gdk_device_grab (GdkDevice *device,
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* gdk_device_ungrab:
|
||||
* @device: a #GdkDevice
|
||||
* @time_: a timestap (e.g. %GDK_CURRENT_TIME).
|
||||
*
|
||||
* Release any grab on @device.
|
||||
*
|
||||
* Deprecated: 3.20. Use gdk_seat_ungrab() instead.
|
||||
*/
|
||||
void
|
||||
gdk_device_ungrab (GdkDevice *device,
|
||||
guint32 time_)
|
||||
|
||||
@@ -211,19 +211,6 @@ GList * gdk_device_list_slave_devices (GdkDevice *device);
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkDeviceType gdk_device_get_device_type (GdkDevice *device);
|
||||
|
||||
GDK_DEPRECATED_FOR(gdk_seat_grab)
|
||||
GdkGrabStatus gdk_device_grab (GdkDevice *device,
|
||||
GdkSurface *surface,
|
||||
GdkGrabOwnership grab_ownership,
|
||||
gboolean owner_events,
|
||||
GdkEventMask event_mask,
|
||||
GdkCursor *cursor,
|
||||
guint32 time_);
|
||||
|
||||
GDK_DEPRECATED_FOR(gdk_seat_ungrab)
|
||||
void gdk_device_ungrab (GdkDevice *device,
|
||||
guint32 time_);
|
||||
|
||||
GDK_AVAILABLE_IN_ALL
|
||||
GdkSurface *gdk_device_get_last_event_surface (GdkDevice *device);
|
||||
|
||||
|
||||
@@ -149,8 +149,8 @@ gdk_drop_read_local_async (GdkDrop *self,
|
||||
|
||||
static GInputStream *
|
||||
gdk_drop_read_local_finish (GdkDrop *self,
|
||||
const char **out_mime_type,
|
||||
GAsyncResult *result,
|
||||
const char **out_mime_type,
|
||||
GError **error)
|
||||
{
|
||||
g_return_val_if_fail (g_task_is_valid (result, self), NULL);
|
||||
@@ -622,8 +622,8 @@ gdk_drop_read_async (GdkDrop *self,
|
||||
/**
|
||||
* gdk_drop_read_finish:
|
||||
* @self: a #GdkDrop
|
||||
* @out_mime_type: (out) (type utf8): return location for the used mime type
|
||||
* @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
|
||||
*
|
||||
* Finishes an async drop read operation, see gdk_drop_read_async().
|
||||
@@ -632,8 +632,8 @@ gdk_drop_read_async (GdkDrop *self,
|
||||
*/
|
||||
GInputStream *
|
||||
gdk_drop_read_finish (GdkDrop *self,
|
||||
const char **out_mime_type,
|
||||
GAsyncResult *result,
|
||||
const char **out_mime_type,
|
||||
GError **error)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_DROP (self), NULL);
|
||||
@@ -641,11 +641,11 @@ gdk_drop_read_finish (GdkDrop *self,
|
||||
|
||||
if (g_async_result_is_tagged (result, gdk_drop_read_local_async))
|
||||
{
|
||||
return gdk_drop_read_local_finish (self, out_mime_type, result, error);
|
||||
return gdk_drop_read_local_finish (self, result, out_mime_type, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
return GDK_DROP_GET_CLASS (self)->read_finish (self, out_mime_type, result, error);
|
||||
return GDK_DROP_GET_CLASS (self)->read_finish (self, result, out_mime_type, error);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -678,7 +678,7 @@ gdk_drop_read_value_got_stream (GObject *source,
|
||||
GTask *task = data;
|
||||
const char *mime_type;
|
||||
|
||||
stream = gdk_drop_read_finish (GDK_DROP (source), &mime_type, result, &error);
|
||||
stream = gdk_drop_read_finish (GDK_DROP (source), result, &mime_type, &error);
|
||||
if (stream == NULL)
|
||||
{
|
||||
g_task_return_error (task, error);
|
||||
|
||||