Compare commits
48 Commits
constraint
...
2.16.4
Author | SHA1 | Date | |
---|---|---|---|
|
927e7209a5 | ||
|
41e79523a0 | ||
|
b89b6f9c83 | ||
|
00a5221cee | ||
|
2d7c26133a | ||
|
a00b21d2e4 | ||
|
47b3f98340 | ||
|
bc27497020 | ||
|
072ddd923d | ||
|
c216fcc16d | ||
|
c4aae6a411 | ||
|
5268657bef | ||
|
8d41fc7ef1 | ||
|
1b4d4628b9 | ||
|
e227a8b0d7 | ||
|
b12515cf2b | ||
|
97b64d8037 | ||
|
cdca87d715 | ||
|
523ddd573e | ||
|
7d6991b80b | ||
|
32dae07600 | ||
|
a7c59cfe53 | ||
|
4163c21667 | ||
|
abea8a8176 | ||
|
dc11d389ed | ||
|
ed9e9fc4e4 | ||
|
ba08850ab0 | ||
|
06175da87c | ||
|
52ea5ae34f | ||
|
ce698bb822 | ||
|
3cf9c3107f | ||
|
1b79defed1 | ||
|
74c15a542a | ||
|
5986130b04 | ||
|
5b00aeb33a | ||
|
62edcd72e0 | ||
|
68c87c6f9c | ||
|
13530e5024 | ||
|
af8588b738 | ||
|
9b41466997 | ||
|
35b692722b | ||
|
277b4ea327 | ||
|
fce593032f | ||
|
ae4294b60b | ||
|
6af37e80bf | ||
|
af59a97a3a | ||
|
35ab9b7983 | ||
|
503282dad2 |
1
.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
/subprojects/*/
|
|
120
.gitlab-ci.yml
@@ -1,120 +0,0 @@
|
|||||||
stages:
|
|
||||||
- build
|
|
||||||
- flatpak
|
|
||||||
- deploy
|
|
||||||
|
|
||||||
.cache-paths: &cache-paths
|
|
||||||
paths:
|
|
||||||
- _ccache/
|
|
||||||
- subprojects/gdk-pixbuf/
|
|
||||||
- subprojects/glib/
|
|
||||||
- subprojects/graphene/
|
|
||||||
- subprojects/libepoxy/
|
|
||||||
- subprojects/pango/
|
|
||||||
|
|
||||||
fedora-x86_64:
|
|
||||||
image: registry.gitlab.gnome.org/gnome/gtk/master:v6
|
|
||||||
stage: build
|
|
||||||
script:
|
|
||||||
- bash -x ./.gitlab-ci/test-docker.sh
|
|
||||||
artifacts:
|
|
||||||
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"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/report.html"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/reftests/output/*.png"
|
|
||||||
- "${CI_PROJECT_DIR}/_build/testsuite/gsk/compare/*/*.png"
|
|
||||||
cache:
|
|
||||||
key: "$CI_JOB_NAME"
|
|
||||||
<<: *cache-paths
|
|
||||||
|
|
||||||
.mingw-defaults: &mingw-defaults
|
|
||||||
stage: build
|
|
||||||
tags:
|
|
||||||
- win32
|
|
||||||
script:
|
|
||||||
- C:\msys64\usr\bin\pacman --noconfirm -Syyuu
|
|
||||||
- C:\msys64\usr\bin\bash -lc "bash -x ./.gitlab-ci/test-msys2.sh"
|
|
||||||
cache:
|
|
||||||
key: "%CI_JOB_NAME%"
|
|
||||||
<<: *cache-paths
|
|
||||||
|
|
||||||
msys2-mingw32:
|
|
||||||
variables:
|
|
||||||
MSYSTEM: "MINGW32"
|
|
||||||
CHERE_INVOKING: "yes"
|
|
||||||
<<: *mingw-defaults
|
|
||||||
|
|
||||||
.flatpak-defaults: &flatpak-defaults
|
|
||||||
image: registry.gitlab.gnome.org/gnome/gnome-runtime-images/gnome:master
|
|
||||||
stage: flatpak
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- "${APPID}-dev.flatpak"
|
|
||||||
expire_in: 1 day
|
|
||||||
script:
|
|
||||||
- bash -x ./.gitlab-ci/flatpak-build.sh "${APPID}"
|
|
||||||
|
|
||||||
# Manual jobs, for branches and MRs
|
|
||||||
.flatpak-manual: &flatpak-manual
|
|
||||||
<<: *flatpak-defaults
|
|
||||||
when: manual
|
|
||||||
|
|
||||||
# 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:v6
|
|
||||||
stage: deploy
|
|
||||||
script:
|
|
||||||
- meson -Ddocumentation=true _build .
|
|
||||||
- ninja -C _build
|
|
||||||
- ninja -C _build gdk4-doc gsk4-doc gtk4-doc
|
|
||||||
|
|
||||||
- mkdir -p public/
|
|
||||||
- mv _build/docs/reference/gtk/html/ public/gtk/
|
|
||||||
- mv _build/docs/reference/gdk/html/ public/gdk/
|
|
||||||
- mv _build/docs/reference/gsk/html/ public/gsk/
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- public
|
|
||||||
only:
|
|
||||||
- master
|
|
@@ -1,85 +0,0 @@
|
|||||||
FROM fedora:30
|
|
||||||
|
|
||||||
RUN dnf -y install \
|
|
||||||
hicolor-icon-theme \
|
|
||||||
adwaita-icon-theme \
|
|
||||||
atk-devel \
|
|
||||||
at-spi2-atk-devel \
|
|
||||||
avahi-gobject-devel \
|
|
||||||
cairo-devel \
|
|
||||||
cairo-gobject-devel \
|
|
||||||
ccache \
|
|
||||||
colord-devel \
|
|
||||||
cups-devel \
|
|
||||||
dbus-daemon \
|
|
||||||
dejavu-sans-mono-fonts \
|
|
||||||
desktop-file-utils \
|
|
||||||
elfutils-libelf-devel \
|
|
||||||
fribidi-devel \
|
|
||||||
gcc \
|
|
||||||
gcc-c++ \
|
|
||||||
gdk-pixbuf2-devel \
|
|
||||||
gdk-pixbuf2-modules \
|
|
||||||
gettext \
|
|
||||||
git \
|
|
||||||
glib2-devel \
|
|
||||||
glibc-devel \
|
|
||||||
glibc-headers \
|
|
||||||
gobject-introspection-devel \
|
|
||||||
graphene-devel \
|
|
||||||
gstreamer1-devel \
|
|
||||||
gstreamer1-plugins-good \
|
|
||||||
gstreamer1-plugins-bad-free-devel \
|
|
||||||
gstreamer1-plugins-base-devel \
|
|
||||||
gtk-doc \
|
|
||||||
iso-codes \
|
|
||||||
itstool \
|
|
||||||
json-glib-devel \
|
|
||||||
lcov \
|
|
||||||
libattr-devel \
|
|
||||||
libepoxy-devel \
|
|
||||||
libffi-devel \
|
|
||||||
libmount-devel \
|
|
||||||
librsvg2 \
|
|
||||||
libselinux-devel \
|
|
||||||
libXcomposite-devel \
|
|
||||||
libXcursor-devel \
|
|
||||||
libXcursor-devel \
|
|
||||||
libXdamage-devel \
|
|
||||||
libXfixes-devel \
|
|
||||||
libXi-devel \
|
|
||||||
libXinerama-devel \
|
|
||||||
libxkbcommon-devel \
|
|
||||||
libXrandr-devel \
|
|
||||||
libXrender-devel \
|
|
||||||
libxslt \
|
|
||||||
mesa-dri-drivers \
|
|
||||||
mesa-libEGL-devel \
|
|
||||||
mesa-libwayland-egl-devel \
|
|
||||||
ninja-build \
|
|
||||||
pango-devel \
|
|
||||||
pcre-devel \
|
|
||||||
python3 \
|
|
||||||
python3-jinja2 \
|
|
||||||
python3-pip \
|
|
||||||
python3-wheel \
|
|
||||||
redhat-rpm-config \
|
|
||||||
sassc \
|
|
||||||
systemtap-sdt-devel \
|
|
||||||
vulkan-devel \
|
|
||||||
wayland-devel \
|
|
||||||
wayland-protocols-devel \
|
|
||||||
which \
|
|
||||||
xorg-x11-server-Xvfb \
|
|
||||||
&& dnf clean all
|
|
||||||
|
|
||||||
RUN pip3 install meson==0.50.1
|
|
||||||
|
|
||||||
ARG HOST_USER_ID=5555
|
|
||||||
ENV HOST_USER_ID ${HOST_USER_ID}
|
|
||||||
RUN useradd -u $HOST_USER_ID -ms /bin/bash user
|
|
||||||
|
|
||||||
USER user
|
|
||||||
WORKDIR /home/user
|
|
||||||
|
|
||||||
ENV LANG C.UTF-8
|
|
@@ -1,44 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
appid=$1
|
|
||||||
|
|
||||||
builddir=app
|
|
||||||
repodir=repo
|
|
||||||
|
|
||||||
flatpak-builder \
|
|
||||||
--stop-at=gtk \
|
|
||||||
${builddir} \
|
|
||||||
build-aux/flatpak/${appid}.json
|
|
||||||
|
|
||||||
flatpak-builder \
|
|
||||||
--run ${builddir} build-aux/flatpak/${appid}.json \
|
|
||||||
meson \
|
|
||||||
--prefix /app \
|
|
||||||
--libdir /app/lib \
|
|
||||||
--buildtype debug \
|
|
||||||
-Dx11-backend=true \
|
|
||||||
-Dwayland-backend=true \
|
|
||||||
-Dprint-backends=file \
|
|
||||||
-Dbuild-tests=false \
|
|
||||||
-Dbuild-examples=false \
|
|
||||||
-Dintrospection=false \
|
|
||||||
-Ddemos=true \
|
|
||||||
_build .
|
|
||||||
|
|
||||||
flatpak-builder \
|
|
||||||
--run ${builddir} build-aux/flatpak/${appid}.json \
|
|
||||||
ninja -C _build install
|
|
||||||
|
|
||||||
flatpak-builder \
|
|
||||||
--finish-only \
|
|
||||||
--repo=${repodir} \
|
|
||||||
${builddir} \
|
|
||||||
build-aux/flatpak/${appid}.json
|
|
||||||
|
|
||||||
flatpak build-bundle \
|
|
||||||
${repodir} \
|
|
||||||
${appid}-dev.flatpak \
|
|
||||||
--runtime-repo=https://flathub.org/repo/flathub.flatpakrepo \
|
|
||||||
${appid}
|
|
@@ -1,363 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# Turns a Mason testlog.json file into an HTML report
|
|
||||||
#
|
|
||||||
# Copyright 2019 GNOME Foundation
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
#
|
|
||||||
# Original author: Emmanuele Bassi
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import datetime
|
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
from jinja2 import Template
|
|
||||||
|
|
||||||
REPORT_TEMPLATE = '''
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<title>{{ report.project_name }} Test Report</title>
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
<style type="text/css">
|
|
||||||
body {
|
|
||||||
background: white;
|
|
||||||
color: #333;
|
|
||||||
font-family: 'Cantarell', sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
color: #333333;
|
|
||||||
font-size: 1.9em;
|
|
||||||
font-weight: normal;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
border-bottom: 1px solid #333333;
|
|
||||||
}
|
|
||||||
|
|
||||||
header {
|
|
||||||
position: fixed;
|
|
||||||
padding-bottom: 12px;
|
|
||||||
margin-bottom: 24px;
|
|
||||||
background: rgba(255, 255, 255, 0.85);
|
|
||||||
box-shadow: 0 0 1px rgba(0, 0, 0, 0.15);
|
|
||||||
z-index: 500;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
width: 100%;
|
|
||||||
color: rgba(0, 0, 0, 0.3);
|
|
||||||
transform: translateY(0px);
|
|
||||||
transition: .2s background-color, color;
|
|
||||||
box-sizing: border-box;
|
|
||||||
display: block;
|
|
||||||
visibility: visible;
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
article {
|
|
||||||
padding-top: 200px;
|
|
||||||
margin: 2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.report-meta {
|
|
||||||
width: auto;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
padding: .5em 2em;
|
|
||||||
color: #3c3c3c;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.result {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
span.pass {
|
|
||||||
color: rgb(51, 209, 122);
|
|
||||||
}
|
|
||||||
|
|
||||||
span.skip {
|
|
||||||
color: rgb(255, 163, 72);
|
|
||||||
}
|
|
||||||
|
|
||||||
span.fail {
|
|
||||||
color: rgb(224, 27, 36);
|
|
||||||
}
|
|
||||||
|
|
||||||
span.xfail {
|
|
||||||
color: rgb(163, 71, 186);
|
|
||||||
}
|
|
||||||
|
|
||||||
div.result {
|
|
||||||
border-top: 1px solid #c0c0c0;
|
|
||||||
padding-top: 1em;
|
|
||||||
padding-bottom: 1em;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.result h4 {
|
|
||||||
border-bottom: 1px solid #c0c0c0;
|
|
||||||
margin-bottom: 0.7em;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre {
|
|
||||||
color: #fafafa;
|
|
||||||
background-color: black;
|
|
||||||
border-radius: 6px;
|
|
||||||
box-shadow: 0px 5px 8px 0px rgba(0, 0, 0, 0.25);
|
|
||||||
font-family: monospace;
|
|
||||||
line-height: 1.2em;
|
|
||||||
border: none;
|
|
||||||
padding: 10px 1em;
|
|
||||||
font-size: 0.9em;
|
|
||||||
overflow: auto;
|
|
||||||
white-space: pre;
|
|
||||||
word-break: normal;
|
|
||||||
word-wrap: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.passed li {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.passed li:after {
|
|
||||||
content: ",";
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.passed li:last-child:after {
|
|
||||||
content: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.images {
|
|
||||||
padding-bottom: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
ul.images li {
|
|
||||||
display: inline;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<header>
|
|
||||||
<h1>{{ report.project_name }} :: Test Reports</h1>
|
|
||||||
<div class="report-meta">
|
|
||||||
<p><strong>Branch:</strong> {{ report.branch_name }}</p>
|
|
||||||
<p><strong>Date:</strong> <time datetime="{{ report.date.isoformat() }}">{{ report.locale_date }}</time></p>
|
|
||||||
{% if report.job_id %}<p><strong>Job ID:</strong> {{ report.job_id }}</p>{% endif %}
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
|
|
||||||
<article>
|
|
||||||
<section>
|
|
||||||
<div class="summary">
|
|
||||||
<h3>Summary</h3>
|
|
||||||
<ul>
|
|
||||||
<li><strong>Total units:</strong> {{ report.total_units }}</li>
|
|
||||||
<li><strong>Passed:</strong> {{ report.total_successes }}</li>
|
|
||||||
<li><strong>Failed:</strong> {{ report.total_failures }}</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
{% for suite_result in report.results_list %}
|
|
||||||
<section>
|
|
||||||
<div class="result">
|
|
||||||
<h3>Suite: {{ suite_result.suite_name }}</h3>
|
|
||||||
<ul>
|
|
||||||
<li><strong>Units:</strong> {{ suite_result.n_units }}</li>
|
|
||||||
<li><strong>Passed:</strong> {{ suite_result.n_successes }}</li>
|
|
||||||
<li><strong>Failed:</strong> {{ suite_result.n_failures }}</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="successes">
|
|
||||||
<h4>Passed</h4>
|
|
||||||
<ul class="passed">
|
|
||||||
{% for success in suite_result.successes if success.result == 'OK' %}
|
|
||||||
<li>{{ success.name }} - result: <span class="result pass">{{ success.result }}</li>
|
|
||||||
{% else %}
|
|
||||||
<li>None</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Skipped</h4>
|
|
||||||
<ul>
|
|
||||||
{% for success in suite_result.successes if success.result == 'SKIP' %}
|
|
||||||
<li>{{ success.name }} - result: <span class="result skip">{{ success.result }}</li>
|
|
||||||
{% else %}
|
|
||||||
<li>None</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Expected failures</h4>
|
|
||||||
<ul>
|
|
||||||
{% for success in suite_result.successes if success.result == 'EXPECTEDFAIL' %}
|
|
||||||
<li>{{ success.name }} - result: <span class="result xfail">{{ success.result }}</span><br/>
|
|
||||||
{% if success.stdout %}
|
|
||||||
Output: <pre>{{ success.stdout }}</pre>
|
|
||||||
{% endif %}
|
|
||||||
{% if success.image_data is defined %}
|
|
||||||
<ul class="images">
|
|
||||||
<li><img alt="ref" src="{{ success.image_data.ref }}" /></li>
|
|
||||||
<li><img alt="out" src="{{ success.image_data.out }}" /></li>
|
|
||||||
<li><img alt="diff" src="{{ success.image_data.diff }}" /></li>
|
|
||||||
</ul>
|
|
||||||
{% endif %}
|
|
||||||
</li>
|
|
||||||
{% else %}
|
|
||||||
<li>None</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="failures">
|
|
||||||
<h4>Failed</h4>
|
|
||||||
<ul class="failed">
|
|
||||||
{% for failure in suite_result.failures if failure.result == 'FAIL' %}
|
|
||||||
<li>{{ failure.name }} - result: <span class="result fail">{{ failure.result }}</span><br/>
|
|
||||||
{% if failure.stdout %}
|
|
||||||
Output: <pre>{{ failure.stdout }}</pre>
|
|
||||||
{% endif %}
|
|
||||||
{% if failure.image_data is defined %}
|
|
||||||
<ul class="images">
|
|
||||||
<li><img alt="ref" src="{{ failure.image_data.ref }}" /></li>
|
|
||||||
<li><img alt="out" src="{{ failure.image_data.out }}" /></li>
|
|
||||||
<li><img alt="diff" src="{{ failure.image_data.diff }}" /></li>
|
|
||||||
</ul>
|
|
||||||
{% endif %}
|
|
||||||
</li>
|
|
||||||
{% else %}
|
|
||||||
<li>None</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h4>Timed out</h4>
|
|
||||||
<ul class="failed">
|
|
||||||
{% for failure in suite_result.failures if failure.result == 'TIMEOUT' %}
|
|
||||||
<li>{{ failure.name }} - result: <span class="result fail">{{ failure.result }}</span><br/>
|
|
||||||
{% if failure.stdout %}
|
|
||||||
Output: <pre>{{ failure.stdout }}</pre>
|
|
||||||
{% endif %}
|
|
||||||
</li>
|
|
||||||
{% else %}
|
|
||||||
<li>None</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
</article>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
'''
|
|
||||||
|
|
||||||
aparser = argparse.ArgumentParser(description='Turns a Meson test log into an HTML 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=None)
|
|
||||||
aparser.add_argument('--branch', metavar='NAME',
|
|
||||||
help='Branch of the project being tested',
|
|
||||||
default='master')
|
|
||||||
aparser.add_argument('--output', metavar='FILE',
|
|
||||||
help='The output HTML file, stdout by default',
|
|
||||||
type=argparse.FileType('w', encoding='UTF-8'),
|
|
||||||
default=sys.stdout)
|
|
||||||
aparser.add_argument('--reftest-suite', metavar='NAME',
|
|
||||||
help='The name of the reftests suite',
|
|
||||||
default='reftest')
|
|
||||||
aparser.add_argument('--reftest-output-dir', metavar='DIR',
|
|
||||||
help='The output directory for reftests data',
|
|
||||||
default=None)
|
|
||||||
aparser.add_argument('infile', metavar='FILE',
|
|
||||||
help='The input testlog.json, stdin by default',
|
|
||||||
type=argparse.FileType('r', encoding='UTF-8'),
|
|
||||||
default=sys.stdin)
|
|
||||||
|
|
||||||
args = aparser.parse_args()
|
|
||||||
|
|
||||||
outfile = args.output
|
|
||||||
|
|
||||||
suites = {}
|
|
||||||
for line in args.infile:
|
|
||||||
data = json.loads(line)
|
|
||||||
(full_suite, unit_name) = data['name'].split(' / ')
|
|
||||||
(project_name, suite_name) = full_suite.split(':')
|
|
||||||
|
|
||||||
unit = {
|
|
||||||
'project-name': project_name,
|
|
||||||
'suite': suite_name,
|
|
||||||
'name': unit_name,
|
|
||||||
'duration': data['duration'],
|
|
||||||
'returncode': data['returncode'],
|
|
||||||
'result': data['result'],
|
|
||||||
'stdout': data['stdout'],
|
|
||||||
}
|
|
||||||
|
|
||||||
if args.reftest_output_dir is not None and suite_name == args.reftest_suite:
|
|
||||||
filename = unit_name.split(' ')[1]
|
|
||||||
basename = os.path.splitext(filename)[0]
|
|
||||||
|
|
||||||
image_data = {
|
|
||||||
'ref': os.path.join(args.reftest_output_dir, '{}.ref.png'.format(basename)),
|
|
||||||
'out': os.path.join(args.reftest_output_dir, '{}.out.png'.format(basename)),
|
|
||||||
'diff': os.path.join(args.reftest_output_dir, '{}.diff.png'.format(basename)),
|
|
||||||
}
|
|
||||||
|
|
||||||
unit['image_data'] = image_data
|
|
||||||
|
|
||||||
units = suites.setdefault(full_suite, [])
|
|
||||||
units.append(unit)
|
|
||||||
|
|
||||||
report = {}
|
|
||||||
report['date'] = datetime.datetime.utcnow()
|
|
||||||
report['locale_date'] = report['date'].strftime("%c")
|
|
||||||
report['project_name'] = args.project_name
|
|
||||||
report['job_id'] = args.job_id
|
|
||||||
report['branch_name'] = args.branch
|
|
||||||
report['total_successes'] = 0
|
|
||||||
report['total_failures'] = 0
|
|
||||||
report['total_units'] = 0
|
|
||||||
report['results_list'] = []
|
|
||||||
|
|
||||||
for name, units in suites.items():
|
|
||||||
(project_name, suite_name) = name.split(':')
|
|
||||||
print('Processing {} suite {}:'.format(project_name, suite_name))
|
|
||||||
|
|
||||||
def if_failed(unit):
|
|
||||||
if unit['result'] in ['FAIL', 'TIMEOUT']:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def if_succeded(unit):
|
|
||||||
if unit['result'] in ['OK', 'EXPECTEDFAIL', 'SKIP']:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
successes = list(filter(if_succeded, units))
|
|
||||||
failures = list(filter(if_failed, units))
|
|
||||||
|
|
||||||
n_units = len(units)
|
|
||||||
n_successes = len(successes)
|
|
||||||
n_failures = len(failures)
|
|
||||||
|
|
||||||
report['total_units'] += n_units
|
|
||||||
report['total_successes'] += n_successes
|
|
||||||
report['total_failures'] += n_failures
|
|
||||||
print(' - {}: {} total, {} pass, {} fail'.format(suite_name, n_units, n_successes, n_failures))
|
|
||||||
|
|
||||||
suite_report = {
|
|
||||||
'suite_name': suite_name,
|
|
||||||
'n_units': n_units,
|
|
||||||
'successes': successes,
|
|
||||||
'n_successes': n_successes,
|
|
||||||
'failures': failures,
|
|
||||||
'n_failures': n_failures,
|
|
||||||
}
|
|
||||||
report['results_list'].append(suite_report)
|
|
||||||
|
|
||||||
template = Template(REPORT_TEMPLATE)
|
|
||||||
outfile.write(template.render({'report': report}))
|
|
@@ -1,109 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
# Turns a Meson testlog.json file into a JUnit XML report
|
|
||||||
#
|
|
||||||
# Copyright 2019 GNOME Foundation
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
#
|
|
||||||
# Original author: Emmanuele Bassi
|
|
||||||
|
|
||||||
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', encoding='UTF-8'),
|
|
||||||
default=sys.stdout)
|
|
||||||
aparser.add_argument('infile', metavar='FILE',
|
|
||||||
help='The input testlog.json, stdin by default',
|
|
||||||
type=argparse.FileType('r', encoding='UTF-8'),
|
|
||||||
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)
|
|
@@ -1,11 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
TAG="registry.gitlab.gnome.org/gnome/gtk/master:v6"
|
|
||||||
|
|
||||||
sudo docker build --build-arg HOST_USER_ID="$UID" --tag "${TAG}" \
|
|
||||||
--file "Dockerfile" .
|
|
||||||
sudo docker run --rm --security-opt label=disable \
|
|
||||||
--volume "$(pwd)/..:/home/user/app" --workdir "/home/user/app" \
|
|
||||||
--tty --interactive "${TAG}" bash
|
|
@@ -1,54 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
srcdir=$(pwd)
|
|
||||||
|
|
||||||
mkdir -p _ccache
|
|
||||||
export CCACHE_BASEDIR="$(pwd)"
|
|
||||||
export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
|
||||||
|
|
||||||
ccache --zero-stats
|
|
||||||
ccache --show-stats
|
|
||||||
export CCACHE_DISABLE=true
|
|
||||||
meson \
|
|
||||||
-Dx11-backend=true \
|
|
||||||
-Dwayland-backend=true \
|
|
||||||
-Dbroadway-backend=true \
|
|
||||||
-Dvulkan=yes \
|
|
||||||
--werror \
|
|
||||||
_build $srcdir
|
|
||||||
unset CCACHE_DISABLE
|
|
||||||
|
|
||||||
cd _build
|
|
||||||
|
|
||||||
ninja
|
|
||||||
ccache --show-stats
|
|
||||||
|
|
||||||
set +e
|
|
||||||
|
|
||||||
xvfb-run -a -s "-screen 0 1024x768x24" \
|
|
||||||
meson test \
|
|
||||||
--timeout-multiplier 2 \
|
|
||||||
--print-errorlogs \
|
|
||||||
--suite=gtk \
|
|
||||||
--no-suite=gtk:a11y
|
|
||||||
|
|
||||||
# Save the exit code
|
|
||||||
exit_code=$?
|
|
||||||
|
|
||||||
# We always want to run the report generators
|
|
||||||
$srcdir/.gitlab-ci/meson-junit-report.py \
|
|
||||||
--project-name=gtk \
|
|
||||||
--job-id="${CI_JOB_NAME}" \
|
|
||||||
--output=report.xml \
|
|
||||||
meson-logs/testlog.json
|
|
||||||
|
|
||||||
$srcdir/.gitlab-ci/meson-html-report.py \
|
|
||||||
--project-name=GTK \
|
|
||||||
--job-id="${CI_JOB_NAME}" \
|
|
||||||
--reftest-output-dir="testsuite/reftests/output" \
|
|
||||||
--output=report.html \
|
|
||||||
meson-logs/testlog.json
|
|
||||||
|
|
||||||
exit $exit_code
|
|
@@ -1,54 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [[ "$MSYSTEM" == "MINGW32" ]]; then
|
|
||||||
export MSYS2_ARCH="i686"
|
|
||||||
else
|
|
||||||
export MSYS2_ARCH="x86_64"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Update everything
|
|
||||||
pacman --noconfirm -Suy
|
|
||||||
|
|
||||||
# Install the required packages
|
|
||||||
pacman --noconfirm -S --needed \
|
|
||||||
base-devel \
|
|
||||||
git \
|
|
||||||
mingw-w64-$MSYS2_ARCH-toolchain \
|
|
||||||
mingw-w64-$MSYS2_ARCH-ccache \
|
|
||||||
mingw-w64-$MSYS2_ARCH-pkg-config \
|
|
||||||
mingw-w64-$MSYS2_ARCH-gobject-introspection \
|
|
||||||
mingw-w64-$MSYS2_ARCH-meson \
|
|
||||||
mingw-w64-$MSYS2_ARCH-adwaita-icon-theme \
|
|
||||||
mingw-w64-$MSYS2_ARCH-atk \
|
|
||||||
mingw-w64-$MSYS2_ARCH-cairo \
|
|
||||||
mingw-w64-$MSYS2_ARCH-gdk-pixbuf2 \
|
|
||||||
mingw-w64-$MSYS2_ARCH-glib2 \
|
|
||||||
mingw-w64-$MSYS2_ARCH-graphene \
|
|
||||||
mingw-w64-$MSYS2_ARCH-json-glib \
|
|
||||||
mingw-w64-$MSYS2_ARCH-libepoxy \
|
|
||||||
mingw-w64-$MSYS2_ARCH-pango \
|
|
||||||
mingw-w64-$MSYS2_ARCH-fribidi \
|
|
||||||
mingw-w64-$MSYS2_ARCH-gst-plugins-bad \
|
|
||||||
mingw-w64-$MSYS2_ARCH-shared-mime-info
|
|
||||||
|
|
||||||
mkdir -p _ccache
|
|
||||||
export CCACHE_BASEDIR="$(pwd)"
|
|
||||||
export CCACHE_DIR="${CCACHE_BASEDIR}/_ccache"
|
|
||||||
|
|
||||||
# Build
|
|
||||||
ccache --zero-stats
|
|
||||||
ccache --show-stats
|
|
||||||
export CCACHE_DISABLE=true
|
|
||||||
meson \
|
|
||||||
-Dx11-backend=false \
|
|
||||||
-Dwayland-backend=false \
|
|
||||||
-Dwin32-backend=true \
|
|
||||||
-Dvulkan=no \
|
|
||||||
--werror \
|
|
||||||
_build
|
|
||||||
unset CCACHE_DISABLE
|
|
||||||
|
|
||||||
ninja -C _build
|
|
||||||
ccache --show-stats
|
|
@@ -1,36 +0,0 @@
|
|||||||
## Steps to reproduce
|
|
||||||
|
|
||||||
1. ...
|
|
||||||
2. ...
|
|
||||||
3. ...
|
|
||||||
|
|
||||||
<!--
|
|
||||||
You should try and reproduce with the demos applications available
|
|
||||||
under the `demos` directory, or the test programs in the `tests` directory.
|
|
||||||
Alternatively, please attach a *small and self-contained* example
|
|
||||||
*written in C* that exhibits the issue.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Current behavior
|
|
||||||
<!--
|
|
||||||
Please describe the current behaviour
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Expected outcome
|
|
||||||
<!--
|
|
||||||
Please describe the expected outcome
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Version information
|
|
||||||
<!--
|
|
||||||
- Which version of GTK you are using
|
|
||||||
- What operating system and version
|
|
||||||
- For Linux, which distribution
|
|
||||||
- If you built GTK yourself, the list of options used to configure the build
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Additional information
|
|
||||||
<!--
|
|
||||||
- Screenshots or screen recordings are useful for visual errors
|
|
||||||
- Please report any warning or message printed on the terminal
|
|
||||||
-->
|
|
@@ -1,34 +0,0 @@
|
|||||||
## Steps to reproduce
|
|
||||||
|
|
||||||
1. ...
|
|
||||||
2. ...
|
|
||||||
3. ...
|
|
||||||
|
|
||||||
<!--
|
|
||||||
You should try and reproduce with the demos applications available
|
|
||||||
under the `demos` directory, or the test programs in the `tests` directory.
|
|
||||||
Alternatively, please attach a *small and self-contained* example that
|
|
||||||
exhibits the issue.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Version information
|
|
||||||
<!--
|
|
||||||
- Which version of GTK you are using
|
|
||||||
- What operating system and version
|
|
||||||
- for Linux, which distribution
|
|
||||||
- If you built GTK yourself, the list of options used to configure the build
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Warnings
|
|
||||||
<!--
|
|
||||||
- If the application generates warning messages before crashing please
|
|
||||||
report them here
|
|
||||||
-->
|
|
||||||
|
|
||||||
## Backtrace
|
|
||||||
<!--
|
|
||||||
- Attaching a stack trace obtained using GDB is appreciated; follow the
|
|
||||||
instructions on the wiki:
|
|
||||||
|
|
||||||
https://wiki.gnome.org/Community/GettingInTouch/Bugzilla/GettingTraces
|
|
||||||
-->
|
|
266
CONTRIBUTING.md
@@ -1,266 +0,0 @@
|
|||||||
# Contribution guidelines
|
|
||||||
|
|
||||||
Thank you for considering contributing to the GTK project!
|
|
||||||
|
|
||||||
These guidelines are meant for new contributors, regardless of their level
|
|
||||||
of proficiency; following them allows the maintainers of the GTK project to
|
|
||||||
more effectively evaluate your contribution, and provide prompt feedback to
|
|
||||||
you. Additionally, by following these guidelines you clearly communicate
|
|
||||||
that you respect the time and effort that the people developing GTK put into
|
|
||||||
managing the project.
|
|
||||||
|
|
||||||
GTK is a complex free software GUI toolkit, and it would not exist without
|
|
||||||
contributions from the free and open source software community. There are
|
|
||||||
many things that we value:
|
|
||||||
|
|
||||||
- bug reporting and fixing
|
|
||||||
- documentation and examples
|
|
||||||
- tests
|
|
||||||
- new features
|
|
||||||
|
|
||||||
Please, do not use the issue tracker for support questions. If you have
|
|
||||||
questions on how to use GTK effectively, you can use:
|
|
||||||
|
|
||||||
- the `#gtk` IRC channel on irc.gnome.org
|
|
||||||
- the [gtk](https://mail.gnome.org/mailman/listinfo/gtk-list) mailing list,
|
|
||||||
for general questions on GTK
|
|
||||||
- the [gtk-app-devel](https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list)
|
|
||||||
mailing list, for questions on application development with GTK
|
|
||||||
- the [gtk-devel](https://mail.gnome.org/mailman/listinfo/gtk-devel-list)
|
|
||||||
mailing list, for questions on developing GTK itself
|
|
||||||
|
|
||||||
You can also look at the GTK tag on [Stack
|
|
||||||
Overflow](https://stackoverflow.com/questions/tagged/gtk).
|
|
||||||
|
|
||||||
The issue tracker is meant to be used for actionable issues only.
|
|
||||||
|
|
||||||
## How to report bugs
|
|
||||||
|
|
||||||
### Security issues
|
|
||||||
|
|
||||||
You should not open a new issue for security related questions.
|
|
||||||
|
|
||||||
When in doubt, send an email to the [security](mailto:security@gnome.org)
|
|
||||||
mailing list.
|
|
||||||
|
|
||||||
### Bug reports
|
|
||||||
|
|
||||||
If you're reporting a bug make sure to list:
|
|
||||||
|
|
||||||
0. which version of GTK are you using?
|
|
||||||
0. which operating system are you using?
|
|
||||||
0. the necessary steps to reproduce the issue
|
|
||||||
0. the expected outcome
|
|
||||||
0. a description of the behavior; screenshots are also welcome
|
|
||||||
0. a small, self-contained example exhibiting the behavior; if this
|
|
||||||
is not available, try reproducing the issue using the GTK examples
|
|
||||||
or interactive tests
|
|
||||||
|
|
||||||
If the issue includes a crash, you should also include:
|
|
||||||
|
|
||||||
0. the eventual warnings printed on the terminal
|
|
||||||
0. a backtrace, obtained with tools such as GDB or LLDB
|
|
||||||
|
|
||||||
For small issues, such as:
|
|
||||||
|
|
||||||
- spelling/grammar fixes in the documentation
|
|
||||||
- typo correction
|
|
||||||
- comment clean ups
|
|
||||||
- changes to metadata files (CI, `.gitignore`)
|
|
||||||
- build system changes
|
|
||||||
- source tree clean ups and reorganizations
|
|
||||||
|
|
||||||
You should directly open a merge request instead of filing a new issue.
|
|
||||||
|
|
||||||
### Features and enhancements
|
|
||||||
|
|
||||||
Feature discussion can be open ended and require high bandwidth channels; if
|
|
||||||
you are proposing a new feature on the issue tracker, make sure to make
|
|
||||||
an actionable proposal, and list:
|
|
||||||
|
|
||||||
0. what you're trying to achieve
|
|
||||||
0. prior art, in other toolkits or applications
|
|
||||||
0. design and theming changes
|
|
||||||
|
|
||||||
If you're proposing the integration of new features it helps to have
|
|
||||||
multiple applications using shared or similar code, especially if they have
|
|
||||||
iterated over it various times.
|
|
||||||
|
|
||||||
Each feature should also come fully documented, and with tests.
|
|
||||||
|
|
||||||
## Your first contribution
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
If you want to contribute to the GTK project, you will need to have the
|
|
||||||
development tools appropriate for your operating system, including:
|
|
||||||
|
|
||||||
- Python 3.x
|
|
||||||
- Meson
|
|
||||||
- Ninja
|
|
||||||
- Gettext (19.7 or newer)
|
|
||||||
- a [C99 compatible compiler](https://wiki.gnome.org/Projects/GLib/CompilerRequirements)
|
|
||||||
|
|
||||||
Up-to-date instructions about developing GNOME applications and libraries
|
|
||||||
can be found on [the GNOME Developer Center](https://developer.gnome.org).
|
|
||||||
|
|
||||||
The GTK project uses GitLab for code hosting and for tracking issues. More
|
|
||||||
information about using GitLab can be found [on the GNOME
|
|
||||||
wiki](https://wiki.gnome.org/GitLab).
|
|
||||||
|
|
||||||
### Dependencies
|
|
||||||
|
|
||||||
In order to get GTK from Git installed on your system, you need to have the
|
|
||||||
required versions of all the software dependencies required by GTK; typically,
|
|
||||||
this means a recent version of GLib, Cairo, Pango, and ATK, as well as the
|
|
||||||
platform-specific dependencies for the windowing system you are using (Wayland,
|
|
||||||
X11, Windows, or macOS).
|
|
||||||
|
|
||||||
The core dependencies for GTK are:
|
|
||||||
|
|
||||||
- [GLib, GObject, and GIO](https://gitlab.gnome.org/GNOME/glib)
|
|
||||||
- [Cairo](http://cairographics.org)
|
|
||||||
- [Pango](https://gitlab.gnome.org/GNOME/pango)
|
|
||||||
- [GdkPixbuf](https://gitlab.gnome.org/GNOME/gdk-pixbuf)
|
|
||||||
- [Epoxy](https://github.com/anholt/libepoxy)
|
|
||||||
- [ATK](https://gitlab.gnome.org/GNOME/atk)
|
|
||||||
- [Graphene](https://github.com/ebassi/graphene)
|
|
||||||
|
|
||||||
GTK will attempt to download and build some of these dependencies if it
|
|
||||||
cannot find them on your system.
|
|
||||||
|
|
||||||
Additionally, you may want to look at projects that create a development
|
|
||||||
environment for you, like [jhbuild](https://wiki.gnome.org/HowDoI/Jhbuild)
|
|
||||||
and [gvsbuild](https://github.com/wingtk/gvsbuild).
|
|
||||||
|
|
||||||
### Getting started
|
|
||||||
|
|
||||||
You should start by forking the GTK repository from the GitLab web UI, and
|
|
||||||
cloning from your fork:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ git clone https://gitlab.gnome.org/yourusername/gtk.git
|
|
||||||
$ cd gtk
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note**: if you plan to push changes to back to the main repository and
|
|
||||||
have a GNOME account, you can skip the fork, and use the following instead:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ git clone git@gitlab.gnome.org:GNOME/gtk.git
|
|
||||||
$ cd gtk
|
|
||||||
```
|
|
||||||
|
|
||||||
To compile the Git version of GTK on your system, you will need to
|
|
||||||
configure your build using Meson:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ meson _builddir .
|
|
||||||
$ cd _builddir
|
|
||||||
$ ninja
|
|
||||||
```
|
|
||||||
|
|
||||||
Typically, you should work on your own branch:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ git checkout -b your-branch
|
|
||||||
```
|
|
||||||
|
|
||||||
Once you've finished working on the bug fix or feature, push the branch
|
|
||||||
to the Git repository and open a new merge request, to let the GTK
|
|
||||||
maintainers review your contribution.
|
|
||||||
|
|
||||||
### Code reviews
|
|
||||||
|
|
||||||
Each contribution is reviewed by the core developers of the GTK project.
|
|
||||||
|
|
||||||
The [CODE-OWNERS](./docs/CODE-OWNERS) document contains the list of core
|
|
||||||
contributors to GTK and the areas for which they are responsible; you
|
|
||||||
should ensure to receive their review and signoff on your changes.
|
|
||||||
|
|
||||||
### Commit messages
|
|
||||||
|
|
||||||
The expected format for git commit messages is as follows:
|
|
||||||
|
|
||||||
```plain
|
|
||||||
Short explanation of the commit
|
|
||||||
|
|
||||||
Longer explanation explaining exactly what's changed, whether any
|
|
||||||
external or private interfaces changed, what bugs were fixed (with bug
|
|
||||||
tracker reference if applicable) and so forth. Be concise but not too
|
|
||||||
brief.
|
|
||||||
|
|
||||||
Closes #1234
|
|
||||||
```
|
|
||||||
|
|
||||||
- Always add a brief description of the commit to the _first_ line of
|
|
||||||
the commit and terminate by two newlines (it will work without the
|
|
||||||
second newline, but that is not nice for the interfaces).
|
|
||||||
|
|
||||||
- First line (the brief description) must only be one sentence and
|
|
||||||
should start with a capital letter unless it starts with a lowercase
|
|
||||||
symbol or identifier. Don't use a trailing period either. Don't exceed
|
|
||||||
72 characters.
|
|
||||||
|
|
||||||
- The main description (the body) is normal prose and should use normal
|
|
||||||
punctuation and capital letters where appropriate. Consider the commit
|
|
||||||
message as an email sent to the developers (or yourself, six months
|
|
||||||
down the line) detailing **why** you changed something. There's no need
|
|
||||||
to specify the **how**: the changes can be inlined.
|
|
||||||
|
|
||||||
- When committing code on behalf of others use the `--author` option, e.g.
|
|
||||||
`git commit -a --author "Joe Coder <joe@coder.org>"` and `--signoff`.
|
|
||||||
|
|
||||||
- If your commit is addressing an issue, use the
|
|
||||||
[GitLab syntax](https://docs.gitlab.com/ce/user/project/issues/automatic_issue_closing.html)
|
|
||||||
to automatically close the issue when merging the commit with the upstream
|
|
||||||
repository:
|
|
||||||
|
|
||||||
```plain
|
|
||||||
Closes #1234
|
|
||||||
Fixes #1234
|
|
||||||
Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1234
|
|
||||||
```
|
|
||||||
|
|
||||||
- If you have a merge request with multiple commits and none of them
|
|
||||||
completely fixes an issue, you should add a reference to the issue in
|
|
||||||
the commit message, e.g. `Bug: #1234`, and use the automatic issue
|
|
||||||
closing syntax in the description of the merge request.
|
|
||||||
|
|
||||||
### Commit access to the GTK repository
|
|
||||||
|
|
||||||
GTK is part of the GNOME infrastructure. At the current time, any
|
|
||||||
person with write access to the GNOME repository can merge changes to
|
|
||||||
GTK. This is a good thing, in that it encourages many people to work
|
|
||||||
on GTK, and progress can be made quickly. However, GTK is a fairly
|
|
||||||
large and complicated project on which many other things depend, so to
|
|
||||||
avoid unnecessary breakage, and to take advantage of the knowledge
|
|
||||||
about GTK that has been built up over the years, we'd like to ask
|
|
||||||
people committing to GTK to follow a few rules:
|
|
||||||
|
|
||||||
0. Ask first. If your changes are major, or could possibly break existing
|
|
||||||
code, you should always ask. If your change is minor and you've been
|
|
||||||
working on GTK for a while it probably isn't necessary to ask. But when
|
|
||||||
in doubt, ask. Even if your change is correct, somebody may know a
|
|
||||||
better way to do things. If you are making changes to GTK, you should
|
|
||||||
be subscribed to the [gtk-devel](https://mail.gnome.org/mailman/listinfo/gtk-devel-list)
|
|
||||||
mailing list; this is a good place to ask about intended changes.
|
|
||||||
The `#gtk` IRC channel on irc.gnome.org is also a good place to find GTK
|
|
||||||
developers to discuss changes, but if you live outside of the EU/US time
|
|
||||||
zones, an email to the gtk-devel mailing list is the most certain and
|
|
||||||
preferred method.
|
|
||||||
|
|
||||||
0. Ask _first_.
|
|
||||||
|
|
||||||
0. Always write a meaningful commit message. Changes without a sufficient
|
|
||||||
commit message will be reverted.
|
|
||||||
|
|
||||||
0. Never push to the `master` branch, or any stable branches, directly; you
|
|
||||||
should always go through a merge request, to ensure that the code is
|
|
||||||
tested on the CI infrastructure at the very least. A merge request is
|
|
||||||
also the proper place to get a comprehensive code review from the core
|
|
||||||
developers of GTK.
|
|
||||||
|
|
||||||
If you have been contributing to GTK for a while and you don't have commit
|
|
||||||
access to the repository, you may ask to obtain it following the [GNOME account
|
|
||||||
process](https://wiki.gnome.org/AccountsTeam/NewAccounts).
|
|
7
COPYING
@@ -2,7 +2,7 @@
|
|||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
Copyright (C) 1991 Free Software Foundation, Inc.
|
Copyright (C) 1991 Free Software Foundation, Inc.
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
@@ -463,8 +463,9 @@ convey the exclusion of warranty; and each file should have at least the
|
|||||||
Library General Public License for more details.
|
Library General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
You should have received a copy of the GNU Library General Public
|
||||||
License along with this library; if not, write to the Free Software
|
License along with this library; if not, write to the
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307 USA.
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
514
ChangeLog.gtk-async-file-chooser
Normal file
@@ -0,0 +1,514 @@
|
|||||||
|
2006-04-30 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.[ch] (gtk_file_info_render_icon): remove the
|
||||||
|
caching code,
|
||||||
|
(gtk_file_info_get_icon_name): new function,
|
||||||
|
(gtk_file_system_volume_get_icon_name): new function,
|
||||||
|
(gtk_file_system_volume_render_icon): refactor to use
|
||||||
|
get_icon_name() and render the icon on the fly.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_volume_render_icon),
|
||||||
|
(gtk_file_system_unix_volume_get_icon_name): reflect updates in
|
||||||
|
file system interface,
|
||||||
|
(get_fallback_icon): remove, along with icon caching code.
|
||||||
|
|
||||||
|
* gtk/gtk.symbols: updated.
|
||||||
|
|
||||||
|
2006-04-30 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemmodel.c (got_root_folder_cb), (ref_path_cb),
|
||||||
|
(get_children_get_folder_cb): don't leak the handle,
|
||||||
|
(got_root_folder_cb), (get_children_get_folder_cb): emit
|
||||||
|
row-inserted for the newly added nodes.
|
||||||
|
|
||||||
|
2006-04-30 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (file_list_drag_data_select_uris),
|
||||||
|
(file_list_drag_data_received_get_info_cb),
|
||||||
|
(file_list_drag_data_received_cb): refactor code for selecting
|
||||||
|
multiple uris into file_list_drag_data_select_uris().
|
||||||
|
|
||||||
|
2006-04-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c (dnd_select_folder_get_info_cb): don't
|
||||||
|
leak handle,
|
||||||
|
(change_icon_theme_get_info_cb), (set_info_get_info_cb),
|
||||||
|
(model_add_special_get_info_cb), (update_label_get_info_cb): ditto.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_reload_icons_get_info_cb):
|
||||||
|
don't leak the handle,
|
||||||
|
(get_file_info_finished), (edited_idle_create_folder_cb),
|
||||||
|
(file_list_drag_data_received_get_info_cb),
|
||||||
|
(show_and_select_paths_get_folder_cb),
|
||||||
|
(update_current_folder_get_info_cb), (add_shortcut_get_info_cb),
|
||||||
|
(confirmation_confirm_get_info_cb), (action_create_folder_cb),
|
||||||
|
(save_entry_get_info_cb), (shortcuts_activate_volume_mount_cb),
|
||||||
|
(shortcuts_activate_get_info_cb), (update_from_entry_get_info_cb):
|
||||||
|
ditto.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c (load_directory_get_folder_callback):
|
||||||
|
don't leak the handle.
|
||||||
|
|
||||||
|
* gtk/gtkpathbar.c (set_button_image_get_info_cb),
|
||||||
|
(gtk_path_bar_get_info_callback): don't leak the handle.
|
||||||
|
|
||||||
|
2006-04-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
Review.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_reload_icons_get_info_cb):
|
||||||
|
don't forget to unref data->impl at the end.
|
||||||
|
|
||||||
|
2006-04-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
Review, continued.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdialog.c (response_cb): set response_requested
|
||||||
|
to FALSE after stopping emission of the response signal.
|
||||||
|
|
||||||
|
2006-03-16 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
More review work.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserprivate.h: remove idle_finished_loading_source
|
||||||
|
from GtkFileSystemModel.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemmodel.c (gtk_file_system_model_finalize): remove
|
||||||
|
idle_finished_loading_source,
|
||||||
|
(idle_finished_loading_cb), (queue_finished_loading): removed,
|
||||||
|
(got_root_folder_cb): save a list walk, immediately emit
|
||||||
|
finished-loading and don't queue it, since we are already in an
|
||||||
|
idle here, always list_children() so the children the folder already
|
||||||
|
has are returned,
|
||||||
|
(_gtk_file_system_model_new): handle the case where NULL is
|
||||||
|
returned by _get_folder(),
|
||||||
|
(_gtk_file_system_model_path_do): remove comment, and append the
|
||||||
|
new handle to the list, don't try to remove,
|
||||||
|
(get_children_get_folder_cb): save a list walk, remove the dummy
|
||||||
|
child if the _get_folder() call fails or is cancelled.
|
||||||
|
|
||||||
|
2006-03-14 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
More suggestions from Federico.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_create_folder):
|
||||||
|
remove check for filename_is_root(), since we never hit that code
|
||||||
|
and else mkdir will fail anyway,
|
||||||
|
(gtk_file_system_unix_create_folder): fixup parent folder refresh
|
||||||
|
code.
|
||||||
|
|
||||||
|
2006-03-14 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (read_hidden_file), (fill_in_hidden),
|
||||||
|
(get_is_hidden_for_file): factor out g_file_get_contents() code
|
||||||
|
in read_hidden_file(). (Federico Mena Quintero).
|
||||||
|
|
||||||
|
2006-03-14 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
Icon name code suggestions by Federico Mena Quintero.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c: add GTK_FILE_INFO_ICON to
|
||||||
|
STAT_NEEDED_MASK,
|
||||||
|
(get_fallback_icon_name), (get_fallback_icon),
|
||||||
|
(get_icon_name_for_directory), (get_special_icon_name): get rid
|
||||||
|
of strdups,
|
||||||
|
(get_icon_type_from_path): add a statbuf argument and use the
|
||||||
|
statbuf when folder_unix is NULL,
|
||||||
|
(create_file_info): adapt to work with above changes.
|
||||||
|
|
||||||
|
2006-03-14 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_get_info): path
|
||||||
|
is NULL is an error here (gtk_file_system_get_info() already guards
|
||||||
|
path = NULL),
|
||||||
|
(gtk_file_system_unix_get_info): move basename creation to just
|
||||||
|
before create_file_info(). (Federico Mena Quintero).
|
||||||
|
|
||||||
|
2006-03-14 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (struct _GtkFileFolderUnix): add
|
||||||
|
load_folder_id field,
|
||||||
|
(load_folder): add thread enter/leave construct, set load_folder_id
|
||||||
|
to zero since we have the idle removed when we return,
|
||||||
|
(gtk_file_system_unix_get_folder): initialize load_folder_id to 0
|
||||||
|
and store the source id of the load_folder idle,
|
||||||
|
(gtk_file_folder_unix_finalize): remove the load_folder idle
|
||||||
|
if necessary. (Federico Mena Quintero).
|
||||||
|
|
||||||
|
2006-03-14 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooser.c (gtk_file_chooser_get_current_folder): return
|
||||||
|
NULL if there is no current folder path.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (gtk_file_chooser_default_map): we
|
||||||
|
reload the current folder if there is one, else we continue the
|
||||||
|
still pending load.
|
||||||
|
|
||||||
|
2006-03-14 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
Couple of fixes from Markku Vire.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (gtk_file_info_copy): also strdup icon_name
|
||||||
|
and display_key.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_create_folder):
|
||||||
|
initialize error to NULL,
|
||||||
|
(gtk_file_folder_unix_list_children): return an empty list for now if
|
||||||
|
we couldn't read the directory.
|
||||||
|
|
||||||
|
2005-12-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (update_current_folder_get_info_cb),
|
||||||
|
(gtk_file_chooser_default_update_current_folder): set and unset
|
||||||
|
busy cursor while checking whether the given path is a folder.
|
||||||
|
|
||||||
|
2005-12-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.h: change the GtkFileInfo argument of the
|
||||||
|
GetInfoCallback to be const.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c, gtk/gtkfilechooserdefault.c,
|
||||||
|
gtk/gtkpathbar.c: changes functions to reflect the above change.
|
||||||
|
|
||||||
|
2005-12-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c, gtk/gtkfilechooserprivate.h: keep track
|
||||||
|
of handles, cancel all pending operations on dispose.
|
||||||
|
|
||||||
|
2005-12-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserprivate.h (struct _GtkFileSystemModel): add
|
||||||
|
pending_handles field,
|
||||||
|
(struct _FileModelNode): add load_pending flag.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemmodel.c (gtk_file_system_model_dispose): introduce,
|
||||||
|
cancel all pending operations here,
|
||||||
|
(got_root_folder_cb), (_gtk_file_system_model_new), (ref_path_cb),
|
||||||
|
(_gtk_file_system_model_path_do): keep track of all pending
|
||||||
|
operations, handle cancelled operations.
|
||||||
|
|
||||||
|
2005-12-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c (gtk_file_chooser_button_finalize),
|
||||||
|
(gtk_file_chooser_button_destroy): move all handle cancellations
|
||||||
|
and object unrefs to destroy.
|
||||||
|
|
||||||
|
* gtk/gtkpathbar.c (gtk_path_bar_finalize), (gtk_path_bar_dispose):
|
||||||
|
likewise.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c (gtk_file_chooser_entry_class_init):
|
||||||
|
add dispose,
|
||||||
|
(gtk_file_chooser_entry_dispose): cancel handles and unrefs
|
||||||
|
objects here instead of finalize.
|
||||||
|
|
||||||
|
2005-12-23 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (get_cached_icon): check if "name" is an
|
||||||
|
absolute path, if so load the icon from that file.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_get_folder): fix
|
||||||
|
the build.
|
||||||
|
|
||||||
|
2005-12-21 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_get_folder): remove
|
||||||
|
the FIXME since it doesn't make sense, when we return a cached
|
||||||
|
folder we won't emit finished-loading either,
|
||||||
|
(gtk_file_system_unix_create_folder): remove unused variable,
|
||||||
|
(gtk_file_folder_unix_list_children): remove unused code,
|
||||||
|
(get_is_hidden_for_file): new function,
|
||||||
|
(create_file_info): also handle getting is_hidden when called
|
||||||
|
without a folder unix (from _system_get_info() for example).
|
||||||
|
|
||||||
|
2005-12-20 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (check_is_folder): fully removed!
|
||||||
|
woo!,
|
||||||
|
(check_save_entry): add is_folder argument,
|
||||||
|
(gtk_file_chooser_default_get_paths): update check_save_entry() call,
|
||||||
|
(get_display_name_for_folder): removed,
|
||||||
|
(confirmation_confirm_get_info_cb): new function which will
|
||||||
|
handle the confirmation dialog now we have all information for it,
|
||||||
|
(should_respond_after_confirm_overwrite): replace the call to
|
||||||
|
get_display_name_for_folder() with an asynchronous solution,
|
||||||
|
(action_create_folder_cb): request dialog response on successfull
|
||||||
|
folder creation,
|
||||||
|
(gtk_file_chooser_default_should_respond): update call to
|
||||||
|
check_save_entry(); replace the check is folder call for "path"
|
||||||
|
by just using the is_folder return value from check_save_entry();
|
||||||
|
replaced the check is folder call for "parent_path" with an
|
||||||
|
asynchronous setup, remainder of that work is now done in
|
||||||
|
save_entry_get_info_cb(),
|
||||||
|
(save_entry_get_info_cb): new function.
|
||||||
|
|
||||||
|
* gtk/gtkfilechoosermebed.[ch]: add response-requested signal.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdialog.c, gtk/gtkfilechooserprivate.h: handle
|
||||||
|
response_requested signal.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.[ch]
|
||||||
|
(_gtk_file_chooser_entry_get_is_folder): new function.
|
||||||
|
|
||||||
|
2005-12-20 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (ref_path_cb): when called with
|
||||||
|
!folder, check if node is the node we are looking for (can be
|
||||||
|
triggered when we call ref_path_cb ourselves after a find_child_node),
|
||||||
|
(_gtk_file_system_model_path_do): introduce parent_node field;
|
||||||
|
after finding a child node in a loaded parent node, don't forget
|
||||||
|
to call ref_path_cb,
|
||||||
|
(get_children_get_folder_cb): don't forget to set data->node->folder
|
||||||
|
to the newly acquired folder.
|
||||||
|
|
||||||
|
2005-12-20 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (show_and_select_paths_get_folder_cb):
|
||||||
|
handle case where the folder we get already finished loading.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemmodel.c (ref_path_cb),
|
||||||
|
(_gtk_file_system_model_path_do): make this work.
|
||||||
|
|
||||||
|
2005-12-19 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_update_count): modify
|
||||||
|
in such a way that it can also negatively update the count on
|
||||||
|
failures,
|
||||||
|
(get_file_info_finished): handle failures, update save folder
|
||||||
|
combo box on success,
|
||||||
|
(shortcuts_insert_path): change the boolean return value into a
|
||||||
|
void one, also refilter the model and update the save folder combo
|
||||||
|
box for the non-asynchronous case,
|
||||||
|
(shortcuts_append_home), (shortcuts_append_desktop),
|
||||||
|
(shortcuts_add_volumes), (shortcuts_add_current_folder),
|
||||||
|
(add_shortcuts_get_info_cb): adapt to shortcuts_insert_path() updates.
|
||||||
|
|
||||||
|
2005-12-19 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkpathbar.[ch]: add handle fields to ButtonData and
|
||||||
|
GtkPathBar; do correct handle bookkeeping.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (load_folder),
|
||||||
|
(gtk_file_system_unix_get_folder),
|
||||||
|
(gtk_file_folder_unix_is_finished_loading): add is_finished_loading
|
||||||
|
field to GtkFileFolderUnix, which is set to true once we are
|
||||||
|
really finished with loading (previous assumption that we are
|
||||||
|
always finshed loading is not true anymore).
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemmodel.c (got_root_folder_cb): if the folder is
|
||||||
|
finished loading, list the children and update the root level.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (update_current_folder_get_info_cb):
|
||||||
|
handle cancellation.
|
||||||
|
|
||||||
|
2005-12-16 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c: always call the callback, even when
|
||||||
|
cancelled; ref handles passed to the callback queue functions;
|
||||||
|
don't set cancelled to TRUE in _cancel_operation(), since operations
|
||||||
|
in this backend are always completed,
|
||||||
|
(get_special_icon_name): don't strdup the value of
|
||||||
|
get_icon_name_for_directory() again.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c: adapt to new cancellation policy;
|
||||||
|
reference all objects which are passed as callback arguments; in the
|
||||||
|
callback check if the handles match.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c: likewise.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c: likewise. Also changed the shortcut
|
||||||
|
loading code to be more like the code in GtkFileChooserButton, where
|
||||||
|
we store all handles in the model and have model_row_free_data
|
||||||
|
cancel any pending operations,
|
||||||
|
(shortcuts_model_create): copy the error.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserprivate.h (struct _GtkFileChooserDefault): remove
|
||||||
|
loading_volumes and loading_bookmarks fields.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (gtk_file_info_free): free icon_name here...
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (edited_idle_create_folder_cb): fix
|
||||||
|
thinko.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (dispatch_create_folder_callback),
|
||||||
|
(queue_create_folder_callback): need to copy/free the path,
|
||||||
|
(gtk_file_system_unix_create_folder): put the "reget folder" hack
|
||||||
|
back in, though it's working different now.
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c (gtk_file_chooser_button_finalize),
|
||||||
|
(dnd_select_folder_get_info_cb), (gtk_file_chooser_drag_data_received),
|
||||||
|
(change_icon_theme_get_info_cb), (change_icon_theme),
|
||||||
|
(model_add_special_get_info_cb), (model_add_special),
|
||||||
|
(update_label_get_info_cb), (update_label_and_image): cancel existing
|
||||||
|
operations, if any; added apprioriate fields to
|
||||||
|
GtkFileChooserButtonPrivate.
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c (gtk_file_chooser_entry_finalize): if
|
||||||
|
there's a folder loading, cancel the operation,
|
||||||
|
(load_directory_get_folder_callback): set the loading folder handle
|
||||||
|
to NULL,
|
||||||
|
(load_directory_callback): cancel any currently loading folders
|
||||||
|
before starting a new get folder operation.
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (shortcuts_insert_path): don't overwrite
|
||||||
|
data if it's already set (for example by the "is volume" case).
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c (set_info_get_info_cb),
|
||||||
|
(set_info_for_path_at_iter): store a row reference in the temporary
|
||||||
|
data structure and not an iter,
|
||||||
|
(model_add_special), (model_update_current_folder),
|
||||||
|
(gtk_file_chooser_button_add_shorcut_folder): remove unused pixbuf
|
||||||
|
variable.
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (get_file_info_finished),
|
||||||
|
(shortcuts_insert_path): replace gtk_file_system_render_icon() call
|
||||||
|
with gtk_file_system_get_file_info(),
|
||||||
|
(gtk_file_chooser_default_add_shortcut_folder),
|
||||||
|
(gtk_file_chooser_default_remove_shortcut_folder): handle shortcuts
|
||||||
|
which are still loading.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserprivate.h: add shortcuts_loading field to
|
||||||
|
struct _GtkFileChooserDefault.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c (set_info_get_info_cb),
|
||||||
|
(set_info_for_path_at_iter), (model_free_row_data): keep handle
|
||||||
|
and path together; now supports adding/removing shortcuts
|
||||||
|
which are still loading.
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c: make the cancelled field an GObject property.
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.h: make the GError argument in the callbacks
|
||||||
|
const.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c: update callbacks,
|
||||||
|
* gtk/gtkfilechooserentry.c: likewise,
|
||||||
|
* gtk/gtkfilechooserdefault.c: likewise,
|
||||||
|
* gtk/gtkfilesystemmodel.c: likewise,
|
||||||
|
* gtk/gtkpathbar.c: likewise.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (edited_idle_create_folder_cb): copy
|
||||||
|
the error which will be passed to error_creating_folder_dialog(),
|
||||||
|
(action_create_folder_cb): likewise,
|
||||||
|
(file_list_drag_data_received_get_info_cb): add forgotten GError
|
||||||
|
declaration.
|
||||||
|
|
||||||
|
2005-12-13 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkpathbar.c (get_button_image), (set_button_image),
|
||||||
|
(set_button_image_get_info_cb),
|
||||||
|
(gtk_path_bar_update_button_appearance): update to new icon
|
||||||
|
rendering call.
|
||||||
|
|
||||||
|
2005-12-09 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (file_list_drag_data_received),
|
||||||
|
(gtk_file_chooser_default_add_shortcut_folder),
|
||||||
|
(shortcuts_activate_get_info_cb): replace synchronous check_is_folder
|
||||||
|
calls with an async gtk_file_system_get_info() solution.
|
||||||
|
|
||||||
|
2005-12-09 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.c (icon_cache_element_free), (icon_theme_changed),
|
||||||
|
(get_cached_icon), (gtk_file_info_render_icon): implement pixbuf
|
||||||
|
caching as found in the file system backends.
|
||||||
|
|
||||||
|
2005-12-09 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtk.symbols: updated.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.[ch] (struct GtkFileInfo): added icon_name field,
|
||||||
|
(enum GtkFileInfoType): added GTK_FILE_INFO_ICON,
|
||||||
|
(gtk_file_info_set_icon_name): new function,
|
||||||
|
(gtk_file_info_render_icon): new function,
|
||||||
|
(gtk_file_system_render_icon): removed.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_render_icon): removed,
|
||||||
|
(create_file_info): fill icon_name field if required,
|
||||||
|
(get_*_icon): modified to suit create_file_info() better.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c: modified to use
|
||||||
|
gtk_file_info_render_icon() instead of gtk_file_system_render_icon().
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c: likewise.
|
||||||
|
|
||||||
|
2005-12-06 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (get_file_info_finished),
|
||||||
|
(update_current_folder_get_info_cb): fix mem leaks.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c (gtk_file_system_unix_get_info): ditto.
|
||||||
|
|
||||||
|
* gtk/gtkpathbar.c (gtk_path_bar_set_path_finish): ditto.
|
||||||
|
|
||||||
|
2005-12-06 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c (dnd_select_folder_get_info_cb),
|
||||||
|
(gtk_file_chooser_button_drag_data_received): make asynchronous,
|
||||||
|
(update_label_and_image): remove unused variable.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c
|
||||||
|
(gtk_file_chooser_default_update_current_folder): split in two
|
||||||
|
functions, so we can have the is_folder check back.
|
||||||
|
* gtk/gtkfilechooserprivate.h: add update_current_folder_handle
|
||||||
|
field.
|
||||||
|
|
||||||
|
2005-12-06 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (show_and_select_paths): fixed a typo.
|
||||||
|
|
||||||
|
2005-12-05 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
(merge from HEAD)
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c (trap_activate_cb): "event->state &
|
||||||
|
modifiers", not "event->state && modifiers". Patch by Sadrul
|
||||||
|
Habib Chowdhury <imadil@gmail.com>. Fixes bug #323073.
|
||||||
|
|
||||||
|
2005-12-06 Kristian Rietveld <kris@imendio.com>
|
||||||
|
|
||||||
|
Beginnings of an asynchronous file chooser.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserbutton.c: display name and the is folder property
|
||||||
|
are now asynchronously set using set_info_for_at_path_iter(), the
|
||||||
|
is folder property is now also stored in the tree model.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserdefault.c: lots of changes to the shortcuts
|
||||||
|
model code to make it operate asynchronously, check_is_folder() has
|
||||||
|
been "disabled" for now, all other synchronous calls were
|
||||||
|
replaced with asychronous ones.
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserentry.c: update call to
|
||||||
|
gtk_file_system_get_folder().
|
||||||
|
|
||||||
|
* gtk/gtkfilechooserprivate.h: added two fields.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystem.[ch]: for about 85% changed to the changes
|
||||||
|
outlined in the proposal discussed on gtk-devel-list.
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemmodel.[ch]: updated all asynchronous calls,
|
||||||
|
_gtk_file_system_model_path_do() basically had to be rewritten
|
||||||
|
(and I still need to finish that).
|
||||||
|
|
||||||
|
* gtk/gtkfilesystemunix.c: changed to be compatible with the new
|
||||||
|
GtkFileSystem interface.
|
||||||
|
|
||||||
|
* gtk/gtkpathbar.c (button_clicked_cb): block/unblock the
|
||||||
|
button_clicked_cb callback around the call to
|
||||||
|
gtk_toggle_button_set_active(), avoids button_clicked_cb getting
|
||||||
|
called twice.
|
||||||
|
(_gtk_path_bar_set_path): refactored to be asynchronous.
|
500
ChangeLog.gtk-printing
Normal file
@@ -0,0 +1,500 @@
|
|||||||
|
2006-04-17 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* docs/tools/widgets.c (get_all_widgets): Add print dialog
|
||||||
|
and page setup dialog.
|
||||||
|
|
||||||
|
2006-04-11 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpapersize.c (gtk_paper_size_get_display_name):
|
||||||
|
Call gettext on the standard paper names.
|
||||||
|
|
||||||
|
2006-04-11 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gdk/gdk.symbols:
|
||||||
|
* gdk/win32/gdkevents-win32.c:
|
||||||
|
* gdk/win32/gdkwin32.h:
|
||||||
|
Add gdk_win32_set_modal_dialog_libgtk_only that we
|
||||||
|
need for handling the mainloop in the print dialogs.
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-win32.c:
|
||||||
|
Pump the gtk+ mainloop when needed in the print dialogs.
|
||||||
|
This means gtk+ windows will redraw while the print dialogs
|
||||||
|
are up.
|
||||||
|
|
||||||
|
2006-04-10 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-win32.c:
|
||||||
|
Better size handling.
|
||||||
|
Save win32-specific settings in additions to the generic ones
|
||||||
|
if the generic one is lossy.
|
||||||
|
|
||||||
|
2006-04-10 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-win32.c:
|
||||||
|
Finish implementing run_page_setup_dialog.
|
||||||
|
|
||||||
|
* gtk/gtkpagesetup.h:
|
||||||
|
* gtk/gtkpapersize.h:
|
||||||
|
* gtk/gtkprint-win32.h:
|
||||||
|
* gtk/gtkprintcontext.h:
|
||||||
|
* gtk/gtkprinter-private.h:
|
||||||
|
* gtk/gtkprintoperation-private.h:
|
||||||
|
* gtk/gtkprintoperation-unix.c:
|
||||||
|
* gtk/gtkprintoperation.h:
|
||||||
|
* gtk/gtkprintsettings.h:
|
||||||
|
s/EGG/GTK/
|
||||||
|
|
||||||
|
2006-04-09 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk+-unix-print-2.0.pc.in: Fix a typo (#337698)
|
||||||
|
|
||||||
|
2006-04-07 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/paper_names_offsets.c:
|
||||||
|
* gtk/gen-paper-names.c: Correct the suffix/duplicate optimizations.
|
||||||
|
|
||||||
|
2006-04-07 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-win32.c:
|
||||||
|
Initial work on gtk_print_run_page_setup_dialog.
|
||||||
|
Not reading margins yet.
|
||||||
|
|
||||||
|
2006-04-07 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/Makefile.am:
|
||||||
|
Link to winspool
|
||||||
|
|
||||||
|
* gtk/gtk.symbols:
|
||||||
|
* gtk/gtkprintoperation-private.h:
|
||||||
|
* gtk/gtkprintoperation-unix.c:
|
||||||
|
* gtk/gtkprintoperation.[ch]:
|
||||||
|
Add gtk_print_operation_get_status_string() and status
|
||||||
|
string to _gtk_print_operation_set_status.
|
||||||
|
Rename GTK_PRINT_STATUS_PROCESSING to GTK_PRINT_STATUS_PRINTING.
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-win32.c:
|
||||||
|
Poll for status updates
|
||||||
|
|
||||||
|
* modules/printbackends/cups/gtkprintbackendcups.c:
|
||||||
|
Rename GTK_PRINT_STATUS_PROCESSING to GTK_PRINT_STATUS_PRINTING.
|
||||||
|
|
||||||
|
* tests/print-editor.c:
|
||||||
|
Show print status string
|
||||||
|
|
||||||
|
2006-04-06 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/paper_names_offsets.c:
|
||||||
|
* gtk/gtkpapersize.c: Save 4K of .data by converting
|
||||||
|
the array of paper names to offsets.
|
||||||
|
|
||||||
|
* gtk/gen-paper-names.c: Utility used to create
|
||||||
|
paper_names_offsets.c from paper_names.c.
|
||||||
|
|
||||||
|
* gtk/Makefile.am: Necessary glue.
|
||||||
|
|
||||||
|
2006-04-06 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-win32.c:
|
||||||
|
Use glib base64 code.
|
||||||
|
Set up manual_* vars fully.
|
||||||
|
|
||||||
|
2006-04-06 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/Makefile.am:
|
||||||
|
Add -lcomdlg32 on win32
|
||||||
|
|
||||||
|
* gtk/gtkprint-win32.h:
|
||||||
|
Move WINVER define to .c files
|
||||||
|
|
||||||
|
* gtk/gtk.symbols:
|
||||||
|
* gtk/gtkprintoperation-win32.c:
|
||||||
|
Add empty gtk_print_run_page_setup win implementation
|
||||||
|
Move WINVER define to this file
|
||||||
|
|
||||||
|
* modules/Makefile.am:
|
||||||
|
Only build print backends on unix
|
||||||
|
|
||||||
|
2006-04-05 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
* gtk/gtkprintoperation-unix.c: Use GTK_RESPONSE_CANCEL/OK
|
||||||
|
instead of GTK_RESPONSE_REJECT/ACCEPT, to make Esc close
|
||||||
|
the dialog, and to not use values which are documented
|
||||||
|
as reserved for apps.
|
||||||
|
|
||||||
|
2006-04-05 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* modules/printbackends/lpr/gtkprintbackendlpr.c:
|
||||||
|
Don't hardcode lpr command, expose full commandline.
|
||||||
|
|
||||||
|
2006-04-05 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpagesetupunixdialog.c:
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
Don't check for printer changes after dialog is dead.
|
||||||
|
|
||||||
|
* gtk/gtkprintbackend.c: (gtk_print_backend_load_modules):
|
||||||
|
Strip whitespace from backend strings
|
||||||
|
|
||||||
|
* gtk/gtkprintbackend.h:
|
||||||
|
Add private printer functions
|
||||||
|
|
||||||
|
* gtk/gtkprinter-private.h:
|
||||||
|
Move GtkPrinterPrivate into gtkprinter.c
|
||||||
|
|
||||||
|
* gtk/gtkprinter.[ch]:
|
||||||
|
Move GtkPrinterPrivate into gtkprinter.c
|
||||||
|
Add new construct properties.
|
||||||
|
Add setter functions.
|
||||||
|
|
||||||
|
* modules/printbackends/cups/gtkprintbackendcups.c:
|
||||||
|
* modules/printbackends/cups/gtkprintercups.[ch]:
|
||||||
|
Update to new APIs.
|
||||||
|
|
||||||
|
* modules/printbackends/lpr/Makefile.am:
|
||||||
|
* modules/printbackends/lpr/gtkprintbackendlpr.c:
|
||||||
|
* modules/printbackends/lpr/gtkprinterlpr.[ch]
|
||||||
|
Update to new APIs.
|
||||||
|
Remove GtkPrinterLPR.
|
||||||
|
Read/Save command line option in settings
|
||||||
|
|
||||||
|
* modules/printbackends/pdf/Makefile.am:
|
||||||
|
* modules/printbackends/pdf/gtkprintbackendpdf.c:
|
||||||
|
* modules/printbackends/pdf/gtkprinterpdf.[ch]:
|
||||||
|
Update to new APIs.
|
||||||
|
Remove GtkPrinterPDF.
|
||||||
|
|
||||||
|
2006-04-04 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation.h: Add missing standard
|
||||||
|
GObject macros. (#337277, Yevgen Muntyan)
|
||||||
|
|
||||||
|
2006-04-04 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprinteroption.[ch]:
|
||||||
|
Add gtk_printer_option_has_choice.
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
* modules/printbackends/cups/gtkprintbackendcups.c:
|
||||||
|
Add support for "print at time".
|
||||||
|
|
||||||
|
2006-04-04 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpapersize.c:
|
||||||
|
Handle ppd names with ".Transverse" suffix
|
||||||
|
Don't force width < height
|
||||||
|
|
||||||
|
* gtk/gtkprinteroption.c:
|
||||||
|
Make sure that value is never NULL.
|
||||||
|
|
||||||
|
* modules/printbackends/cups/gtkprintbackendcups.c:
|
||||||
|
Add some HP whitelist names
|
||||||
|
Remove spew from ignored options.
|
||||||
|
|
||||||
|
2006-04-03 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpagesetupunixdialog.c:
|
||||||
|
Fix warnings
|
||||||
|
|
||||||
|
* gtk/gtkprinter-private.h:
|
||||||
|
* gtk/gtkprinter.[ch]:
|
||||||
|
Add gtk_printer_is_default.
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
Use gtk_printer_is_default.
|
||||||
|
|
||||||
|
* modules/printbackends/cups/gtkprintbackendcups.c:
|
||||||
|
Get default printer info
|
||||||
|
|
||||||
|
* modules/printbackends/pdf/gtkprintbackendpdf.c:
|
||||||
|
Fix warning.
|
||||||
|
|
||||||
|
2006-04-03 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* modules/printbackends/pdf/gtkprintbackendpdf.c:
|
||||||
|
* modules/printbackends/pdf/gtkprinterpdf.[ch]:
|
||||||
|
Correctly read/write/use the output filename setting.
|
||||||
|
|
||||||
|
2006-04-03 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpagesetupunixdialog.c:
|
||||||
|
Disable margin from printers if there are no printers.
|
||||||
|
|
||||||
|
* gtk/gtkpapersize.c:
|
||||||
|
Fix build.
|
||||||
|
|
||||||
|
2006-04-01 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtk.symbols: protect unix-only symbols by
|
||||||
|
G_OS_UNIX (#336819, Yevgen Muntyan)
|
||||||
|
|
||||||
|
* gtk/gtkpapersize.c: Win32 fixes. (#336806, Yevgen Muntyan)
|
||||||
|
|
||||||
|
2006-03-30 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtk.symbols:
|
||||||
|
Update
|
||||||
|
|
||||||
|
* gtk/gtkprintbackend.[ch]:
|
||||||
|
Add dnotify to gtk_print_backend_print_stream
|
||||||
|
|
||||||
|
* gtk/gtkprinter-private.h:
|
||||||
|
Declare gtk_print_job_set_status
|
||||||
|
|
||||||
|
* gtk/gtkprinter.[ch]:
|
||||||
|
Remove gtk_printer_prepare_job.
|
||||||
|
|
||||||
|
* gtk/gtkprintjob.[ch]:
|
||||||
|
Now you create print job directly with gtk_print_job_new() and
|
||||||
|
they'll be prepared automatically.
|
||||||
|
Add status_changed signal and get_status.
|
||||||
|
Add gtk_print_job_set_source_file to allow sending a file.
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-private.h:
|
||||||
|
Add destroy notify for platform_data.
|
||||||
|
Declare _gtk_print_operation_set_status.
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-unix.c:
|
||||||
|
Hook up status change handling.
|
||||||
|
Use the new way to get a print job.
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation.[ch]:
|
||||||
|
Add status_changed signal and get_status/is_finished.
|
||||||
|
|
||||||
|
|
||||||
|
* modules/printbackends/cups/gtkprintbackendcups.c:
|
||||||
|
* modules/printbackends/lpr/gtkprintbackendlpr.c:
|
||||||
|
* modules/printbackends/pdf/gtkprintbackendpdf.c:
|
||||||
|
Update to use new APIs and set status on the job.
|
||||||
|
Cups polls for the status.
|
||||||
|
|
||||||
|
* tests/print-editor.c:
|
||||||
|
Track the print operations in the status bar.
|
||||||
|
|
||||||
|
2006-03-30 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/Makefile.am:
|
||||||
|
* gtk/gtkprintbackend.c:
|
||||||
|
Default to "pdf,cups" if we found cups, and
|
||||||
|
"pdf,lpr" otherwise.
|
||||||
|
|
||||||
|
2006-03-29 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* modules/printbackends/Makefile.am:
|
||||||
|
* configure.in: Don't build the cups backend
|
||||||
|
if cups is not there.
|
||||||
|
|
||||||
|
2006-03-29 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtk.symbols:
|
||||||
|
gtk_printer_prep_job -> gtk_printer_prepare_job
|
||||||
|
gtk_print_job_prep -> gtk_print_job_prepare
|
||||||
|
|
||||||
|
* gtk/gtkprintbackend.h:
|
||||||
|
* gtk/gtkprinter-private.h:
|
||||||
|
* gtk/gtkprinter.[ch]:
|
||||||
|
Add print_job argument to printer_prepare_for_print
|
||||||
|
gtk_printer_prep_job -> gtk_printer_prepare_job
|
||||||
|
|
||||||
|
* gtk/gtkprintjob.[ch]:
|
||||||
|
Add manual rendering settings to GtkPrintJob.
|
||||||
|
gtk_print_job_prep -> gtk_print_job_prepare
|
||||||
|
|
||||||
|
* gtk/gtkprintoperation-private.h:
|
||||||
|
* gtk/gtkprintoperation-unix.c:
|
||||||
|
* gtk/gtkprintoperation.c:
|
||||||
|
Get more manual_* settings working.
|
||||||
|
Run mainloop after each printed page.
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
Save page ranges.
|
||||||
|
|
||||||
|
* modules/printbackends/cups/gtkprintbackendcups.c:
|
||||||
|
* modules/printbackends/lpr/gtkprintbackendlpr.c:
|
||||||
|
* modules/printbackends/pdf/gtkprintbackendpdf.c:
|
||||||
|
Now put the manual_* settings inside the PrintJob in
|
||||||
|
prepare_for_print.
|
||||||
|
|
||||||
|
2006-03-29 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
Make sure we remember the format-for printer.
|
||||||
|
Also, use it as the default if set.
|
||||||
|
|
||||||
|
2006-03-28 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
Remove unnecessary padding under list.
|
||||||
|
|
||||||
|
2006-03-28 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpagesetupunixdialog.c:
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
More HIGy layout.
|
||||||
|
|
||||||
|
2006-03-28 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpagesetupunixdialog.c:
|
||||||
|
HIG conformance of spacing and titles.
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
Use standard constructor form print button too.
|
||||||
|
|
||||||
|
2006-03-27 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* modules/printbackends/*/Makefile.am: Fix
|
||||||
|
a problem with builddir != srcdir builds.
|
||||||
|
(#335915, Yevgen Muntyan)
|
||||||
|
|
||||||
|
2006-03-27 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintbackend.c: Simply the syntax
|
||||||
|
of the setting to "cups,pdf", and get rid
|
||||||
|
of the GScanner used to parse it.
|
||||||
|
|
||||||
|
2006-03-27 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
Reorder print list so status is at the end.
|
||||||
|
Ellipsize the status column.
|
||||||
|
|
||||||
|
2006-03-27 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpagesetupunixdialog.c:
|
||||||
|
Handle removed printers and status-changed.
|
||||||
|
Handle NULL printer location.
|
||||||
|
|
||||||
|
2006-03-27 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/Makefile.am:
|
||||||
|
* gtk/stock-icons/24/gtk-orientation-landscape.png:
|
||||||
|
* gtk/stock-icons/24/gtk-orientation-portrait.png:
|
||||||
|
* gtk/stock-icons/24/gtk-orientation-reverse-landscape.png:
|
||||||
|
* gtk/gtkiconfactory.c: (get_default_icons):
|
||||||
|
* gtk/gtkstock.h:
|
||||||
|
Add orientation stock icons.
|
||||||
|
|
||||||
|
* gtk/gtkpagesetupunixdialog.c:
|
||||||
|
Use the orientation icons.
|
||||||
|
|
||||||
|
2006-03-27 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkpagesetupunixdialog.c:
|
||||||
|
* gtk/gtkprintjob.c:
|
||||||
|
* gtk/gtkprintoperation-unix.c:
|
||||||
|
* gtk/gtkprintunixdialog.c:
|
||||||
|
s/impl/dialog/
|
||||||
|
Don't prefix static functions with _
|
||||||
|
|
||||||
|
2006-03-26 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtkprintunixdialog.c: Don't use _(""). (#335898,
|
||||||
|
Christian Persch)
|
||||||
|
|
||||||
|
* modules/printbackends/*: Don't use G_DEFINE_TYPE
|
||||||
|
in modules.
|
||||||
|
|
||||||
|
* gtk/gtkprintbackend.c: Remove an unused static function.
|
||||||
|
|
||||||
|
2006-03-25 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtk.symbols: Add printing symbols
|
||||||
|
|
||||||
|
* gtk/gtkpapersize.[hc]:
|
||||||
|
* gtk/gtkpage*.[hc]:
|
||||||
|
* gtk/gtkprint*.[hc]: Add aliasing, #include cleanups.
|
||||||
|
|
||||||
|
* gtk/gtkprintcontext.h:
|
||||||
|
* gtk/gtkprintoperation.h:
|
||||||
|
* gtk/gtkprintsettings.h: Make get_type function const.
|
||||||
|
|
||||||
|
* modules/printbackends/pdf/gtkprintbackendpdf.c: Remove
|
||||||
|
C99ism.
|
||||||
|
|
||||||
|
* modules/printbackends/cups/gtkcupsutils.c: Use unsigned
|
||||||
|
integers for bitfields.
|
||||||
|
|
||||||
|
2006-03-24 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gtk/gtknotebook.c: Fix docs
|
||||||
|
|
||||||
|
* gtk/Makefile.am (EXTRA_DIST): Add the stock icons here.
|
||||||
|
|
||||||
|
* gdk/directfb/Makefile.am (EXTRA_DIST): Remove ChangeLog,
|
||||||
|
to make make dist happier.
|
||||||
|
|
||||||
|
2006-03-24 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
* configure.in:
|
||||||
|
* gtk/gtkprintbackend.c:
|
||||||
|
* modules/printbackends/Makefile.am:
|
||||||
|
* modules/printbackends/cups/Makefile.am:
|
||||||
|
* modules/printbackends/lpr/Makefile.am:
|
||||||
|
* modules/printbackends/lpr/gtkprintbackendlpr.[ch]:
|
||||||
|
* modules/printbackends/lpr/gtkprinterlpr.[ch]:
|
||||||
|
* modules/printbackends/pdf/Makefile.am:
|
||||||
|
* modules/printbackends/pdf/gtkprintbackendpdf.[ch]:
|
||||||
|
* modules/printbackends/pdf/gtkprinterpdf.[ch]:
|
||||||
|
Import pdf and lpr backend
|
||||||
|
|
||||||
|
2006-03-24 Alexander Larsson <alexl@redhat.com>
|
||||||
|
|
||||||
|
Import print-operation into gtk+
|
||||||
|
|
||||||
|
* .cvsignore:
|
||||||
|
* Makefile.am:
|
||||||
|
* gtk+-unix-print-2.0.pc.in:
|
||||||
|
Add gtk+-unix-print-2.0.pc
|
||||||
|
|
||||||
|
* configure.in:
|
||||||
|
Look for cups
|
||||||
|
Look for various _NL_* extensions
|
||||||
|
Output new makefiles and .pc.in
|
||||||
|
|
||||||
|
* gtk/Makefile.am:
|
||||||
|
Add new files
|
||||||
|
|
||||||
|
* gtk/gtk.h:
|
||||||
|
Include gtkprintoperation.h
|
||||||
|
|
||||||
|
* gtk/gtkenums.h:
|
||||||
|
Add printing enums
|
||||||
|
|
||||||
|
* gtk/gtkmarshalers.list:
|
||||||
|
Add required new marshallers
|
||||||
|
|
||||||
|
* gtk/gtkpagesetup.[ch]:
|
||||||
|
* gtk/gtkpagesetupunixdialog.[ch]:
|
||||||
|
* gtk/gtkpagesetupunixdialog.h:
|
||||||
|
* gtk/gtkpapersize.[ch]:
|
||||||
|
* gtk/gtkprint-win32.[ch]:
|
||||||
|
* gtk/gtkprintbackend.[ch]:
|
||||||
|
* gtk/gtkprintcontext.[ch]:
|
||||||
|
* gtk/gtkprinter-private.h:
|
||||||
|
* gtk/gtkprinter.[ch]:
|
||||||
|
* gtk/gtkprinteroption.[ch]:
|
||||||
|
* gtk/gtkprinteroptionset.[ch]:
|
||||||
|
* gtk/gtkprinteroptionwidget.[ch]:
|
||||||
|
* gtk/gtkprintjob.[ch]:
|
||||||
|
* gtk/gtkprintoperation-private.h:
|
||||||
|
* gtk/gtkprintoperation-unix.c:
|
||||||
|
* gtk/gtkprintoperation-win32.c:
|
||||||
|
* gtk/gtkprintoperation.[ch]:
|
||||||
|
* gtk/gtkprintsettings.[ch]:
|
||||||
|
* gtk/gtkprintunixdialog.[ch]:
|
||||||
|
* gtk/paper_names.c:
|
||||||
|
Generic printing support
|
||||||
|
|
||||||
|
* modules/Makefile.am:
|
||||||
|
* modules/printbackends/Makefile.am:
|
||||||
|
* modules/printbackends/cups/Makefile.am:
|
||||||
|
* modules/printbackends/cups/gtkcupsutils.[ch]:
|
||||||
|
* modules/printbackends/cups/gtkprintbackendcups.[ch]:
|
||||||
|
* modules/printbackends/cups/gtkprintercups.[ch]:
|
||||||
|
Cups backend
|
||||||
|
|
||||||
|
* tests/.cvsignore:
|
||||||
|
* tests/Makefile.am:
|
||||||
|
* tests/print-editor.c:
|
||||||
|
Add printing test app
|
||||||
|
|
4961
ChangeLog.pre-1-0
Normal file
9106
ChangeLog.pre-1-2
Normal file
28743
ChangeLog.pre-2-0
Normal file
9300
ChangeLog.pre-2-10
Normal file
8912
ChangeLog.pre-2-12
Normal file
9588
ChangeLog.pre-2-14
Normal file
3959
ChangeLog.pre-2-16
Normal file
7358
ChangeLog.pre-2-2
Normal file
11857
ChangeLog.pre-2-4
Normal file
7235
ChangeLog.pre-2-6
Normal file
5381
ChangeLog.pre-2-8
Normal file
64
HACKING
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
If you want to hack on the GTK+ project, you'll need to have
|
||||||
|
the following packages installed:
|
||||||
|
|
||||||
|
- GNU autoconf 2.54
|
||||||
|
- GNU automake 1.7
|
||||||
|
- GNU libtool 1.4
|
||||||
|
- indent (GNU indent 1.9.1 is known good)
|
||||||
|
- GNU gettext 10.40
|
||||||
|
|
||||||
|
These should be available by ftp from ftp.gnu.org or any of the
|
||||||
|
fine GNU mirrors. Beta software can be found at alpha.gnu.org.
|
||||||
|
|
||||||
|
Up-to-date instructions about developing GNOME applications and libraries
|
||||||
|
can be found here:
|
||||||
|
|
||||||
|
http://developer.gnome.org
|
||||||
|
|
||||||
|
Information about using git with GNOME can be found here:
|
||||||
|
|
||||||
|
http://live.gnome.org/Git
|
||||||
|
|
||||||
|
In order to get GIT gtk+ installed on your system, you need to have
|
||||||
|
the most recent GIT versions of glib, pango, and atk installed as well.
|
||||||
|
The installation process of these libraries is similar to that of gtk+, but
|
||||||
|
needs to be fulfilled prior to installation of gtk+.
|
||||||
|
|
||||||
|
If at all possible, please use GIT to get the latest development version of
|
||||||
|
gtk+ and glib. You can do the following to get glib and gtk+ from GIT:
|
||||||
|
|
||||||
|
$ git clone git://git.gnome.org/glib
|
||||||
|
$ git clone git://git.gnome.org/pango
|
||||||
|
$ git clone git://git.gnome.org/atk
|
||||||
|
$ git clone git://git.gnome.org/gtk+
|
||||||
|
|
||||||
|
Note: if you plan to push changes to back to the master repository and
|
||||||
|
have a gnome account, you want to use the following instead:
|
||||||
|
|
||||||
|
$ git clone ssh://<username>@git.gnome.org/git/gtk+
|
||||||
|
|
||||||
|
To compile the GIT version of gtk+ on your system, you will need to take
|
||||||
|
several steps to setup the tree for compilation. You can do all these
|
||||||
|
steps at once by running:
|
||||||
|
|
||||||
|
gtk+$ ./autogen.sh
|
||||||
|
|
||||||
|
Basically this does the following for you:
|
||||||
|
|
||||||
|
gtk+$ aclocal; automake; autoconf
|
||||||
|
|
||||||
|
The above commands create the `configure' script. Now you
|
||||||
|
run the `configure' script in `gtk+/' to create all Makefiles.
|
||||||
|
More information about that in `INSTALL'.
|
||||||
|
|
||||||
|
Before running `autogen.sh' or `configure', make sure you have libtool
|
||||||
|
in your path.
|
||||||
|
|
||||||
|
Note that autogen.sh runs configure for you. If you wish to pass
|
||||||
|
options like `--prefix=/usr' to `configure' you can give those options
|
||||||
|
to `autogen.sh' and they will be passed on to `configure'.
|
||||||
|
|
||||||
|
For information about submitting patches and pushing changes
|
||||||
|
to GIT, see the `README' and `README.commits' files. In particular,
|
||||||
|
don't, under any circumstances, push anything to GIT before
|
||||||
|
reading and understanding `README.commmits'.
|
41
INSTALL.in
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
Prerequisites
|
||||||
|
=============
|
||||||
|
|
||||||
|
GTK+ requires the following packages:
|
||||||
|
|
||||||
|
- The GLib, Pango, ATK and cairo libraries, available at the same
|
||||||
|
location as GTK+. GTK+ @GTK_VERSION@ requires at least GLib 2.17.6,
|
||||||
|
Pango 1.20, ATK 1.13.0 and cairo 1.6.0.
|
||||||
|
|
||||||
|
- The TIFF, PNG, and JPEG image loading libraries. You most
|
||||||
|
likely have these installed on your system already. If not
|
||||||
|
these libraries are available from:
|
||||||
|
|
||||||
|
http://www.libtiff.org/
|
||||||
|
http://www.libpng.org/
|
||||||
|
http://www.ijg.org/
|
||||||
|
|
||||||
|
libtiff must be version 3.6.0 or higher.
|
||||||
|
|
||||||
|
Simple install procedure
|
||||||
|
========================
|
||||||
|
|
||||||
|
% gzip -cd gtk+-@GTK_VERSION@.tar.gz | tar xvf - # unpack the sources
|
||||||
|
% cd gtk+-@GTK_VERSION@ # change to the toplevel directory
|
||||||
|
% ./configure # run the `configure' script
|
||||||
|
% make # build GTK+
|
||||||
|
[ Become root if necessary ]
|
||||||
|
% make install # install GTK+
|
||||||
|
|
||||||
|
The Details
|
||||||
|
===========
|
||||||
|
|
||||||
|
Complete information about installing GTK+ and related libraries can be found
|
||||||
|
in the file:
|
||||||
|
|
||||||
|
docs/reference/gtk/html/gtk-building.html
|
||||||
|
|
||||||
|
Or online at:
|
||||||
|
|
||||||
|
http://developer.gnome.org/doc/API/2.0/gtk/gtk-building.html
|
||||||
|
|
12
MAINTAINERS
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Matthias Clasen
|
||||||
|
E-mail: mclasen@redhat.com
|
||||||
|
Userid: matthiasc
|
||||||
|
|
||||||
|
Tim Janik
|
||||||
|
E-mail: timj@gtk.org
|
||||||
|
Userid: timj
|
||||||
|
|
||||||
|
Note that a lot of people are contributing to GTK+, and some parts of it
|
||||||
|
are technically maintained by other people. The people listed above are
|
||||||
|
meant as contacts for administrative questions such as cvs accounts. Other
|
||||||
|
questions are best directed to the mailing list gtk-devel-list@gnome.org.
|
225
Makefile.am
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
## Makefile.am for GTK+
|
||||||
|
include $(top_srcdir)/Makefile.decl
|
||||||
|
|
||||||
|
SRC_SUBDIRS = gdk-pixbuf gdk gtk modules demos tests perf contrib
|
||||||
|
SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros
|
||||||
|
|
||||||
|
# require automake 1.4
|
||||||
|
AUTOMAKE_OPTIONS = 1.7
|
||||||
|
|
||||||
|
EXTRA_DIST += \
|
||||||
|
HACKING \
|
||||||
|
makecopyright \
|
||||||
|
NEWS.pre-1-0 \
|
||||||
|
ChangeLog.pre-1-0 \
|
||||||
|
ChangeLog.pre-1-2 \
|
||||||
|
ChangeLog.pre-2-0 \
|
||||||
|
ChangeLog.pre-2-2 \
|
||||||
|
ChangeLog.pre-2-4 \
|
||||||
|
ChangeLog.pre-2-6 \
|
||||||
|
ChangeLog.pre-2-8 \
|
||||||
|
ChangeLog.pre-2-10 \
|
||||||
|
ChangeLog.pre-2-12 \
|
||||||
|
ChangeLog.pre-2-14 \
|
||||||
|
ChangeLog.pre-2-16 \
|
||||||
|
ChangeLog.gtk-async-file-chooser \
|
||||||
|
ChangeLog.gtk-printing \
|
||||||
|
README.commits \
|
||||||
|
README.win32 \
|
||||||
|
config.h.win32 \
|
||||||
|
makefile.msc \
|
||||||
|
gtk-zip.sh.in \
|
||||||
|
sanitize-la.sh \
|
||||||
|
po/README.translators \
|
||||||
|
po/po2tbl.sed.in \
|
||||||
|
examples/aspectframe/Makefile \
|
||||||
|
examples/aspectframe/aspectframe.c \
|
||||||
|
examples/Makefile \
|
||||||
|
examples/README.1ST \
|
||||||
|
examples/extract.awk \
|
||||||
|
examples/extract.sh \
|
||||||
|
examples/arrow/Makefile \
|
||||||
|
examples/arrow/arrow.c \
|
||||||
|
examples/base/Makefile \
|
||||||
|
examples/base/base.c \
|
||||||
|
examples/buttonbox/Makefile \
|
||||||
|
examples/buttonbox/buttonbox.c \
|
||||||
|
examples/buttons/Makefile \
|
||||||
|
examples/buttons/buttons.c \
|
||||||
|
examples/buttons/info.xpm \
|
||||||
|
examples/calendar/Makefile \
|
||||||
|
examples/calendar/calendar.c \
|
||||||
|
examples/clist/Makefile \
|
||||||
|
examples/clist/clist.c \
|
||||||
|
examples/entry/Makefile \
|
||||||
|
examples/entry/entry.c \
|
||||||
|
examples/eventbox/Makefile \
|
||||||
|
examples/eventbox/eventbox.c \
|
||||||
|
examples/filesel/Makefile \
|
||||||
|
examples/filesel/filesel.c \
|
||||||
|
examples/gtkdial/Makefile \
|
||||||
|
examples/gtkdial/dial_test.c \
|
||||||
|
examples/gtkdial/gtkdial.c \
|
||||||
|
examples/gtkdial/gtkdial.h \
|
||||||
|
examples/helloworld/Makefile \
|
||||||
|
examples/helloworld/helloworld.c \
|
||||||
|
examples/helloworld2/Makefile \
|
||||||
|
examples/helloworld2/helloworld2.c \
|
||||||
|
examples/label/Makefile \
|
||||||
|
examples/label/label.c \
|
||||||
|
examples/list/Makefile \
|
||||||
|
examples/list/list.c \
|
||||||
|
examples/menu/Makefile \
|
||||||
|
examples/menu/menu.c \
|
||||||
|
examples/menu/itemfactory.c \
|
||||||
|
examples/notebook/Makefile \
|
||||||
|
examples/notebook/notebook.c \
|
||||||
|
examples/packbox/Makefile \
|
||||||
|
examples/packbox/packbox.c \
|
||||||
|
examples/paned/Makefile \
|
||||||
|
examples/paned/paned.c \
|
||||||
|
examples/pixmap/Makefile \
|
||||||
|
examples/pixmap/pixmap.c \
|
||||||
|
examples/progressbar/Makefile \
|
||||||
|
examples/progressbar/progressbar.c \
|
||||||
|
examples/radiobuttons/Makefile \
|
||||||
|
examples/radiobuttons/radiobuttons.c \
|
||||||
|
examples/rangewidgets/Makefile \
|
||||||
|
examples/rangewidgets/rangewidgets.c \
|
||||||
|
examples/rulers/Makefile \
|
||||||
|
examples/rulers/rulers.c \
|
||||||
|
examples/scribble-simple/Makefile \
|
||||||
|
examples/scribble-simple/scribble-simple.c \
|
||||||
|
examples/scribble-xinput/Makefile \
|
||||||
|
examples/scribble-xinput/scribble-xinput.c \
|
||||||
|
examples/scrolledwin/Makefile \
|
||||||
|
examples/scrolledwin/scrolledwin.c \
|
||||||
|
examples/selection/Makefile \
|
||||||
|
examples/selection/gettargets.c \
|
||||||
|
examples/selection/setselection.c \
|
||||||
|
examples/statusbar/Makefile \
|
||||||
|
examples/statusbar/statusbar.c \
|
||||||
|
examples/table/Makefile \
|
||||||
|
examples/table/table.c \
|
||||||
|
examples/text/Makefile \
|
||||||
|
examples/text/text.c \
|
||||||
|
examples/tictactoe/Makefile \
|
||||||
|
examples/tictactoe/tictactoe.c \
|
||||||
|
examples/tictactoe/tictactoe.h \
|
||||||
|
examples/tictactoe/ttt_test.c \
|
||||||
|
examples/tree/Makefile \
|
||||||
|
examples/tree/tree.c \
|
||||||
|
examples/wheelbarrow/Makefile \
|
||||||
|
examples/wheelbarrow/wheelbarrow.c \
|
||||||
|
examples/fixed/fixed.c \
|
||||||
|
examples/fixed/Makefile \
|
||||||
|
examples/frame/frame.c \
|
||||||
|
examples/frame/Makefile \
|
||||||
|
examples/spinbutton/spinbutton.c \
|
||||||
|
examples/spinbutton/Makefile \
|
||||||
|
examples/find-examples.sh
|
||||||
|
|
||||||
|
GDKTARGET=@gdktarget@
|
||||||
|
|
||||||
|
## Copy .pc files to target-specific names
|
||||||
|
gtk+-$(GDKTARGET)-2.0.pc: gtk+-2.0.pc
|
||||||
|
rm -f gtk+-$(GDKTARGET)-2.0.pc && \
|
||||||
|
cp gtk+-2.0.pc gtk+-$(GDKTARGET)-2.0.pc
|
||||||
|
|
||||||
|
gdk-$(GDKTARGET)-2.0.pc: gdk-2.0.pc
|
||||||
|
rm -f gdk-$(GDKTARGET)-2.0.pc && \
|
||||||
|
cp gdk-2.0.pc gdk-$(GDKTARGET)-2.0.pc
|
||||||
|
|
||||||
|
gtk+-$(GDKTARGET)-2.0-uninstalled.pc: gtk+-2.0-uninstalled.pc
|
||||||
|
rm -f gtk+-$(GDKTARGET)-2.0-uninstalled.pc && \
|
||||||
|
cp gtk+-2.0-uninstalled.pc gtk+-$(GDKTARGET)-2.0-uninstalled.pc
|
||||||
|
|
||||||
|
gdk-$(GDKTARGET)-2.0-uninstalled.pc: gdk-2.0-uninstalled.pc
|
||||||
|
rm -f gdk-$(GDKTARGET)-2.0-uninstalled.pc && \
|
||||||
|
cp gdk-2.0-uninstalled.pc gdk-$(GDKTARGET)-2.0-uninstalled.pc
|
||||||
|
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA= gdk-pixbuf-2.0.pc gdk-$(GDKTARGET)-2.0.pc gtk+-$(GDKTARGET)-2.0.pc gail.pc
|
||||||
|
|
||||||
|
if OS_UNIX
|
||||||
|
pkgconfig_DATA += gtk+-unix-print-2.0.pc
|
||||||
|
endif
|
||||||
|
|
||||||
|
DISTCLEANFILES = \
|
||||||
|
gtk+-unix-print-2.0.pc \
|
||||||
|
gtk+-$(GDKTARGET)-2.0.pc \
|
||||||
|
gdk-$(GDKTARGET)-2.0.pc \
|
||||||
|
gail.pc \
|
||||||
|
gtk+-$(GDKTARGET)-2.0-uninstalled.pc \
|
||||||
|
gdk-$(GDKTARGET)-2.0-uninstalled.pc \
|
||||||
|
gail-uninstalled.pc \
|
||||||
|
config.lt
|
||||||
|
|
||||||
|
distclean-local:
|
||||||
|
if test $(srdcir) = .; then :; else \
|
||||||
|
rm -f ChangeLog; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
ChangeLog:
|
||||||
|
@echo Creating $@
|
||||||
|
@if test -d "$(srcdir)/.git"; then \
|
||||||
|
(GIT_DIR=$(top_srcdir)/.git ./missing --run git log GTK_2_16_0^^.. --stat) | fmt --split-only > $@.tmp \
|
||||||
|
&& mv -f $@.tmp $@ \
|
||||||
|
|| ($(RM) $@.tmp; \
|
||||||
|
echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
|
||||||
|
(test -f $@ || echo git-log is required to generate this file >> $@)); \
|
||||||
|
else \
|
||||||
|
test -f $@ || \
|
||||||
|
(echo A git checkout and git-log is required to generate ChangeLog >&2 && \
|
||||||
|
echo A git checkout and git-log is required to generate this file >> $@); \
|
||||||
|
fi
|
||||||
|
|
||||||
|
## copy the default target for this platform to gdk-2.0.pc and gtk+-2.0.pc
|
||||||
|
DEFAULT_GDKTARGET=x11
|
||||||
|
install-data-hook:
|
||||||
|
(cd $(DESTDIR)$(pkgconfigdir) && \
|
||||||
|
test -f gdk-$(DEFAULT_GDKTARGET)-2.0.pc && \
|
||||||
|
test -f gtk+-$(DEFAULT_GDKTARGET)-2.0.pc && \
|
||||||
|
rm -f gdk-2.0.pc && cp -f gdk-$(DEFAULT_GDKTARGET)-2.0.pc gdk-2.0.pc && \
|
||||||
|
rm -f gtk+-2.0.pc && cp -f gtk+-$(DEFAULT_GDKTARGET)-2.0.pc gtk+-2.0.pc) || \
|
||||||
|
(cd $(DESTDIR)$(pkgconfigdir) && \
|
||||||
|
rm -f gdk-2.0.pc && cp -f gdk-$(GDKTARGET)-2.0.pc gdk-2.0.pc && \
|
||||||
|
rm -f gtk+-2.0.pc && cp -f gtk+-$(GDKTARGET)-2.0.pc gtk+-2.0.pc)
|
||||||
|
|
||||||
|
uninstall-local:
|
||||||
|
rm -f $(DESTDIR)$(pkgconfigdir)/gdk-2.0.pc
|
||||||
|
rm -f $(DESTDIR)$(pkgconfigdir)/gtk+-2.0.pc
|
||||||
|
|
||||||
|
dist-hook:
|
||||||
|
if test -f $(srcdir)/INSTALL.in && test -f $(srcdir)/README.in ; then \
|
||||||
|
CONFIG_FILES="INSTALL:$(srcdir)/INSTALL.in README:$(srcdir)/README.in" \
|
||||||
|
CONFIG_HEADERS= \
|
||||||
|
$(SHELL) config.status \
|
||||||
|
&& cp INSTALL README $(distdir) ; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
.PHONY: files release sanity snapshot ChangeLog
|
||||||
|
|
||||||
|
files:
|
||||||
|
@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
|
||||||
|
echo $$p; \
|
||||||
|
done
|
||||||
|
@for subdir in $(SUBDIRS); do \
|
||||||
|
files=`cd $$subdir; $(MAKE) files | grep -v "make\[[1-9]\]"`; \
|
||||||
|
for file in $$files; do \
|
||||||
|
echo $$subdir/$$file; \
|
||||||
|
done; \
|
||||||
|
done
|
||||||
|
|
||||||
|
release:
|
||||||
|
rm -rf .deps */.deps
|
||||||
|
$(MAKE) distcheck
|
||||||
|
|
||||||
|
sanity:
|
||||||
|
./sanity_check $(VERSION)
|
||||||
|
|
||||||
|
|
||||||
|
snapshot:
|
||||||
|
$(MAKE) dist distdir=$(PACKAGE)-snap`date +"%Y%m%d"`
|
||||||
|
|
||||||
|
DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc --enable-man --disable-rebuilds
|
82
Makefile.decl
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# GTK+ - The GIMP Toolkit
|
||||||
|
|
||||||
|
GTESTER = gtester # in $PATH for non-GLIB packages
|
||||||
|
GTESTER_REPORT = gtester-report # in $PATH for non-GLIB packages
|
||||||
|
|
||||||
|
# initialize variables for unconditional += appending
|
||||||
|
EXTRA_DIST =
|
||||||
|
TEST_PROGS =
|
||||||
|
|
||||||
|
### testing rules
|
||||||
|
|
||||||
|
# Xvfb based test rules
|
||||||
|
XVFB = Xvfb -ac -noreset -screen 0 800x600x16
|
||||||
|
XIDS = 101 102 103 104 105 106 107 197 199 211 223 227 293 307 308 309 310 311 \
|
||||||
|
491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 \
|
||||||
|
991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 \
|
||||||
|
1008 1009 4703 4721 4723 4729 4733 4751 9973 9974 9975 9976 9977 9978 9979 \
|
||||||
|
9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 \
|
||||||
|
9995 9996 9997 9998 9999
|
||||||
|
SKIP_GDKTARGET = \
|
||||||
|
test "$(gdktarget)" != "x11" \
|
||||||
|
&& echo "Gtk+Tests:INFO: Skipping GUI tests for non-X11 target."
|
||||||
|
XVFB_START = \
|
||||||
|
${XVFB} -help 2>/dev/null 1>&2 \
|
||||||
|
&& XID=`for id in $(XIDS) ; do test -e /tmp/.X$$id-lock || { echo $$id; exit 0; }; done; exit 1` \
|
||||||
|
&& { ${XVFB} :$$XID -screen 0 800x600x16 -nolisten tcp -auth /dev/null >/dev/null 2>&1 & \
|
||||||
|
trap "kill -15 $$! " 0 HUP INT QUIT TRAP USR1 PIPE TERM ; } \
|
||||||
|
|| { echo "Gtk+Tests:ERROR: Failed to start Xvfb environment for X11 target tests."; exit 1; } \
|
||||||
|
&& DISPLAY=:$$XID && export DISPLAY
|
||||||
|
# call as: $(XVFB_START) && someprogram
|
||||||
|
|
||||||
|
# test: run all tests in cwd and subdirs
|
||||||
|
test: ${TEST_PROGS}
|
||||||
|
@$(SKIP_GDKTARGET) || test -z "${TEST_PROGS}" || { \
|
||||||
|
$(XVFB_START) && { set -e; ${GTESTER} --verbose ${TEST_PROGS}; }; \
|
||||||
|
}
|
||||||
|
@ for subdir in $(SUBDIRS) ; do \
|
||||||
|
test "$$subdir" = "." -o "$$subdir" = "po" -o "$$subdir" = "po-properties" || \
|
||||||
|
( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
|
||||||
|
done
|
||||||
|
# test-report: run tests in subdirs and generate report
|
||||||
|
# perf-report: run tests in subdirs with -m perf and generate report
|
||||||
|
# full-report: like test-report: with -m perf and -m slow
|
||||||
|
test-report perf-report full-report: ${TEST_PROGS}
|
||||||
|
@ ignore_logdir=true ; \
|
||||||
|
if test -z "$$GTESTER_LOGDIR" ; then \
|
||||||
|
GTESTER_LOGDIR=`mktemp -d "\`pwd\`/.testlogs-XXXXXX"`; export GTESTER_LOGDIR ; \
|
||||||
|
ignore_logdir=false ; \
|
||||||
|
fi ; \
|
||||||
|
for subdir in $(SUBDIRS) ; do \
|
||||||
|
test "$$subdir" = "." -o "$$subdir" = "po" -o "$$subdir" = "po-properties" || \
|
||||||
|
( cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $@ ) || exit $? ; \
|
||||||
|
done ; \
|
||||||
|
$(SKIP_GDKTARGET) || test -z "${TEST_PROGS}" || { \
|
||||||
|
case $@ in \
|
||||||
|
test-report) test_options="-k";; \
|
||||||
|
perf-report) test_options="-k -m=perf";; \
|
||||||
|
full-report) test_options="-k -m=perf -m=slow";; \
|
||||||
|
esac ; \
|
||||||
|
$(XVFB_START) && { \
|
||||||
|
set -e; \
|
||||||
|
if test -z "$$GTESTER_LOGDIR" ; then \
|
||||||
|
${GTESTER} --verbose $$test_options -o test-report.xml ${TEST_PROGS} ; \
|
||||||
|
elif test -n "${TEST_PROGS}" ; then \
|
||||||
|
${GTESTER} --verbose $$test_options -o `mktemp "$$GTESTER_LOGDIR/log-XXXXXX"` ${TEST_PROGS} ; \
|
||||||
|
fi ; \
|
||||||
|
}; \
|
||||||
|
}; \
|
||||||
|
$$ignore_logdir || { \
|
||||||
|
echo '<?xml version="1.0"?>' > $@.xml ; \
|
||||||
|
echo '<report-collection>' >> $@.xml ; \
|
||||||
|
for lf in `ls -L "$$GTESTER_LOGDIR"/.` ; do \
|
||||||
|
sed '1,1s/^<?xml\b[^>?]*?>//' <"$$GTESTER_LOGDIR"/"$$lf" >> $@.xml ; \
|
||||||
|
done ; \
|
||||||
|
echo >> $@.xml ; \
|
||||||
|
echo '</report-collection>' >> $@.xml ; \
|
||||||
|
rm -rf "$$GTESTER_LOGDIR"/ ; \
|
||||||
|
${GTESTER_REPORT} --version 2>/dev/null 1>&2 ; test "$$?" != 0 || ${GTESTER_REPORT} $@.xml >$@.html ; \
|
||||||
|
}
|
||||||
|
.PHONY: test test-report perf-report full-report
|
||||||
|
# run make test as part of make check
|
||||||
|
check-local: test
|
903
NEWS.pre-2.0
@@ -1,903 +0,0 @@
|
|||||||
Overview of Changes in GTK+ 2.0.0
|
|
||||||
=================================
|
|
||||||
|
|
||||||
* GtkTreeView fixes [Jonathan Blandford, Kristian Rietveld, Darin Adler]
|
|
||||||
* Build fixes [Anders Carlsson, Tor Lillqvist, Manish Singh]
|
|
||||||
* Bug fixes. [Thomas Leonard, Owen Taylor]
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 2.0.0 rc1
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
* GtkTreeView fixes [Kristian Rietveld, Jonathan Blandford, Richard Hult]
|
|
||||||
* Text widget fixes [Havoc Pennington]
|
|
||||||
* Efficiency fixes when using Xft [Owen Taylor]
|
|
||||||
* Key handling fixes and other fixes for Win32 [Hans Breuer, Tor Lillqvist]
|
|
||||||
* Try to fix key handling without XKEYBOARD extension [Owen]
|
|
||||||
* Documentation fixes and improvements
|
|
||||||
[Matthias Clasen, Alexey Malyshev, Akira Tagoh, Vitaly Tishkov]
|
|
||||||
* Widget drawing improvements [Soeren Sandmann]
|
|
||||||
* Allow cycling between multiple menu bars with <Control>Tab [Owen]
|
|
||||||
* Try to build libraries with only shared library dependencies on Xft to
|
|
||||||
deal with transition to Xft2 [Owen]
|
|
||||||
* Portability fixes [Owen, Miroslaw Dobrzanski-Neumann]
|
|
||||||
* Don't use red as the default cursor color [Owen]
|
|
||||||
* Bug fixes, bug fixes, bug fixes.
|
|
||||||
|
|
||||||
Other contributors: Darin Adler, Jacob Berkman, Kevin Breit, Hans Breuer,
|
|
||||||
Anders Carlsson, Damon Chaplin, Finlay Dobbie, Jody Goldberg,
|
|
||||||
Andreas J. Guelzow, Scott Guilbeaux, Vlad Harchev, James Henstridge,
|
|
||||||
Tim Janik, Satyajit Kanungo, Charles Kerr, Sergey Kuzminov, Miles Lane,
|
|
||||||
Alexander Larsson, Paolo Maggi, Skip Montaro, Jan Mynarik, Sven Neumann,
|
|
||||||
Padraig O'Briain, Narayani Pattipati, Mark Patton, Havoc Pennington,
|
|
||||||
Ettore Perazzoli, Guillermo S. Romero, Manish Singh, Morten Welinder
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.15
|
|
||||||
==================================
|
|
||||||
|
|
||||||
* New stock and improved icon images
|
|
||||||
[Tuomas Kuosmanen, Jakub Steiner, Anders Carlsson]
|
|
||||||
* Widget drawing improvements for check and radio buttons,
|
|
||||||
spinbuttons [Soeren Sandmann]
|
|
||||||
* Clean up module search path algorithm, use GTK_PATH [Owen Taylor]
|
|
||||||
* Add GtkSetting for font name. [Richard Hestilow]
|
|
||||||
* Much improved key matching code, accelerators work independent
|
|
||||||
of group [Owen]
|
|
||||||
* Make mnemonics work for embedded GtkPlug widgets [Owen]
|
|
||||||
* Keynav improvements for GtkTreeView [Kristian Rietveld]
|
|
||||||
* Fix gtk_tree_view_scroll_to_cell() [Jonathan Blandford]
|
|
||||||
* Rename gtk_tree_view_get_iter_root() and gtk_tree_path_new_root()
|
|
||||||
to gtk_tree_view_get_iter_first() and gtk_tree_path_new_first(),
|
|
||||||
add compatibility macros.
|
|
||||||
* GtkTreeView bug fixes [Kristian, Anders, Damon Chaplin]
|
|
||||||
* GtkTextView bug fixes [Havoc Pennington]
|
|
||||||
* Pad class structures for future binary compatibility [Owen]
|
|
||||||
* Tutorial improvements [Sven Neumann, Matthias Clasen]
|
|
||||||
* Fixes for MULTIPLE selection target [Gregory Merchan, Owen]
|
|
||||||
* Fix problems with initial widget size [Owen]
|
|
||||||
* AIX compilation fixes [Miroslaw Dobrzanski-Neumann]
|
|
||||||
* Win32 fixes [Hans Breuer, Tor Lillqvist]
|
|
||||||
* Miscellaneous bug fixes
|
|
||||||
|
|
||||||
Other contributors: David L. Cooper, Eric Fischer, Jody Goldberg,
|
|
||||||
Satajyit Kanungo, Thomas Leonard, Mark Patton, Manish Singh,
|
|
||||||
Nicolas Setton
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.14
|
|
||||||
==================================
|
|
||||||
|
|
||||||
* Keyboard focus improvements [Owen Taylor]
|
|
||||||
* Code cleanup [Matthias Clasen, Manish Singh, Darin Adler]
|
|
||||||
* Fix accidentally exported variables [Mark McLoughlin]
|
|
||||||
* GtkTreeView fixes [Jonathan Blandford, Kristian Rietveld, John Harper, Darin]
|
|
||||||
* Default to yellow tooltips [Owen]
|
|
||||||
* RC file fixes for reloading, priorities [Owen, Matthias]
|
|
||||||
* GtkMenu behavior improvements and bug fixes [Owen, Arnaud Charlet]
|
|
||||||
* GtkTextView fixes [Havoc Pennington, Daniel Elstner, Dennis Bjorklund]
|
|
||||||
* Improve keynav for paned widgets, tooltips, spin buttons, notebooks,
|
|
||||||
scrolled windows [Soeren Sandmann, Padraig, Owen]
|
|
||||||
* Add Emacs/Default key themes [Owen]
|
|
||||||
* Win32 fixes [Hans Breuer, Tor Lillqvist]
|
|
||||||
* Ethiopic input methods [Daniel Yacob]
|
|
||||||
* Opaque paned window resizing [Soeren]
|
|
||||||
* Tweak table expansion behavior [Tim Janik]
|
|
||||||
* Fix GtkCalendar focus drawing [Bill Haneman]
|
|
||||||
* Allow themeable cursor thickness [Bill]
|
|
||||||
* Start of fixing of tutorial for GTK+-2.0 [Matthias]
|
|
||||||
* Add a ::adjust-bounds signal to GtkRange to allow spreadsheet style
|
|
||||||
scrollbars. [Jody Goldberg]
|
|
||||||
* Add the ability to turn on multiple selection for GtkFileSel [Manish]
|
|
||||||
* Bug fixes
|
|
||||||
|
|
||||||
Other contributors: Jacob Berkman, Padraig O'Briain, Anders Carlsson,
|
|
||||||
Johan Dahlin, Richard Hult, Stefan Kost, Alex Larsson, Thomas Leonard,
|
|
||||||
Paolo Maggi, Alexey Malyshev, Federico Mena Quintero, Skip Montaro,
|
|
||||||
Sven Neumann, Havoc Pennington, Laszlo Peter, Christian Rose, Joe Shaw,
|
|
||||||
Kevin Vandersloot, Morten Welinder, Peter Williams
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.13
|
|
||||||
==================================
|
|
||||||
|
|
||||||
* Tree view fixes. [Kristian Rietveld, Jonathan Blandford, Anders Carlsson]
|
|
||||||
* Tree view support for low-vision themes [Bill Haneman]
|
|
||||||
* Text view bug fixes. [Havoc Pennington]
|
|
||||||
* Win32 fixes and improvements. [Tor Lillqvist, Hans Breuer,
|
|
||||||
Archaeopteryx Software]
|
|
||||||
* Documentation improvements [Matthias Clasen, Havoc Pennington]
|
|
||||||
* Accelerate alpha compositing using RENDER extension if present,
|
|
||||||
and optimize the non-RENDER case a lot. [Owen Taylor]
|
|
||||||
* Add support for "optional keybindings" (action signal returns FALSE) [Owen]
|
|
||||||
* Fixed the infamous changing directory deletes filename bug
|
|
||||||
[Owen and a cast of thousands]
|
|
||||||
* Add mouse cursor hiding for text widgets [Anders Carlsson]
|
|
||||||
* Simple Hangul input module [Yusuke Tabata]
|
|
||||||
* Removed the scary startup warning.
|
|
||||||
* GdkPixbuf pixel handling fixes [Owen, Michael Hore, Jim Cape]
|
|
||||||
* Converted GtkFileSelection and GtkFontSelection to use GtKTreeView widgets
|
|
||||||
instead of the deprecated GtkCList [Owen]
|
|
||||||
* gtkhsv.h was installed by mistake, fixed that. [reported by Ross Burton]
|
|
||||||
* gdk_pixbuf_render_to_drawable() now also handles alpha pixbufs.
|
|
||||||
* Made Gtkimage draw GtkPixmap, GtkImage, GdkPixbuf insensitive, prelighted,
|
|
||||||
etc. [Havoc, Owen]
|
|
||||||
* Marked gtk_item_factory_path_from_widget() G_CONST_RETURN. [Matt Wilson]
|
|
||||||
* gtk_image_menu_item_new_from_stock() now falls back to
|
|
||||||
new_with_mnemonic, for consistency with gtk_button_new_from_stock()
|
|
||||||
[Havoc Pennington]
|
|
||||||
* GdkModifierType is now consistently used for modifier mask parameters
|
|
||||||
[Mark Patton]
|
|
||||||
* gtk_widget_set_accel_path() is now publically exported.
|
|
||||||
|
|
||||||
Other contributors: Darin Adler, Jeffrey Baker, Damon Chaplin, Brian Cameron,
|
|
||||||
Murray Cumming, James Henstridge, Jacob Berkman, Arnaud Charlet, Jeff Franks,
|
|
||||||
Jeff Garzik, Jody Goldberg, Diego Gonzalez, Melvin Hadasht, Raja Harinath,
|
|
||||||
Tim Janik, Mike Kestner, Mathieu Lacage, Alex Larsson, Ryan Lovett,
|
|
||||||
Mark McLoughlin, Sven Neumann, Padraig O'Briain, Xavier Ordoquy, Chris Phelps,
|
|
||||||
Detlef Reichl, Guillermo S. Romero, Federico Mena Quintero, Manish Singh,
|
|
||||||
HideToshi Tajima, Vitaly Tishkov, Jon Trowbridge, Sergey Vlasov.
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.12
|
|
||||||
==================================
|
|
||||||
|
|
||||||
* Fix problems with PNG saving [Michael Natterer]
|
|
||||||
* Cleanups of deprecated usages [Sebastian Wilhelmi]
|
|
||||||
* Win32 fixes [Tor Lillqvist]
|
|
||||||
* Documentation improvements [Matthias Clasen, Havoc Pennington,
|
|
||||||
Vitaly Tishkov]
|
|
||||||
* Frame buffer port fixes [Manish Singh]
|
|
||||||
* GtkTextView bug fixes [Havoc Pennington, Chris Phelps]
|
|
||||||
* Menu behavior improvements [Kristian Rietveld]
|
|
||||||
* Make focus line width configurable, focus color work on
|
|
||||||
dark themes. [Bill Haneman, Owen Taylor]
|
|
||||||
* Add state argument to gtk_paint_focus() [Bill]
|
|
||||||
* Added incremental revalidation to tree view, for better apparent speed
|
|
||||||
[Jonathan Blandford]
|
|
||||||
* Remove useless gtk_tree_view_column_cell_event() [Jonathan]
|
|
||||||
* Display XIM status in a separate window [HideToshi Tajima]
|
|
||||||
* Add GDK_DEBUG=nograbs to disable pointer, keyboard grabs [Jacob Berkman]
|
|
||||||
* Add menu of Unicode control characters to GtkEntry, GtkTextView
|
|
||||||
[Dov Grobgeld, Havoc]
|
|
||||||
* Pass key releases along to input methods [Owen]
|
|
||||||
* Many bug fixes
|
|
||||||
|
|
||||||
Other contributors: Darin Adler, Fabrice Bellet, Chris Blizzard,
|
|
||||||
Hans Breuer, Anders Carlsson, Damon Chaplin, Murray Cumming, Jeff Franks,
|
|
||||||
James Henstridge, Tim Janik, Alex Larsson, George Lebl, Kjartan, Maraas,
|
|
||||||
Sven Neumann, Seth Nickell, Padraig O'Briain, Soeren Sandmann, Manish Singh,
|
|
||||||
Matt Wilson
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.11
|
|
||||||
==================================
|
|
||||||
|
|
||||||
* Massive rework of accelerator API and implementation (Tim Janik)
|
|
||||||
* Major fixes to resizing and redrawing to eliminate hysteresis
|
|
||||||
and optimize. (Owen Taylor, Soeren Sandmann)
|
|
||||||
* Make many widgets NO_WINDOW to improve appearance and reduce
|
|
||||||
drawing overhead (Owen)
|
|
||||||
* Text view fixes (Havoc Pennington)
|
|
||||||
* Make child widgets in GtkTextView work (Havoc)
|
|
||||||
* GtkTreeModelSort fixage (Jonathan Blandford, Kristian Rietveld)
|
|
||||||
* Clean up GtkTreeView drag and drop support (Owen)
|
|
||||||
* Misc tree view fixes and improvements (Jonathan, Kristian, Anders, Matt Wilson)
|
|
||||||
* Add gtk_window_get/set_focus(), gtk_window_set_default() as public
|
|
||||||
functions (Owen, Damian Ivereigh)
|
|
||||||
* Fixes to GtkPlug/GtkSocket (Michael Meeks, Owen)
|
|
||||||
* Change button ordering in standard dialogs to correspond to
|
|
||||||
GNOME usability project proposal (Gregory Merchan)
|
|
||||||
* Add support for context sensitivity in input methods (Owen)
|
|
||||||
* Hook up gtk_im_context_set_use_preedit() (Hidetoshi Tajima)
|
|
||||||
* Fix gdk_window_scroll() and other aspects of big windows (Owen)
|
|
||||||
* Remove need for X connection for class initialization (Jacob Berkman)
|
|
||||||
* Propagate key events to parents of focused widget (Owen)
|
|
||||||
* Don't export normal GTK+ marshalers, export deprecated compat marshalers (Owen)
|
|
||||||
* Many Win32 Fixes and improvements (Hans Breuer, Tor Lillqvist)
|
|
||||||
* Bug and documentation fixing (Matthias Clasen, Anders Carlsson,
|
|
||||||
Jacob Berkman, others.)
|
|
||||||
|
|
||||||
Other Contributors:
|
|
||||||
Darin Adler, Marius Andreiana, Erwann Chenede, Murray Cumming, Janet Davis,
|
|
||||||
Daniel Egger, Daniel Elstner, Jeff Franks, Alex Larsson, George Lebl,
|
|
||||||
Sergey Kuzminov, Eric Lemings, Arkadiusz Miskiewicz, Padraig O'Briain, Sven Neumann,
|
|
||||||
Kristian Rietveld, Nicolas Setton, Manish Singh, Vitaly Tishkov, Sebastian Wilhelmi,
|
|
||||||
Michael Natterer
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.10
|
|
||||||
==================================
|
|
||||||
|
|
||||||
* GtkTextView fixes [Havoc Pennington]
|
|
||||||
* GtkTreeView fixes and improvements [Jonathan Blandford, Kristian,
|
|
||||||
Manish Singh, Joshua Pritikin, Oleg Maiboroda, James Henstridge]
|
|
||||||
* gtkdemo improvements [Kristian Rietveld]
|
|
||||||
* Drag and drop fixes to generic code and widgets
|
|
||||||
[Owen Taylor, Damian Ivereigh]
|
|
||||||
* Documentation improvement [Havoc Pennington, Matthias Clasen]
|
|
||||||
* Spelling fixes [Jacob Berkman]
|
|
||||||
* Move signals to the GtkEditable interface [Kristian]
|
|
||||||
* Further stock image improvements [Jakub Steiner]
|
|
||||||
* Support text chunks for the PGN loader, add gdk_pixbuf_get_option()
|
|
||||||
[Sven Neumann]
|
|
||||||
* Rename gdk_pixbuf_new_from_stream back to new_from_inline [Owen]
|
|
||||||
* Automatically call setlocale(), unless explicitly disabled [Owen]
|
|
||||||
* Property addition to various widgets [Michael Meeks, Owen]
|
|
||||||
* Support building with automake-1.4 [James]
|
|
||||||
* Make GtkRadioButton groups act as a single focus point [Owen]
|
|
||||||
* Move gdk_window_lookup etc. to be cross-platform [Matthias]
|
|
||||||
* Draw spinbuttons variably sized [Kristian]
|
|
||||||
* Separate GdkAtom out from X atoms for compatibility with future
|
|
||||||
multihead changes [Owen]
|
|
||||||
* Require gdk_threads_init() to be explicitly called instead
|
|
||||||
of piggybacking off of g_thread_init(). [Owen]
|
|
||||||
* Improvements to text-view/label/entry popup menus [Damian, Jacob, Owen]
|
|
||||||
* Bug fixes and cleanup [Matthias, others]
|
|
||||||
|
|
||||||
Other Contributors:
|
|
||||||
Mark McLoughin, Mikael Hermansson, Soeren Sandmann, Anders Carlsson,
|
|
||||||
Tim Janik, Murray Cumming, Hidetoshi Tajima, Padraig O'Briain,
|
|
||||||
Hans Breuer, Vitaly Tishkov, Dov Grobgeld
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.9
|
|
||||||
=================================
|
|
||||||
|
|
||||||
* Add editable text cells to GtkTreeView.
|
|
||||||
Keynav, drawing fixes in GtkTreeView [Jonathan Blandford]
|
|
||||||
* Text widget no longer always has a \n in it. [Havoc Pennington]
|
|
||||||
* Text widget bug fixes [Havoc, Dov Grobgeld, Hidetoshi Tajima]
|
|
||||||
* Allow -1 for width/height in gdk_pixbuf_render_*(). [Matthias Clasen]
|
|
||||||
* Minor fix for major resizing problems in recent releases [Owen Taylor]
|
|
||||||
* Restore ability to set _set properties to TRUE for
|
|
||||||
GtkCellRendererText, GtkTextTag [Owen]
|
|
||||||
* Cursor drawing improvements [Owen]
|
|
||||||
* Win32 fixes [Hans Breuer]
|
|
||||||
* Mark various functions as deprecated or private.
|
|
||||||
* Misc bug fixes, portability fixes, and cleanups.
|
|
||||||
|
|
||||||
Other Contributors:
|
|
||||||
Vitaly Tishkov, Christian Rose, Frank Belew, Jeff Franks, Sven Neumann,
|
|
||||||
Kristian Rietveld, Vitaly Tishkov, Joshua N. Pritikin, Matt Wilson,
|
|
||||||
James Henstridge, Detlef Reichl
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.8
|
|
||||||
=================================
|
|
||||||
|
|
||||||
* GtkTreeView and GtkTreeModel API cleanups/improvements [Jrb]
|
|
||||||
* GtkOptionMenu scrollwheel support [Alex]
|
|
||||||
* GtkModule search paths [Owen]
|
|
||||||
* Documenatation updates [Havoc,Jrb]
|
|
||||||
* Major Gdk cleanup [Owen]
|
|
||||||
* Miscellaneous other fixes/cleanups
|
|
||||||
|
|
||||||
Other Contributors:
|
|
||||||
Joshua N Pritikin, Padraig O'Briain, Jakub Steiner, Matthias Clasen,
|
|
||||||
Matt Wilson, James Henstridge
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.7
|
|
||||||
=================================
|
|
||||||
|
|
||||||
* Many Pixbuf (loader) improvements [Matthias Clasen, Soeren Sandmann]
|
|
||||||
* Added publically installed utility gdk-pixbuf-csource to generate
|
|
||||||
inlined pixbufs in C source code [Tim Janik]
|
|
||||||
* Optional movement of button children on press [Soeren, Owen Taylor]
|
|
||||||
* Interactive searching in GtkTreeView [Kristian Rietveld]
|
|
||||||
* Sorting/ordering improvements for GtkTreeView [Kris, Jonathan Blandford]
|
|
||||||
* Animation of expander motion for GtkTreeView [Anders Carlsson]
|
|
||||||
* Lots of misc GtkTreeView fixes and improvements [Jonathan]
|
|
||||||
* New/improved stock icons [Jakub Steiner]
|
|
||||||
* Code and API rework for window resizing [Havoc Pennington]
|
|
||||||
* Converted accel groups to GObject [James Henstridge]
|
|
||||||
* More property support improvements
|
|
||||||
* Add facility for "secondary" buttons in
|
|
||||||
GtkButtonBox/GtkDialog [Gregory Merchan]
|
|
||||||
* Disentangled child visability from MAPPED state [Owen]
|
|
||||||
* Plug/Socket improvements and port to the XEMBED protocol [Owen]
|
|
||||||
* Added priorities for styles in RC files,
|
|
||||||
support multiple parse contents [Owen]
|
|
||||||
* Made GdkVisual and GdkDevice GObjects [Alexander Larsson]
|
|
||||||
* Key binding improvements [Havoc]
|
|
||||||
* Added GtkWidget::event-after signal since normal event handling
|
|
||||||
is now aborted as soon as a handler returned TRUE [Tim]
|
|
||||||
* Dnd fixes and improved icon support [Owen]
|
|
||||||
* Removed GtkPacker widget
|
|
||||||
* Fixing missing paired getters/setters [Kris]
|
|
||||||
* Nuked remaining GtkArg cruft, implemented container/child properties [Tim]
|
|
||||||
* Added window grab groups [Owen]
|
|
||||||
* Many frame buffer improvements [Alex]
|
|
||||||
* Win32 fixes and improvements [Hans Breuer]
|
|
||||||
* Warning fixes [Darin Adler]
|
|
||||||
* Miscellaneous bug and API fixes [Matthias et. al]
|
|
||||||
|
|
||||||
Other Contributors:
|
|
||||||
Joshua N Pritikin, Hidetoshi Tajima, Manish Singh, ERDI Gergo, Jens Finke,
|
|
||||||
Chema Celorio, Lee Mallabone, Vitaly Tishkov, Sebastian Wilhelmi,
|
|
||||||
Nicola Girardi, Sven Neumann, Padraig O'Briain, Michael Natterer,
|
|
||||||
Suresh Chandrasekharan, Jonas Borgström, Jay Cox, Michael Meeks,
|
|
||||||
Mathias Hasselmann, Peter Williams, Thomas Broyer, Kjartan Maraas,
|
|
||||||
Joel Becker, Jeff Franks, Brian Cameron, Skip Montanaro
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.6
|
|
||||||
=================================
|
|
||||||
|
|
||||||
* Properly renders strikethrough text
|
|
||||||
* win32 fixes
|
|
||||||
* Added "scale" property to GtkTextTag and GtkCellRendererText to do
|
|
||||||
relative font scaling
|
|
||||||
* Added "format_value" signal to GtkScale to reformat value text
|
|
||||||
* framebuffer fixes
|
|
||||||
* Property support added to lots of widgets
|
|
||||||
* Many GtkTreeView new features and API/implementation fixes
|
|
||||||
* Lots of new_with_mnemonic() convenience functions
|
|
||||||
* Change GtkImageMenuItem API to be more consistent/useful
|
|
||||||
* Added lots of new stock items/icons
|
|
||||||
* Rewrote GtkRange/GtkScale/GtkScrollbar, includes support for
|
|
||||||
enabling/disabling extra scrollbar stepper arrows in gtkrc so NeXT
|
|
||||||
themes won't need broken hacks
|
|
||||||
* Convenience API for GtkRange similar to the one added to GtkSpinButton
|
|
||||||
a while back
|
|
||||||
* Make menubar/toolbar work properly with xthickness/ythickness of 1 or 0,
|
|
||||||
and move some attributes from program settings to user settings.
|
|
||||||
Allows nice 1-pixel-bevel themes.
|
|
||||||
* Moved ::focus virtual function from GtkContainer to GtkWidget
|
|
||||||
* Plenty of bug fixes
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.5
|
|
||||||
=================================
|
|
||||||
|
|
||||||
* New default theme based on Raleigh theme for 1.2.x.
|
|
||||||
* Dependency on the ATK library added as a step to
|
|
||||||
providing accessibility-enabling interfaces
|
|
||||||
* XEMBED-based GtkPlug/GtkSocket now basically works.
|
|
||||||
* Drag and drop of column headers in GtkTreeView
|
|
||||||
* GtkColorSelector work: hooks for saving and propagating palette, UI tweaks,
|
|
||||||
and API sanitation
|
|
||||||
* Key binding fixes
|
|
||||||
* Configurable padding/spacing in a lot of places
|
|
||||||
* Invisible text in GtkTextView fixed
|
|
||||||
* SHM segments now created with a mode of 0600
|
|
||||||
* Bug fixes
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.4
|
|
||||||
=================================
|
|
||||||
|
|
||||||
* Win32 fixes
|
|
||||||
* GtkTreeView improvements and fixes
|
|
||||||
* Fix glib-2.0.m4
|
|
||||||
* Miscellaneous bug fixes
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.3
|
|
||||||
=================================
|
|
||||||
|
|
||||||
[ 5600 lines of ChangeLog ]
|
|
||||||
|
|
||||||
* API cleanups
|
|
||||||
* Win32 work (Tor, Hans Breuer)
|
|
||||||
* Focus improvements (Owen)
|
|
||||||
* Frame buffer improvements (Alex)
|
|
||||||
* Work on GtkTextView (Havoc)
|
|
||||||
* Much work on GtkTreeView (Jonathan)
|
|
||||||
* Selectable labels (Havoc)
|
|
||||||
* Converted many arguments to properties (Lee Mallabone, John Margaglione)
|
|
||||||
* Add exact regions to GdkExposeEvent, propagate it. (Alex)
|
|
||||||
* Added ability to have resize grips in status bars (etc.) using
|
|
||||||
_NET_WM_MOVERESIZE protocol. (Havoc)
|
|
||||||
* Added mnemnonic mechanism to make setting underline accelerators
|
|
||||||
much easier. (Alex)
|
|
||||||
* Add per-style property mechanism to allow themes to change
|
|
||||||
geometry parameters. (Tim)
|
|
||||||
* Added global settings mechanisms for settings such as double-click
|
|
||||||
time. (Tim, Owen)
|
|
||||||
* Various support functions for new and old WM properties (Havoc, Alex)
|
|
||||||
* Add TRUE-stops-returns for boolean-returning signals (Ron Steinke)
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.2
|
|
||||||
=================================
|
|
||||||
|
|
||||||
GTK Core:
|
|
||||||
|
|
||||||
* New stock-icon and stock-item system. Use themeable pixbufs in
|
|
||||||
dialogs, buttons, etc. [Havoc]
|
|
||||||
* Theme engines reworked to use derivation and new object system. [Owen]
|
|
||||||
* Added GtkClipboard object for simple selection handling. [Owen]
|
|
||||||
* Make GtkEditable an interface, move implementation to GtkOldEditable for
|
|
||||||
compat. [Owen]
|
|
||||||
* Better handling of default directionality. [Robert]
|
|
||||||
* Use GSignal as backend for GtkSignal and other GObject stuff. [Tim]
|
|
||||||
* Move theme engines to GTypePlugin. [Owen]
|
|
||||||
|
|
||||||
GDK:
|
|
||||||
|
|
||||||
* Beginning of implementation of client parts of new window manager spec. [Owen]
|
|
||||||
* Make gdk_drawable_get_image() work with backing store. [Havoc]
|
|
||||||
|
|
||||||
Widgets:
|
|
||||||
|
|
||||||
* New text widget [Havoc]
|
|
||||||
- Adjustable tab handling.
|
|
||||||
- Ability to have scrolling side areas in new text widget for tabs/line numbers.
|
|
||||||
- Many cleanups and small improvements.
|
|
||||||
* Improvements to submenu navigation [Nils Barth/David Santiago] and
|
|
||||||
scrolling menus. [Alex]
|
|
||||||
* Simplification of progress bar API. [Havoc]
|
|
||||||
* Make GtkImage a generic image-display widget. [Havoc]
|
|
||||||
* New GtkTreeView tree widget. Model/view architecture, flexible rendering,
|
|
||||||
large datasets, etc. [Jonathan]
|
|
||||||
* New GtkMessageBox widget for message display. [Havoc]
|
|
||||||
* Allow labels to have contents set from XML-like markup language. [Havoc]
|
|
||||||
* Make dialogs derive from GtkDialog and use stock buttons. [Havoc]
|
|
||||||
|
|
||||||
Internationalization:
|
|
||||||
|
|
||||||
* Proper character set conversion for clipboard/selection. [Owen]
|
|
||||||
* New input method system via loadable modules; support on-the-spot
|
|
||||||
preedit in GtkEntry and new text widget; allow switching input methods
|
|
||||||
on the fly; include modules for XIM and demo Cyrillic-transliteration
|
|
||||||
module. [Owen]
|
|
||||||
* VIQR, Thai, and Inuktitut input methods. [Robert]
|
|
||||||
* Convert po files to UTF-8. [Robert]
|
|
||||||
|
|
||||||
gdk-pixbuf:
|
|
||||||
|
|
||||||
* Full-alpha compositing for gdk-pixbuf on drawable. [Havoc]
|
|
||||||
* Add simple saving to gdk-pixbuf. [David Welton/Havoc]
|
|
||||||
* Add improved error handling with GError to gdk-pixbuf. [Havoc]
|
|
||||||
|
|
||||||
Ports:
|
|
||||||
|
|
||||||
* Much work on Win32 Port. [Tor/Hans]
|
|
||||||
* Much work on Linux-FB Port. [Elliot/Alex]
|
|
||||||
|
|
||||||
Misc:
|
|
||||||
|
|
||||||
* Start of new gtk-demo demo program. [Owen/Jonathan]
|
|
||||||
* Bug fixes and more bug fixes.
|
|
||||||
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.3.1:
|
|
||||||
|
|
||||||
* GTK+ now uses the Pango library for text manipulation. All
|
|
||||||
strings in GTK+ now are in Unicode, languages written
|
|
||||||
from right-to-left, and complex-text languages are now supported.
|
|
||||||
* The gdk-pixbuf library for image loading and manipulation is
|
|
||||||
has been integrated with GTK+.
|
|
||||||
* The GTK+ object system has mostly been moved to GLib, separating
|
|
||||||
it from the GUI code. Many significant enhancements have been
|
|
||||||
made as part of this.
|
|
||||||
* A new text widget is now included. This started as a port
|
|
||||||
of the Tk text widget, and includes such features of the Tk
|
|
||||||
text widget as tags, marks, and unicode text support. It
|
|
||||||
has been enhanced to support model-view operation and the
|
|
||||||
full power of Pango.
|
|
||||||
* The GDK library has been extensively revised to support multiple
|
|
||||||
windowing systems. The only fully functional backend in 1.3.1
|
|
||||||
is the X11 backend, however, ports to Win32, Linux-framebuffer,
|
|
||||||
Nano-X, BeOS, and MacOS exist in various states of completion,
|
|
||||||
and at least some of these will be finished and integrated in
|
|
||||||
before the final GTK+-2.0 release.
|
|
||||||
* 32-bit coordinates are now supported throughout GDK and GTK+
|
|
||||||
(they are emulated where not supported by the windowing system.)
|
|
||||||
* Many minor bug fixes and enhancements. Incompatible changes
|
|
||||||
are documented in docs/Changes-2.0.txt
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.2.8:
|
|
||||||
|
|
||||||
* GNU Make 3.79 bug workaround
|
|
||||||
* FAQ and tutorial updates and improvements
|
|
||||||
* Miscellaneous bug fixes: CList, Calendar, rc-files, FontSelection
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.2.7:
|
|
||||||
|
|
||||||
* More header cleanups.
|
|
||||||
* Fixed activation bug for insensitive widgets.
|
|
||||||
* Locale fixes to RC file parsing code.
|
|
||||||
* Miscellaneous bugfixes for Item Factory, CList, CTree, X Selections,
|
|
||||||
HScale, VScale, Pixmap, Viewport, OptionMenu, Entry and Notebook.
|
|
||||||
* Upgrade to libtool 1.3.4.
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.2.6:
|
|
||||||
|
|
||||||
* container queue_resize fixes
|
|
||||||
* gtk[vh]scale: minor fixups
|
|
||||||
* rename idle to idle_id in testgtk to avoid conflicts with
|
|
||||||
broken libs
|
|
||||||
* More consistent naming of gtkrc files
|
|
||||||
* Added language support: ro, uk
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.2.5:
|
|
||||||
|
|
||||||
* more GtkCTree and GtkWindow bug fixes.
|
|
||||||
* more redraw/resize queue fixes, better expose event
|
|
||||||
discarding code.
|
|
||||||
* more miscellaneous bugs fixed
|
|
||||||
* new configure.in option --disable-rebuilds to completely disable
|
|
||||||
rebuilds of autogenerated sources.
|
|
||||||
* check for 5.002 now, to avoid failing autogeneration build rules due
|
|
||||||
to old perl versions.
|
|
||||||
* fonts (and fontsets) are cached now.
|
|
||||||
* more autogeneration make rules and dependency fixups, we should be
|
|
||||||
save with autogeneration up to make -j12 now ;)
|
|
||||||
* new window position GTK_WIN_POS_CENTER_ALWAYS, which will recenter the
|
|
||||||
GtkWindow on every size change.
|
|
||||||
* major rework of window manager hints handling code, fixed a bunch of
|
|
||||||
races with the new resizing code.
|
|
||||||
* the new wm hints and resizing code is absolutely perfect and bug free now,
|
|
||||||
it only lacks testing ;)
|
|
||||||
* fixed up various rc style memory problems.
|
|
||||||
* gtk_widget_modify_style() now properly changes the style of realized widgets
|
|
||||||
and references the style passed into it. if people worked around this bug,
|
|
||||||
this will introduce a slight memory leak in their code.
|
|
||||||
The code should typically look like:
|
|
||||||
GtkRcStyle *rc_style = gtk_rc_style_new ();
|
|
||||||
[...]
|
|
||||||
gtk_widget_modify_style (widget, rc_style);
|
|
||||||
gtk_rc_style_unref (rc_style);
|
|
||||||
* fix problems with positioning menus offscreen.
|
|
||||||
* GtkText fixes for some crashes and drawing errors.
|
|
||||||
* Better handling for unexpected window destroys in GDK and GTK+.
|
|
||||||
This should make it possible to use a GtkPlug and catch the
|
|
||||||
case where its parent socket is randomly killed.
|
|
||||||
* FAQ updates.
|
|
||||||
* FileSelection i18n patches, RadioButton fixups.
|
|
||||||
* many translation improvements.
|
|
||||||
* miscellaneous other bugs fixed.
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.2.4:
|
|
||||||
|
|
||||||
* DnD improvements (drags can be canceled with Esc now).
|
|
||||||
* suppressed configure event reordering in Gdk.
|
|
||||||
* rewrite of Gtk's configure event handling.
|
|
||||||
* major improvements for the object argument system (Elena Devdariani).
|
|
||||||
* major bugfixes for threading, GtkNotebook, GtkItemFactory, GtkCList and
|
|
||||||
GtkCTree.
|
|
||||||
* tutorial/FAQ updates, new file generation.txt on autogenerated sources.
|
|
||||||
* configure's --with-glib= is "officially" unsupported.
|
|
||||||
* upgrade to libtool 1.3.3.
|
|
||||||
* various buglets fixed.
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.2.3:
|
|
||||||
|
|
||||||
* Upgrade to libtool 1.3
|
|
||||||
* Check for dgettext (for systems with old versions of GNU Gettext)
|
|
||||||
* Many bug fixes (see ChangeLog for details)
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.2.2:
|
|
||||||
|
|
||||||
* Improved Dnd behaviour with Motif applications.
|
|
||||||
* Bug fixes for the Gtk selection code.
|
|
||||||
* Minor bug fixes to the Gdk Atom cache and Dnd code (with --display option).
|
|
||||||
* Bug fixes and leak plugs for the Gdk IM code.
|
|
||||||
* Added gtk_object_get() facility to retrieve object arguments easily.
|
|
||||||
The var args list expects ("arg-name", &value) pairs.
|
|
||||||
* Fixed mapping for GdkInputCondition<->GIOCondition, this should fix
|
|
||||||
problems where closed pipes were no longer signaling GDK_INPUT_READ on
|
|
||||||
systems with a native poll().
|
|
||||||
* Some cleanups to GtkLabel's memory allocation code (shouldn't leak memory
|
|
||||||
anymore).
|
|
||||||
* We don't attempt to lookup xpm color "None" anymore, this should prevent
|
|
||||||
eXodus (commercial X windows server) from popping up a color dialog every
|
|
||||||
time a transparent pixmap is created.
|
|
||||||
* Fixed bug where Gtk timeout/idle handlers would execute without the global
|
|
||||||
Gdk lock being held.
|
|
||||||
* Other minor bug fixes.
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.2.1:
|
|
||||||
|
|
||||||
* Many Bug fixes have been applied to the menu and accelerator code.
|
|
||||||
* GtkItemFactory can "adopt" foreign menu items now and manage their
|
|
||||||
accelerator installation. This is often required to get GtkItemFactory
|
|
||||||
like accelerator propagation between different windows with the same
|
|
||||||
menu hierarchy and for centralized parsing and saving of accelerators.
|
|
||||||
* GtkCList/GtkCTree buttons should always display correctly now.
|
|
||||||
* Miscellaneous other bug fixes.
|
|
||||||
|
|
||||||
What's New in GTK+ 1.2.0 (since 1.0.x):
|
|
||||||
|
|
||||||
* New widgets: GtkFontSelector, GtkPacker, GtkItemFactory, GtkCTree,
|
|
||||||
GtkInvisible, GtkCalendar, GtkLayout, GtkPlug, GtkSocket
|
|
||||||
* Many new features and robustness for existing widgets
|
|
||||||
* Theme support
|
|
||||||
* New DND implementation
|
|
||||||
* Internationalization of standard dialogs
|
|
||||||
* New key binding system
|
|
||||||
* Tearoff menus and menu accelerators
|
|
||||||
* Wide character support for entry and text
|
|
||||||
* Resizing code has been overhauled
|
|
||||||
* Queued redraws of partial areas
|
|
||||||
* Far better support for object arguments
|
|
||||||
* Speed optimizations
|
|
||||||
* Runtime loading of dynamic modules
|
|
||||||
* Support for GLib log domains
|
|
||||||
* Tutorial improvements
|
|
||||||
* A bug fix or two
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.1.16:
|
|
||||||
|
|
||||||
* Major fixes and improvements for handlebox
|
|
||||||
* A change to the way widget->requisition works. Now,
|
|
||||||
widget->requisition is always what the widget requested,
|
|
||||||
unmodified by the usize. See Changes-1.2.txt for details.
|
|
||||||
This correct various bugs with gtk_widget_set_usize().
|
|
||||||
* Fixes for XIM on X11R5 systems
|
|
||||||
* Don't allow cut-and-paste of text in password-style entries
|
|
||||||
* --enable-debug is now on by default for the development release.
|
|
||||||
(When compiling for "production", use --enable-debug=minimum)
|
|
||||||
* Handle systems where Helvetica is not present more gracefully
|
|
||||||
* Fixes for memory leaks
|
|
||||||
* CList and CTree fixes
|
|
||||||
* Bug fixes for drawing problems.
|
|
||||||
* Miscellaneous bug fixes to GtkLabel, GtkCList, GtkCTree,
|
|
||||||
GtkColorsel, Focusing, DND
|
|
||||||
* Tutorial improvements
|
|
||||||
|
|
||||||
Overview of Changes in GTK+ 1.1.15:
|
|
||||||
|
|
||||||
* Tutorial Updates
|
|
||||||
* Added --libs gthread to gtk-config
|
|
||||||
* Bug fixes
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.14:
|
|
||||||
|
|
||||||
* Additions to docs/Changes-1.2.txt
|
|
||||||
* Just warn when loading theme engine fails
|
|
||||||
* CLAMP GtkScale digits to a meaningful range
|
|
||||||
* GTK_LOCALDIR is now defined in a better fashion
|
|
||||||
* New functions (feature freeze, we know...):
|
|
||||||
gtk_menu_set_title()
|
|
||||||
gtk_toggle_button_get_active()
|
|
||||||
* Some locale fixups in gtkrc code
|
|
||||||
* Fixes to make gtk_radio_button_set_group() keep only
|
|
||||||
one radio button in the group active
|
|
||||||
* Foreign windows are now always treated as viewable; this fixes
|
|
||||||
a problem where updating didn't occur properly in GtkPlug
|
|
||||||
* DND fixes for 64 bit architectures, and for specifying operations
|
|
||||||
with modifier keys.
|
|
||||||
* Major revisions to GtkLayout: avoid having to create window
|
|
||||||
for NO_WINDOW children, adjust allocations of children as
|
|
||||||
scrolled so queued draws work, and a resize is queued instead
|
|
||||||
of allocating directly in a put() or move()
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.13:
|
|
||||||
|
|
||||||
* Dnd and selection bug fixes and memory purification.
|
|
||||||
* Widget sensitivity fixups.
|
|
||||||
* Tooltips windows are now named "gtk-tooltips" so rc file rules
|
|
||||||
can match tooltips windows. Fixed interaction of tooltips and NO_WINDOW
|
|
||||||
widgets.
|
|
||||||
* Spin buttons now update their values upon value retrieval.
|
|
||||||
* Overhaul of the resizing vs. redrawing logic to reduce redrawing needs
|
|
||||||
a lot. Gtk makes full use of the draw_area coalescing code now, which
|
|
||||||
got minorly improved as well.
|
|
||||||
* Containers map their Gdk windows after their children now to reduce
|
|
||||||
expose event generation.
|
|
||||||
* Gdk event queue fixups, this solves the double-click problems people were
|
|
||||||
recently having.
|
|
||||||
* Account for the fact that GSource's are only properly reentrant from
|
|
||||||
within dispatch(), thus we don't do Gdk event processing from within
|
|
||||||
check() or prepare() anymore.
|
|
||||||
* Rc files feature a bg_pixmap value of "<none>" now.
|
|
||||||
* Improved session management support in Gdk.
|
|
||||||
* Automatic disabling of NLS if no gettext is found should work now.
|
|
||||||
* Removed deprecated functions, docs/Changes-1.2.txt gives an overview.
|
|
||||||
* Gtk+ development now requires GNU autoconf 2.13, GNU automake 1.4
|
|
||||||
and GNU libtool 1.2d.
|
|
||||||
* More bug fixes all over the place.
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.12:
|
|
||||||
|
|
||||||
* Korean translation added
|
|
||||||
* Fixed memory leaks
|
|
||||||
* A few other bug fixes
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.11:
|
|
||||||
|
|
||||||
* Dutch, Japanese, Swedish, Polish, and Norwegian translations
|
|
||||||
* Removed deprecated _interp variants: gtk_container_foreach_interp,
|
|
||||||
gtk_idle_add_interp, gtk_timeout_add_interp, gtk_signal_connect_interp
|
|
||||||
* Lots of cast corrections
|
|
||||||
* Many fixes
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.9:
|
|
||||||
|
|
||||||
* Check for broken glibc 2.0 mb functions and avoid them
|
|
||||||
* Label and Entry display fixes
|
|
||||||
* Move main thread back to GDK, for locking when translating events
|
|
||||||
* Bug fixes
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.8:
|
|
||||||
|
|
||||||
* Added support for gettext and the localization of the standard
|
|
||||||
dialogs.
|
|
||||||
* Added line-wrapping for the label, and JUSTIFY_FILL
|
|
||||||
* Support reordering via drag and drop in CList and CTree.
|
|
||||||
* Replaced GtkDrawWindow widget with a GTK_USER_DRAW flag
|
|
||||||
* Extended gtkpaned API to support minimum sizes and proportional
|
|
||||||
resizing.
|
|
||||||
* Changed the handling of shared memory segments so as to
|
|
||||||
remove the need for GTK+ to set up signal handlers.
|
|
||||||
* Re-implemented event loop in terms of the event loop
|
|
||||||
that has been added to GLib 1.1.8
|
|
||||||
* Added 'grab_focus' signal to allow keyboard accelerators
|
|
||||||
for entries.
|
|
||||||
* Load locale specific RC files if present.
|
|
||||||
* Bug fixes.
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.7:
|
|
||||||
|
|
||||||
* Fixed memory mis-allocation in default files code
|
|
||||||
* Various event handling fixes
|
|
||||||
* Wide character support for entry and text
|
|
||||||
* Destroy widgets _after_ propagating unrealize signals through
|
|
||||||
widget hierarchy
|
|
||||||
* Only build XIM-support if available
|
|
||||||
* Tutorial and examples updates
|
|
||||||
* Added gtk_drag_source_unset()
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.6:
|
|
||||||
|
|
||||||
* The signal system now features emission hooks with special semantics,
|
|
||||||
refer to the ChangeLog for this.
|
|
||||||
* Minor? speedups and memory reductions to the emission handling of the
|
|
||||||
signal system.
|
|
||||||
* _interp() function variants are deprecated now. the corresponding *_full()
|
|
||||||
variants are provided for a long time now.
|
|
||||||
* Dnd abort timeout increased to 10 minutes.
|
|
||||||
* GtkScrolledWindow inherits from GtkBin now.
|
|
||||||
* GTK_POLICY_NEVER is implemented for scrolled windows now.
|
|
||||||
* Lots of API clean ups.
|
|
||||||
* Incremental freezing abilities.
|
|
||||||
* Integrated widgets from the GNOME tree: GtkLayout, GtkPlug and GtkSocket.
|
|
||||||
* New window functions for transient relationship, default size, and
|
|
||||||
geometry hints
|
|
||||||
* Default rc files are now read in (<sysconfdir/etc/gtkrc and ~/.gtkrc)
|
|
||||||
GTK_RC_FILES environment variable and functions are provided to configure
|
|
||||||
this behavior
|
|
||||||
* Read doc/Changes-1.2.txt to properly adapt your code.
|
|
||||||
* Bug Fixes.
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.5:
|
|
||||||
|
|
||||||
* Theme integration
|
|
||||||
* Widget style modification is now handled through GtkRcStyles
|
|
||||||
* GtkPixmaps now grey out pixmaps when insensitive
|
|
||||||
* Notebook enhancements
|
|
||||||
* Shadow configurability for menubars and handleboxes
|
|
||||||
* DND enhancements
|
|
||||||
* gtkfilesel now supports automounters better
|
|
||||||
* Implementation of expose compression
|
|
||||||
* Queued redraws of partial areas
|
|
||||||
* Scrolledwindow (+Viewport) source incompatibilities, children that are added
|
|
||||||
to a scrolled window don't get an automatic viewport anymore. a convenience
|
|
||||||
function gtk_scrolled_window_add_with_viewport() is supplied for this task
|
|
||||||
* Deprecated functions will now issue a message, informing the programmer about
|
|
||||||
the use of this function. These functions will get removed in future versions
|
|
||||||
* Non-functional functions got removed entirely
|
|
||||||
* gtk_widget_new() and gtk_object_new() will now auto-construct new objects.
|
|
||||||
A new function gtk_object_default_construct() is provided now which should
|
|
||||||
be called after every gtk_type_new() to perform the auto-construction
|
|
||||||
* Improved argument support of several widgets
|
|
||||||
* Bug Fixes
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.3:
|
|
||||||
|
|
||||||
* GtkCList/GtkCTree now have the ability to:
|
|
||||||
- hide/show individual columns
|
|
||||||
- disable/enable column resizing
|
|
||||||
- set min and max for column widths
|
|
||||||
- set expander style of the ctree
|
|
||||||
- set/get row and cell styles
|
|
||||||
- set spacing between tree expander and cell contents in ctree
|
|
||||||
- toggle auto_resize for columns
|
|
||||||
* Must enhanced DND support, removed old DND code
|
|
||||||
* Idle functions are now implemented via GHook, giving a slight speed
|
|
||||||
improvement
|
|
||||||
* An environment variable GTK_MODULES which takes a colon separated
|
|
||||||
list of module names GTK+ will now automatically load at gtk_init() startup
|
|
||||||
* GtkFontSel now has support for an extra 'base' filter
|
|
||||||
* New function gdk_window_set_root_origin to get the real geometry taking
|
|
||||||
into account window manager offsets
|
|
||||||
* New function gtk_text_set_line_wrap to toggle line wrapping
|
|
||||||
* New function gtk_widget_add_events which safely adds additional
|
|
||||||
events to a widget's event mask
|
|
||||||
* New function gdk_event_get_time to get the timestamp from a generic
|
|
||||||
event
|
|
||||||
* New widget GtkCalendar
|
|
||||||
* New widget GtkInvisible - InputOnly offscreen windows used for reliable
|
|
||||||
pointer grabs and selection handling in DND code
|
|
||||||
* New functions gtk_object_remove_no_notify[_by_id] to remove a certain
|
|
||||||
data portion without invocation of its destroy notifier
|
|
||||||
* gtk_spin_button_construct is now deprecated, use gtk_spin_button_configure
|
|
||||||
instead
|
|
||||||
* gtk_clist_set_border is now deprecated, use gtk_clist_set_shadow_type
|
|
||||||
instead
|
|
||||||
* Removed functions gtk_object_set_data_destroy[_by_id]
|
|
||||||
* Documentation additions/updates
|
|
||||||
* HTML and plain text files are now included in the distribution
|
|
||||||
* Bug fixes, typeness corrections, and general fixups
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.2:
|
|
||||||
|
|
||||||
* Gtk+ is now featuring runtime loading of dynamic modules via the
|
|
||||||
--gtk-modules= command line switch. such modules have to export a
|
|
||||||
G_MODULE_EXPORT void gtk_module_init (gint *argc, gchar ***argv);
|
|
||||||
function which will be invoked to initialize the module. since such
|
|
||||||
modules may create new widget types, they are always resident.
|
|
||||||
* The tutorial has been updated again.
|
|
||||||
* Changes to menus including tearoff menus and accelerators.
|
|
||||||
* Better support for modal dialogs.
|
|
||||||
* Removed CAN_FOCUS by default from scrollbars and button children of toolbar.
|
|
||||||
* More improvements and fixes for GtkCList and GtkCTree (i.e. row sorting).
|
|
||||||
* GtkCTree rows can be unselectable now.
|
|
||||||
* The GtkCTree API has undergone major renames (see ChangeLog entry from Lars
|
|
||||||
Hamann on Tue Aug 18 00:29:13 1998).
|
|
||||||
* A bunch of varargs functions changed to get va_lists working on systems that
|
|
||||||
implement va_lists as arrays.
|
|
||||||
* Improvements to the gdkrgb code.
|
|
||||||
* Improvements to Gdk color handling so we greatly reduce server traffic and
|
|
||||||
don't leak colors anymore.
|
|
||||||
* Improved internal widget tree iterators (the GtkContainer::foreach signal
|
|
||||||
vanished because of this).
|
|
||||||
* Option menus can have the keyboard focus now.
|
|
||||||
* More fixups to the text widget.
|
|
||||||
* GtkFileSelection should behave much more nicely in combination with AFS now.
|
|
||||||
* Support for label underlining.
|
|
||||||
* Support for GLib 1.1.3 log domains.
|
|
||||||
* Documentation improvements.
|
|
||||||
* Configuration fixes on various platforms.
|
|
||||||
* Miscellaneous fixes to XInput support.
|
|
||||||
* Build with shared library dependencies on Linux
|
|
||||||
* Fix for a major bug in the type systems memory allocation code that could
|
|
||||||
cause random crashes.
|
|
||||||
* Libtool update to version 1.2b.
|
|
||||||
* Lots of bugfixes and cleanups again ;)
|
|
||||||
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.1:
|
|
||||||
|
|
||||||
* Tutorial updates and additions.
|
|
||||||
* Key binding support for GtkListItems and GtkList.
|
|
||||||
* Extended selection mode and autoscrolling for GtkLists.
|
|
||||||
* A GtkCtree now operates on GtkCTreeNode* structures rather than GList*.
|
|
||||||
* GtkCTreeNodes can now be created from GNode trees.
|
|
||||||
* Bug fixes for GtkNotebook, GtkCList, GtkCombo and GdkWindow reparentation.
|
|
||||||
|
|
||||||
|
|
||||||
What is new in GTK+ 1.1.0:
|
|
||||||
|
|
||||||
* New widget GtkFontSelector.
|
|
||||||
* New featureful progress bar.
|
|
||||||
* New container widget GtkPacker.
|
|
||||||
* New object GtkItemFactory, GtkMenuFactory is deprecated.
|
|
||||||
* New key binding system, configurable via rcfiles, similar to styles.
|
|
||||||
* New widget GtkCTree with drag selections and keyboard movement and
|
|
||||||
and horizontal scrolling. Features also implemented for GtkCList.
|
|
||||||
* Significant speedups to widget creation and destruction through caching
|
|
||||||
colormap and visual queries to the XServer.
|
|
||||||
* Speedups for type creation and especially gtk_type_is_a() checks.
|
|
||||||
* Speedups in signal lookup, creation and emissions and connection handling.
|
|
||||||
* Minor speedups with object data allocation and destruction.
|
|
||||||
* Additions to the signal handling API (e.g. *_emitv).
|
|
||||||
* Support for rc-file reparsing.
|
|
||||||
* Resizing logic is now implemented on container widget basis, rather than
|
|
||||||
for toplevel GtkWindows only.
|
|
||||||
* Buttons support relief styles now.
|
|
||||||
* Some widgets are now allocated through memchunks to behave more memory wise.
|
|
||||||
* Newly included file gtkfeatures.h which defines compatibility macros to
|
|
||||||
test for certain API features upon program compilation.
|
|
||||||
* Child arguments support for container widgets.
|
|
||||||
* Far better support for object arguments, revamp of the underlying
|
|
||||||
mechanism for speed and reusability. Child/object arguments don't
|
|
||||||
need to be preceded by the "GtkType::" portion anymore.
|
|
||||||
* Removed GtkAcceleratorTable in favour of GtkAccelGroup, accelerator display
|
|
||||||
is now performed by a new widget GtkAccelLabel.
|
|
||||||
* Overhaul of the resizing code. Resizing behaviour can now be specified
|
|
||||||
on GtkContainer basis, so the underlying algorithm isn't only available
|
|
||||||
for GtkWindows.
|
|
||||||
* GtkTables are now fully resizable.
|
|
||||||
* The GtkType system now supports an additional base class initialization
|
|
||||||
function.
|
|
||||||
* GtkStyles and key bindings can now be looked up depending on the base
|
|
||||||
types of a widget, through a new keyword `class' in rc files.
|
|
||||||
* GtkButton derives from GtkBin (finally).
|
|
||||||
* More descriptive error messages on rc parsing.
|
|
||||||
* Runtime information is available to query enum/flag definition values.
|
|
||||||
* Upgrade to libtool-1.2
|
|
||||||
* Legions of bug fixes, memory leaks, segfaults, of-by-something errors...
|
|
||||||
including those that already went into the 1.0.x branch.
|
|
||||||
* A big bunch of features and cosmetic fixups that just got lost in
|
|
||||||
the masses of changesonfigure problem when cross-compiling
|
|
6951
NEWS.pre-3.0
72
README.commits
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
GTK+ is part of the GNOME git repository. At the current time, any
|
||||||
|
person with write access to the GNOME repository, can make changes to
|
||||||
|
GTK+. This is a good thing, in that it encourages many people to work
|
||||||
|
on GTK+, and progress can be made quickly. However, GTK+ is a fairly
|
||||||
|
large and complicated package that many other things depend on, so to
|
||||||
|
avoid unnecessary breakage, and to take advantage of the knowledge
|
||||||
|
about GTK+ that has been built up over the years, we'd like to ask
|
||||||
|
people committing to GTK+ to follow a few rules:
|
||||||
|
|
||||||
|
0) Ask first. If your changes are major, or could possibly break existing
|
||||||
|
code, you should always ask. If your change is minor and you've
|
||||||
|
been working on GTK+ for a while it probably isn't necessary
|
||||||
|
to ask. But when in doubt, ask. Even if your change is correct,
|
||||||
|
somebody may know a better way to do things.
|
||||||
|
|
||||||
|
If you are making changes to GTK+, you should be subscribed
|
||||||
|
to gtk-devel-list@gnome.org. (Subscription address:
|
||||||
|
gtk-devel-list-request@gnome.org.) This is a good place to ask
|
||||||
|
about intended changes.
|
||||||
|
|
||||||
|
#gtk+ on GIMPNet (irc.gimp.org, irc.us.gimp.org, irc.eu.gimp.org, ...)
|
||||||
|
is also a good place to find GTK+ developers to discuss changes with,
|
||||||
|
however, email to gtk-devel-list is the most certain and preferred
|
||||||
|
method.
|
||||||
|
|
||||||
|
1) Ask _first_.
|
||||||
|
|
||||||
|
2) With git, we no longer maintain a ChangeLog file, but you are expected
|
||||||
|
to produce a meaningful commit message. Changes without a sufficient
|
||||||
|
commit message will be reverted. See below for the expected format
|
||||||
|
of commit messages.
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
* When developing larger features or complicated bug fixes, it is
|
||||||
|
advisable to work in a branch in your own cloned GTK+ repository.
|
||||||
|
You may even consider making your repository publically available
|
||||||
|
so that others can easily test and review your changes.
|
||||||
|
|
||||||
|
* The expected format for git commit messages is as follows:
|
||||||
|
|
||||||
|
=== begin example commit ===
|
||||||
|
Short explanation of the commit
|
||||||
|
|
||||||
|
Longer explanation explaining exactly what's changed, whether any
|
||||||
|
external or private interfaces changed, what bugs were fixed (with bug
|
||||||
|
tracker reference if applicable) and so forth. Be concise but not too brief.
|
||||||
|
=== end example commit ===
|
||||||
|
|
||||||
|
- Always add a brief description of the commit to the _first_ line of
|
||||||
|
the commit and terminate by two newlines (it will work without the
|
||||||
|
second newline, but that is not nice for the interfaces).
|
||||||
|
|
||||||
|
- First line (the brief description) must only be one sentence and
|
||||||
|
should start with a capital letter unless it starts with a lowercase
|
||||||
|
symbol or identifier. Don't use a trailing period either. Don't exceed
|
||||||
|
72 characters.
|
||||||
|
|
||||||
|
- The main description (the body) is normal prose and should use normal
|
||||||
|
punctuation and capital letters where appropriate. Normally, for patches
|
||||||
|
sent to a mailing list it's copied from there.
|
||||||
|
|
||||||
|
- When committing code on behalf of others use the --author option, e.g.
|
||||||
|
git commit -a --author "Joe Coder <joe@coder.org>" and --signoff.
|
||||||
|
|
||||||
|
|
||||||
|
Owen Taylor
|
||||||
|
13 Aug 1998
|
||||||
|
17 Apr 2001
|
||||||
|
|
||||||
|
Matthias Clasen
|
||||||
|
31 Mar 2009
|
426
README.in
Normal file
@@ -0,0 +1,426 @@
|
|||||||
|
General Information
|
||||||
|
===================
|
||||||
|
|
||||||
|
This is GTK+ version @GTK_VERSION@. GTK+ is a multi-platform toolkit for
|
||||||
|
creating graphical user interfaces. Offering a complete set of widgets,
|
||||||
|
GTK+ is suitable for projects ranging from small one-off projects to
|
||||||
|
complete application suites.
|
||||||
|
|
||||||
|
GTK+ is free software and part of the GNU Project. However, the
|
||||||
|
licensing terms for GTK+, the GNU LGPL, allow it to be used by all
|
||||||
|
developers, including those developing proprietary software, without any
|
||||||
|
license fees or royalties.
|
||||||
|
|
||||||
|
The official ftp site is:
|
||||||
|
ftp://ftp.gtk.org/pub/gtk
|
||||||
|
|
||||||
|
The official web site is:
|
||||||
|
http://www.gtk.org/
|
||||||
|
|
||||||
|
Information about mailing lists can be found at
|
||||||
|
http://www.gtk.org/mailinglists.html
|
||||||
|
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
See the file 'INSTALL'
|
||||||
|
|
||||||
|
|
||||||
|
Release notes for 2.16
|
||||||
|
======================
|
||||||
|
|
||||||
|
* Password entries now display a caps-lock warning. This can be turned off
|
||||||
|
with the caps-lock-warning property.
|
||||||
|
|
||||||
|
* Various orientation-related functions have been deprecated in favour
|
||||||
|
of the new GtkOrientable interface: gtk_scale_button_get_orientation,
|
||||||
|
gtk_scale_button_set_orientation, gtk_toolbar_set_orientation.
|
||||||
|
|
||||||
|
* The action-proxy interaction has been changed. Widgets that operate as
|
||||||
|
proxies have to implement the GtkActivatable interface now. GtkActivatable
|
||||||
|
implementation are responsible for syncing their appearance with the
|
||||||
|
action and for activating the action. All GTK+ widgets that are commonly
|
||||||
|
used as proxies implement the GtkActivatable interface.
|
||||||
|
|
||||||
|
* The handling of keyboard shortcuts has been changed, to help with a
|
||||||
|
longstanding complaint about the way GTK+ handles multiple layouts. GTK+
|
||||||
|
now only uses keys from groups other than the current group if they are
|
||||||
|
not present in the current group.
|
||||||
|
|
||||||
|
Release notes for 2.14
|
||||||
|
======================
|
||||||
|
|
||||||
|
* gtkitemfactory.h is now completely deprecated.
|
||||||
|
As gtkactiongroup.h and gtkstock.h no longer include the gtkitemfactory.h
|
||||||
|
header, this might break application using gtk_item_factory_* symbols
|
||||||
|
without including gtkitemfactory.h - even though this behaviour has never
|
||||||
|
been supported in the first place.
|
||||||
|
|
||||||
|
* The GtkFileSystem semi-private interface has been removed.
|
||||||
|
The GTK+ filechooser implementation now uses GIO directly, which has
|
||||||
|
rendered external filesystem implementations unnecessary. Consequently,
|
||||||
|
the GtkFileSystem interface is no longer available, nor the filechooser
|
||||||
|
will load any GtkFileSystem implementation.
|
||||||
|
|
||||||
|
* GtkComboBox now renders the popdown button insensitive when
|
||||||
|
the model is empty. Applications which want to populate the list
|
||||||
|
only before displaying it can set gtk_combo_box_set_button_sensitivity
|
||||||
|
to GTK_SENSITIVITY_ON, so that the button is always sensitive or
|
||||||
|
GTK_SENSITIVITY_OFF to make it insensitive respectively.
|
||||||
|
|
||||||
|
* In the early 2.14.x releases, GtkAdjustment was changed to enforce
|
||||||
|
that values are restricted to the range [lower, upper - page_size].
|
||||||
|
This has always been the documented behaviour, and the recommended
|
||||||
|
practice is to set page_size to 0 when using adjustments for simple
|
||||||
|
scalar values, like in a slider or spin button.
|
||||||
|
Due to the large number of applications that are affected by this
|
||||||
|
change, the behaviour has been reverted to the old behaviour in
|
||||||
|
2.14.3, with an explicit warning that this change will be
|
||||||
|
reintroduced in 2.90.
|
||||||
|
|
||||||
|
* gdk-pixbuf will use GIO for mime type detection if possible. For
|
||||||
|
this to work, shared-mime-info needs to be installed and XDG_DATA_DIRS
|
||||||
|
set accordingly at configure time. Otherwise, gdk-pixbuf falls
|
||||||
|
back to its built-in sniffing implementation.
|
||||||
|
|
||||||
|
Release notes for 2.12
|
||||||
|
======================
|
||||||
|
|
||||||
|
* gtk_about_dialog_get/set_name() were deprecated in favour of
|
||||||
|
gtk_about_dialog_get/set_program_name(), the GtkAboutDialog now uses the
|
||||||
|
"program-name" property instead of the conflicting "name" property.
|
||||||
|
|
||||||
|
* The gdk-pixbuf tiff loader now requires libtiff 3.6.0 or later.
|
||||||
|
|
||||||
|
* Support for Windows 9x/ME has officially been removed. It hasn't worked
|
||||||
|
since 2.6 anyway.
|
||||||
|
|
||||||
|
* The GtkTextBufferTargetInfo enumeration values have been changed from
|
||||||
|
G_MAXUINT-0, G_MAXUINT-1, G_MAXUINT-2, etc, to -1, -2, -3 to stay within
|
||||||
|
ANSI C limits.
|
||||||
|
|
||||||
|
* A change in the handling of _NET_WM_USER_TIME properties on toplevel
|
||||||
|
windows can cause deadlock problems with window managers that are using
|
||||||
|
GDK for drawing decorations. In particular, metacity <= 2.18.0 is affected
|
||||||
|
by this. The problem has been fixed in metacity 2.18.1.
|
||||||
|
|
||||||
|
* Semi-private GtkTextLayout api has changed: new GtkTextLayout method
|
||||||
|
invalidate_cursors(), and new functions gtk_text_layout_invalidate_cursors()
|
||||||
|
and gtk_text_layout_cursors_changed(), which should be used in place of
|
||||||
|
gtk_text_layout_invalidate() and gtk_text_layout_changed() if invalidation
|
||||||
|
is due to marks moved or changed selection; new GtkTextLineDisplay structure
|
||||||
|
member. Source compatibility is preserved; binary compatibility may break
|
||||||
|
only if GtkTextLineDisplay structure was created on stack or as a part
|
||||||
|
of another structure (in particular GnomeCanvas and its clones do not need
|
||||||
|
recompiling).
|
||||||
|
|
||||||
|
* Another new signal has been added to GtkNotebook. The new signal
|
||||||
|
is called create-window, so this name can no longer be used for signals
|
||||||
|
in objects derived from GtkNotebook.
|
||||||
|
|
||||||
|
* The gtk_notebook_set/get_group_id() functions were found to be insufficient
|
||||||
|
and have been deprecated in favour of gtk_notebook_set/get_group().
|
||||||
|
|
||||||
|
* The move-focus signal has been moved to GtkWidget, to unify the
|
||||||
|
various implementations of this signal in specific widgets. Great care
|
||||||
|
has been taken to make sure that all code using this signal continues
|
||||||
|
to work.
|
||||||
|
|
||||||
|
* An unused and hardly visible GtkFrame has been removed from the menu
|
||||||
|
widget hierarchy when GtkComboBox::appears-as-list style property is
|
||||||
|
set. Any RC file applying a different style to any widget below the
|
||||||
|
widget path "gtk-combobox-popup-window.GtkFrame" should take into
|
||||||
|
account that the frame no longer exists.
|
||||||
|
|
||||||
|
* The external print preview application used by GtkPrintOperationPreview
|
||||||
|
is now passed the print settings on the command line with the
|
||||||
|
--print-settings parameter pointing to a temp file containing the
|
||||||
|
settings. The preview application assumes ownership of the file and
|
||||||
|
should delete it once it does not need it anymore. The --print-settings
|
||||||
|
commandline option is understood by Evince 0.9.0 and newer. To use a
|
||||||
|
different print preview application, change the gtk-print-preview-command
|
||||||
|
setting in your gtkrc file, e.g. gtk-print-preview-command = "ggv %f"
|
||||||
|
|
||||||
|
* GtkMenuShell is now defined as an abstract type. It was already
|
||||||
|
documented as an abstract class, and there is little reason to
|
||||||
|
instantiate it.
|
||||||
|
|
||||||
|
* The GtkTooltips struct (this is the old tooltips API) is now considered
|
||||||
|
private. Code that used to access this struct, in particular the
|
||||||
|
tips_data_list field, will need to change. All of the old tooltips
|
||||||
|
API has been deprecated in favour of a new implementation and
|
||||||
|
API. This affects all of the gtk_tooltips_ functions, and functions
|
||||||
|
which take a GtkTooltips argument, such as gtk_tool_item_set_tooltip()
|
||||||
|
and gtk_menu_tool_button_set_arrow_tooltip().
|
||||||
|
|
||||||
|
* The memory management of the GtkRecentManager object has been changed,
|
||||||
|
as using the screen didn't guarantee that the singleton instance was
|
||||||
|
correctly destroyed. The screen-related functions have been deprecated,
|
||||||
|
and should not be used anymore; the GtkRecentManager instance returned by
|
||||||
|
the gtk_recent_manager_get_default() function is guaranteed to be valid
|
||||||
|
for the entire lifetime of an application.
|
||||||
|
|
||||||
|
* A number of interfaces that have been superseded by newer interfaces for
|
||||||
|
a long time have finally been deprecated. This includes
|
||||||
|
gtk_widget_ref/unref(), gtk_rc_style_ref/unref() and the old file selector.
|
||||||
|
|
||||||
|
* The various coordinate systems in use in GtkTreeView widgets have
|
||||||
|
been clarified in the documentation, and in the cause of doing so,
|
||||||
|
the functions gtk_tree_view_widget_to_tree_coords() and
|
||||||
|
gtk_tree_view_tree_to_widget_coords() have been deprecated in
|
||||||
|
favour of a new family of gtk_tree_view_convert_ functions.
|
||||||
|
|
||||||
|
* gtk_menu_item_remove_submenu() has been deprecated in favour of
|
||||||
|
gtk_menu_item_set_submenu (..., NULL).
|
||||||
|
|
||||||
|
* gtk_default_draw_check() has been fixed to really decrease the
|
||||||
|
indicator size by one pixel to ensure an odd size instead of
|
||||||
|
accidentially increasing it.
|
||||||
|
Consequently, gtk_cell_renderer_toggle_render() could be fixed to
|
||||||
|
not subtract 1 from the size passed to gtk_paint_option(), which
|
||||||
|
was just a workaround for above off-by-two for even sizes (theme
|
||||||
|
engines now get the real indicator size passed).
|
||||||
|
The default toggle size of GtkCheckMenuItem and GtkCellRendererToggle
|
||||||
|
has been changed to 13 to be consistent with GtkCheckButton.
|
||||||
|
The only visible change with default settings is that the indicator in
|
||||||
|
GtkCellRendererToggle has changed its size from 11 to 13 and is now
|
||||||
|
consistent with menus and toggle buttons.
|
||||||
|
|
||||||
|
* GTK+ has always required that gtk_init() (or a variant thereof) is
|
||||||
|
called before any other GTK+ function. Some applications call functions
|
||||||
|
like gtk_clipboard_get() to check if they need to call gtk_init(),
|
||||||
|
anyway. A change in GLib 2.14 has recently broken this unsupported
|
||||||
|
practise. It is worth pointing out that calling gtk_init() twice
|
||||||
|
does no harm.
|
||||||
|
|
||||||
|
|
||||||
|
Release notes for 2.10
|
||||||
|
======================
|
||||||
|
|
||||||
|
* The hexadecimal Unicode input feature has been reworked. It no longer
|
||||||
|
blocks the use of the sixteen Ctrl-Shift-<hex digit> key sequences. Now
|
||||||
|
it only uses Ctrl-Shift-u.
|
||||||
|
|
||||||
|
* A memory leak in GtkStyle handling has been fixed. This may expose bugs
|
||||||
|
in third-party widgets which forget to call gtk_style_attach() in their
|
||||||
|
realize functions.
|
||||||
|
|
||||||
|
* Range widgets like GtkScrollbar now render their arrows insensitive
|
||||||
|
when the slider is at the end. Applications which react to arrow
|
||||||
|
clicks even if the slider is at the end may want to use the new
|
||||||
|
gtk_range_set_[upper/lower]_stepper_sensitivity() functions to
|
||||||
|
prevent the arrows from being rendered insensitive.
|
||||||
|
|
||||||
|
* GtkObject now uses the "floating reference" support in GObject.
|
||||||
|
GTK_OBJECT_IS_FLOATING() will still work, but direct checking
|
||||||
|
of the GTK_FLOATING flag will no longer detect the floating
|
||||||
|
reference. Details about floating references can be found in the docs:
|
||||||
|
http://developer.gnome.org/doc/API/2.0/gobject/gobject-The-Base-Object-Type.html#floating-ref
|
||||||
|
|
||||||
|
* Accelerators like (_F) are now stripped from labels when they are
|
||||||
|
displayed in toolbars. If this is not wanted, the feature can be
|
||||||
|
suppressed by inserting a Unicode control character, e.g ZWNJ.
|
||||||
|
|
||||||
|
* The pixbuf theme engine can now customize expanders (in GtkTreeView
|
||||||
|
and GtkExpander) and resize grips, using the new EXPANDER and
|
||||||
|
RESIZE_GRIP function values.
|
||||||
|
|
||||||
|
* Dialogs created by gtk_about_dialog_new() no longer hide automatically
|
||||||
|
when the user clicks close. It is the applications responsibility to
|
||||||
|
hide or destroy the dialog.
|
||||||
|
|
||||||
|
* Several new signals have been added to GtkNotebook. Care has been taken
|
||||||
|
to choose signal names which do not collide with signals added by well-known
|
||||||
|
derived classes. The names which can no longer be used for signals in
|
||||||
|
objects derived from GtkNotebook are page-reordered, page-removed and
|
||||||
|
page-added.
|
||||||
|
|
||||||
|
* Due to the interface changes in the file chooser backend interface,
|
||||||
|
the GTK+ ABI version has been bumped to 2.10.0. Third-party filesystem
|
||||||
|
backends have to be ported to the new interface, other modules, such as
|
||||||
|
theme engines, input method modules or pixbuf loaders have to be rebuilt
|
||||||
|
so that they are installed in the right place for GTK+ to find them.
|
||||||
|
|
||||||
|
|
||||||
|
Release notes for 2.8
|
||||||
|
=====================
|
||||||
|
|
||||||
|
* GTK+ 2.8 and Pango 1.10 require the cairo library.
|
||||||
|
|
||||||
|
* The default theme has been renamed to "Raleigh". Existing configurations
|
||||||
|
specifying the "Default" theme name should still work.
|
||||||
|
|
||||||
|
* The GtkTreeView::enable-search property has been changed to control
|
||||||
|
only typeahead search, not the C-f keybinding to start an interactive
|
||||||
|
search. To turn off interactive searching completely, you have to
|
||||||
|
set GtkTreeView::search-column to -1.
|
||||||
|
|
||||||
|
* The restriction on using the same cell renderer in multiple columns
|
||||||
|
of a GtkTreeView is now more strictly enforced.
|
||||||
|
|
||||||
|
* In GTK+ 2.8, GtkCalendar uses nl_langinfo() (if available) to determine
|
||||||
|
the first day of the week. Thus, it is possible to select the first day
|
||||||
|
of the week independently from the language, by setting LC_TIME.
|
||||||
|
|
||||||
|
* In GTK+ 2.8, the gtk-update-icon-cache utility includes image data
|
||||||
|
in the icon caches, which will make the icon cache files larger than
|
||||||
|
the one produced by GTK+ 2.6. This change will reduce the memory
|
||||||
|
overhead of icon themes at runtime, since all GTK+ applications can
|
||||||
|
share the image data in memory.
|
||||||
|
|
||||||
|
* In 2.8, GDK emits GdkEventGrabBroken events when a keyboard or pointer
|
||||||
|
grab is broken. On X11, this can happen if the same application grabs
|
||||||
|
again, or if the window used for the grab becomes unviewable. It happens
|
||||||
|
more often on Win32. Applications which use grabs should pay attention
|
||||||
|
to these events and do the necessary cleanups when the grab is lost.
|
||||||
|
* The GIOChannel code for sockets on win32 has been rewritten.
|
||||||
|
Applications who make non-trivial use of GIOChannels on win32 should
|
||||||
|
be watched for possible problems.
|
||||||
|
|
||||||
|
* GLib 2.8 uses atomic operations to implement reference counting, thus
|
||||||
|
g_object_ref/unref, g_closure_ref/sink/unref and g_iochannel_ref/unref
|
||||||
|
can be used without locking in multithreaded applications. Note that
|
||||||
|
other modifications, like concurrent setting of properties still require
|
||||||
|
locking.
|
||||||
|
|
||||||
|
* g_convert() and related character set conversion functions have been
|
||||||
|
fixed to emit pending shift states and to not cache iconv descriptors
|
||||||
|
across multiple calls, since that is problematic for some encodings.
|
||||||
|
Note that these functions are not suitable for streaming conversions;
|
||||||
|
use g_iconv() to do streaming conversion.
|
||||||
|
|
||||||
|
|
||||||
|
Release notes for 2.6
|
||||||
|
=====================
|
||||||
|
|
||||||
|
* GTK+ 2.6 supports clipboard persistency. To make use of this feature,
|
||||||
|
a clipboard manager following the specification at
|
||||||
|
http://www.freedesktop.org/wiki/Standards/clipboard-manager-spec
|
||||||
|
must be running. A sample implementation of such a clipboard manager
|
||||||
|
is available at
|
||||||
|
http://people.imendio.com/andersca/archives/clipboard-manager-0.3.tar.gz
|
||||||
|
Applications can use the function gdk_display_supports_clipboard_persistence()
|
||||||
|
to find out if clipboard persistence is available.
|
||||||
|
|
||||||
|
* Notification on clipboard ownership changes via GdkOwnerChange events
|
||||||
|
requires the XFIXES X extension. Applications can use the function
|
||||||
|
gdk_display_supports_selection_notification() to find out if ownerchip
|
||||||
|
change notification is available.
|
||||||
|
|
||||||
|
* The icon theme code in GTK+ 2.6 follows the freedesktop.org icon theme
|
||||||
|
specification. Setting the XDG_DATA_DIRS environtment variable may be
|
||||||
|
necessary if your icons aren't installed in the default location
|
||||||
|
/usr/share/icons.
|
||||||
|
|
||||||
|
* The icon theme code in GTK+ 2.6 can make use of mmap()able cache files
|
||||||
|
to avoid a lot of disk searching overhead. GTK+ includes a utility named
|
||||||
|
gtk-update-icon-cache to generate these cache files. For further details,
|
||||||
|
see the gtk-update-icon-cache man page or the GTK+ documentation.
|
||||||
|
|
||||||
|
* To reduce code size and improve efficiency, GTK+, when compiled
|
||||||
|
with the GNU toolchain, has separate internal and external entry
|
||||||
|
points for exported functions. The internal names, which begin with
|
||||||
|
IA__, may be seen when debugging a GTK+ program.
|
||||||
|
|
||||||
|
* The following functions have been deprecated in GTK+ 2.6:
|
||||||
|
gdk_pango_context_set_colormap
|
||||||
|
gtk_cell_renderer_editing_canceled
|
||||||
|
|
||||||
|
* The new GtkFileChooser widget emphasizes simplicity and thus does
|
||||||
|
not provide a navigation entry by default when opening files.
|
||||||
|
Experienced command line users will likely want to make heavy use of
|
||||||
|
the location dialog brought up by the Control-L key shortcut.
|
||||||
|
|
||||||
|
* The GTK+ libraries use an '_' prefix to indicate private symbols that
|
||||||
|
must not be used by applications. On some platforms, symbols beginning
|
||||||
|
with prefixes such as _gtk, _gdk, and _pango will be exported
|
||||||
|
from the library, on others not. In no case can applications
|
||||||
|
use these private symbols. In addition to that, GTK+ 2.6 makes several
|
||||||
|
symbols private which were not in any installed header files and
|
||||||
|
were never intended to be exported.
|
||||||
|
|
||||||
|
* The gdk_pixbuf_xlib library included in the contrib/ directory
|
||||||
|
and the framebuffer GDK backend included in the gdk/linux-fb directory
|
||||||
|
of GTK+ are provided on an as-is basis and have not been tested at all.
|
||||||
|
No guarantees about the degree of workingness or about future
|
||||||
|
compatibility are provided.
|
||||||
|
|
||||||
|
* On Unix, the assumption of GLib and GTK+ by default is that filenames on
|
||||||
|
the filesystem are encoded in UTF-8 rather than the encoding of the locale;
|
||||||
|
the GTK+ developers consider that having filenames whose interpretation
|
||||||
|
depends on the current locale is fundamentally a bad idea.
|
||||||
|
|
||||||
|
If you have filenames encoded in the encoding of your locale, then you
|
||||||
|
may want to set the G_FILENAME_ENCODING environment variable:
|
||||||
|
|
||||||
|
G_FILENAME_ENCODING=@locale
|
||||||
|
export G_FILENAME_ENCODING
|
||||||
|
|
||||||
|
(Earlier versions of GLib 2.x required a different environment variable
|
||||||
|
setting; G_BROKEN_FILENAMES=1 to achieve the same effect; this
|
||||||
|
is still supported, but G_FILENAME_ENCODING is preferred.)
|
||||||
|
Best integration of GTK+ 2.6 with the environment is achieved by
|
||||||
|
using a UTF-8 locale.
|
||||||
|
|
||||||
|
On Windows, filenames passed to GTK+ should always be in UTF-8, as
|
||||||
|
in GLib 2.6. This is different than in previous versions of GTK+
|
||||||
|
where the system codepage was used. As in GLib, for DLL ABI
|
||||||
|
stability, applications built against previous versions of GTK+ will
|
||||||
|
use entry points providing the old semantics.
|
||||||
|
|
||||||
|
When compiling against GTK+ 2.6, applications intended to be
|
||||||
|
portable to Windows must take the UTF-8 file name encoding into
|
||||||
|
consideration, and use the gstdio wrappers to access files whose
|
||||||
|
names have been constructed from strings returned from GTK+ or GLib.
|
||||||
|
|
||||||
|
|
||||||
|
How to report bugs
|
||||||
|
==================
|
||||||
|
|
||||||
|
Bugs should be reported to the GNOME bug tracking system.
|
||||||
|
(http://bugzilla.gnome.org, product gtk+.) You will need to create an
|
||||||
|
account for yourself.
|
||||||
|
|
||||||
|
In the bug report please include:
|
||||||
|
|
||||||
|
* Information about your system. For instance:
|
||||||
|
|
||||||
|
- What operating system and version
|
||||||
|
- What version of X
|
||||||
|
- For Linux, what version of the C library
|
||||||
|
|
||||||
|
And anything else you think is relevant.
|
||||||
|
|
||||||
|
* How to reproduce the bug.
|
||||||
|
|
||||||
|
If you can reproduce it with one of the tests or demos built with GTK+,
|
||||||
|
such as demos/gtk-demo/gtk-demo, that would be most convenient. Otherwise,
|
||||||
|
please include a short test program that exhibits the behavior. As a
|
||||||
|
last resort, you can also provide a pointer to a larger piece of software
|
||||||
|
that can be downloaded.
|
||||||
|
|
||||||
|
* If the bug was a crash, the exact text that was printed out when the
|
||||||
|
crash occured.
|
||||||
|
|
||||||
|
* Further information such as stack traces may be useful, but is not
|
||||||
|
necessary. If you do send a stack trace, and the error is an X error,
|
||||||
|
it will be more useful if the stacktrace is produced running the test
|
||||||
|
program with the --sync command line option.
|
||||||
|
|
||||||
|
|
||||||
|
Patches
|
||||||
|
=======
|
||||||
|
|
||||||
|
Patches should also be submitted to bugzilla.gnome.org. If the patch
|
||||||
|
fixes an existing bug, add the patch as an attachment to that bug
|
||||||
|
report.
|
||||||
|
|
||||||
|
Otherwise, enter a new bug report that describes the patch, and attach
|
||||||
|
the patch to that bug report.
|
||||||
|
|
||||||
|
Bug reports containing patches should include the PATCH keyword in their
|
||||||
|
keyword fields. If the patch adds to or changes the GTK+ programming
|
||||||
|
interface, the API keyword should also be included.
|
||||||
|
|
||||||
|
Patches should be in unified diff form. (The -u option to GNU diff.)
|
159
README.md
@@ -1,159 +0,0 @@
|
|||||||
GTK — The GTK toolkit
|
|
||||||
=====================
|
|
||||||
|
|
||||||
[](https://gitlab.gnome.org/GNOME/gtk/pipelines)
|
|
||||||
|
|
||||||
General information
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
GTK is a multi-platform toolkit for creating graphical user interfaces.
|
|
||||||
Offering a complete set of widgets, GTK is suitable for projects ranging
|
|
||||||
from small one-off projects to complete application suites.
|
|
||||||
|
|
||||||
GTK is free software and part of the GNU Project. However, the
|
|
||||||
licensing terms for GTK, the GNU LGPL, allow it to be used by all
|
|
||||||
developers, including those developing proprietary software, without any
|
|
||||||
license fees or royalties.
|
|
||||||
|
|
||||||
The official download location
|
|
||||||
|
|
||||||
- https://download.gnome.org/sources/gtk+
|
|
||||||
|
|
||||||
The official web site
|
|
||||||
|
|
||||||
- https://www.gtk.org
|
|
||||||
|
|
||||||
The official developers blog
|
|
||||||
|
|
||||||
- https://blog.gtk.org
|
|
||||||
|
|
||||||
Information about mailing lists can be found at
|
|
||||||
|
|
||||||
- http://www.gtk.org/mailing-lists.php
|
|
||||||
|
|
||||||
Nightly documentation can be found at
|
|
||||||
- Gtk: https://gnome.pages.gitlab.gnome.org/gtk/gtk/
|
|
||||||
- Gdk: https://gnome.pages.gitlab.gnome.org/gtk/gdk/
|
|
||||||
- Gsk: https://gnome.pages.gitlab.gnome.org/gtk/gsk/
|
|
||||||
|
|
||||||
Building and installing
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
In order to build GTK you will need:
|
|
||||||
|
|
||||||
- [a C99 compatible compiler](https://wiki.gnome.org/Projects/GLib/CompilerRequirements)
|
|
||||||
- [Python 3](https://www.python.org/)
|
|
||||||
- [Meson](http://mesonbuild.com)
|
|
||||||
- [Ninja](https://ninja-build.org)
|
|
||||||
|
|
||||||
You will also need various dependencies, based on the platform you are
|
|
||||||
building for:
|
|
||||||
|
|
||||||
- [GLib](https://download.gnome.org/sources/glib)
|
|
||||||
- [GdkPixbuf](https://download.gnome.org/sources/gdk-pixbuf)
|
|
||||||
- [GObject-Introspection](https://download.gnome.org/sources/gobject-introspection)
|
|
||||||
- [Cairo](https://www.cairographics.org)
|
|
||||||
- [Pango](https://download.gnome.org/sources/pango)
|
|
||||||
- [Epoxy](https://github.com/anholt/libepoxy)
|
|
||||||
- [Graphene](https://github.com/ebassi/graphene)
|
|
||||||
- [ATK](https://download.gnome.org/sources/atk)
|
|
||||||
- [Xkb-common](https://github.com/xkbcommon/libxkbcommon)
|
|
||||||
|
|
||||||
If you are building the X11 backend, you will also need:
|
|
||||||
|
|
||||||
- Xlib, and the following X extensions:
|
|
||||||
- xrandr
|
|
||||||
- xrender
|
|
||||||
- xi
|
|
||||||
- xext
|
|
||||||
- xfixes
|
|
||||||
- xcursor
|
|
||||||
- xdamage
|
|
||||||
- xcomposite
|
|
||||||
- [atk-bridge-2.0](https://download.gnome.org/sources/at-spi2-atk)
|
|
||||||
|
|
||||||
If you are building the Wayland backend, you will also need:
|
|
||||||
|
|
||||||
- Wayland-client
|
|
||||||
- Wayland-protocols
|
|
||||||
- Wayland-cursor
|
|
||||||
- Wayland-EGL
|
|
||||||
|
|
||||||
Once you have all the necessary dependencies, you can build GTK by using
|
|
||||||
Meson:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ meson _build .
|
|
||||||
$ cd _build
|
|
||||||
$ ninja
|
|
||||||
```
|
|
||||||
|
|
||||||
You can run the test suite using:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ meson test
|
|
||||||
```
|
|
||||||
|
|
||||||
And, finally, you can install GTK using:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ sudo ninja install
|
|
||||||
```
|
|
||||||
|
|
||||||
Complete information about installing GTK+ and related libraries
|
|
||||||
can be found in the file:
|
|
||||||
|
|
||||||
```
|
|
||||||
docs/reference/gtk/html/gtk-building.html
|
|
||||||
```
|
|
||||||
|
|
||||||
Or [online](https://developer.gnome.org/gtk4/stable/gtk-building.html)
|
|
||||||
|
|
||||||
How to report bugs
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Bugs should be reported on the [issues page](https://gitlab.gnome.org/GNOME/gtk/issues/new).
|
|
||||||
|
|
||||||
In the bug report please include:
|
|
||||||
|
|
||||||
* Information about your system. For instance:
|
|
||||||
|
|
||||||
- which version of GTK you are using
|
|
||||||
- what operating system and version
|
|
||||||
- for Linux, which distribution
|
|
||||||
- if you built GTK, the list of options used to configure the build
|
|
||||||
|
|
||||||
And anything else you think is relevant.
|
|
||||||
|
|
||||||
* How to reproduce the bug.
|
|
||||||
|
|
||||||
If you can reproduce it with one of the demo applications that are
|
|
||||||
built in the demos/ subdirectory, on one of the test programs that
|
|
||||||
are built in the tests/ subdirectory, that will be most convenient.
|
|
||||||
Otherwise, please include a short test program that exhibits the
|
|
||||||
behavior. As a last resort, you can also provide a pointer to a
|
|
||||||
larger piece of software that can be downloaded.
|
|
||||||
|
|
||||||
* If the bug was a crash, the exact text that was printed out
|
|
||||||
when the crash occurred.
|
|
||||||
|
|
||||||
* Further information such as stack traces may be useful, but
|
|
||||||
is not necessary.
|
|
||||||
|
|
||||||
Release notes
|
|
||||||
-------------
|
|
||||||
|
|
||||||
The release notes for GTK are part of the migration guide in the API
|
|
||||||
reference. See:
|
|
||||||
|
|
||||||
- [3.x release notes](https://developer.gnome.org/gtk3/unstable/gtk-migrating-2-to-3.html)
|
|
||||||
- [4.x release notes](https://developer.gnome.org/gtk4/unstable/gtk-migrating-3-to-4.html)
|
|
||||||
|
|
||||||
Licensing terms
|
|
||||||
---------------
|
|
||||||
|
|
||||||
GTK is released under the terms of the GNU Lesser General Public License,
|
|
||||||
version 2.1 or, at your option, any later version, as published by the Free
|
|
||||||
Software Foundation.
|
|
||||||
|
|
||||||
Please, see the `COPYING` file for further information.
|
|
117
README.win32
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
The Win32 backend in GTK+ is not as stable or correct as the X11 one.
|
||||||
|
|
||||||
|
For prebuilt runtime and developer packages see
|
||||||
|
http://ftp.gnome.org/pub/gnome/binaries/win32/
|
||||||
|
|
||||||
|
Building GTK+ on Win32
|
||||||
|
======================
|
||||||
|
|
||||||
|
First you obviously need developer packages for the compile-time
|
||||||
|
dependencies: Pango, atk, glib, gettext-runtime, libiconv, libpng,
|
||||||
|
zlib, libtiff at least. See
|
||||||
|
http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies .
|
||||||
|
|
||||||
|
After installing the dependencies, there are two ways to build GTK+
|
||||||
|
for win32.
|
||||||
|
|
||||||
|
1) GNU tools, ./configure && make install
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
This requires you have mingw and MSYS.
|
||||||
|
|
||||||
|
Use the configure script, and the resulting Makefiles (which use
|
||||||
|
libtool and gcc to do the compilation). I use this myself, but it can
|
||||||
|
be hard to setup correctly.
|
||||||
|
|
||||||
|
The full script I run to build GTK+ 2.10 unpacked from a source
|
||||||
|
distribution is as below. This is from bulding GTK+ 2.10.9, slightly
|
||||||
|
edited to make it match this 2.11 development branch. Actually I don't
|
||||||
|
use any script like this to build the development branch, as I don't
|
||||||
|
distribute any binaries from development branches.
|
||||||
|
|
||||||
|
MOD=gtk+
|
||||||
|
VER=2.10.9
|
||||||
|
THIS=$MOD-$VER
|
||||||
|
HEX=`echo $THIS | md5sum | cut -d' ' -f1`
|
||||||
|
TARGET=c:/devel/target/$HEX
|
||||||
|
DEPS="`/devel/src/tml/latest.sh glib atk cairo pango`"
|
||||||
|
sed -e 's/need_relink=yes/need_relink=no # no way --tml/' <ltmain.sh >ltmain.temp && mv ltmain.temp ltmain.sh
|
||||||
|
usedev
|
||||||
|
usemsvs6
|
||||||
|
MY_PKG_CONFIG_PATH=""
|
||||||
|
for D in $DEPS; do
|
||||||
|
PATH=/devel/dist/$D/bin:$PATH
|
||||||
|
MY_PKG_CONFIG_PATH=/devel/dist/$D/lib/pkgconfig:$MY_PKG_CONFIG_PATH
|
||||||
|
done
|
||||||
|
PKG_CONFIG_PATH=$MY_PKG_CONFIG_PATH:$PKG_CONFIG_PATH CC='gcc -mtune=pentium3 -mthreads' CPPFLAGS='-I/opt/gnu/include -I/opt/gnuwin32/include -I/opt/misc/include' LDFLAGS='-L/opt/gnu/lib -L/opt/gnuwin32/lib -L/opt/misc/lib -Wl,--enable-auto-image-base' LIBS=-lintl CFLAGS=-O2 ./configure --with-gdktarget=win32 --enable-debug=yes --disable-gtk-doc --disable-static --prefix=$TARGET &&
|
||||||
|
libtoolcacheize &&
|
||||||
|
unset MY_PKG_CONFIG_PATH &&
|
||||||
|
PATH=/devel/target/$HEX/bin:.libs:$PATH make install &&
|
||||||
|
(cd $TARGET/bin; strip --strip-unneeded *.dll *.exe) &&
|
||||||
|
(cd $TARGET/lib/gtk-2.0/2.10.0/loaders; strip --strip-unneeded *.dll) &&
|
||||||
|
(cd $TARGET/lib/gtk-2.0/2.10.0/immodules; strip --strip-unneeded *.dll) &&
|
||||||
|
(cd $TARGET/lib/gtk-2.0/2.10.0/engines; strip --strip-unneeded *.dll) &&
|
||||||
|
PATH=$TARGET/bin:$PATH gdk-pixbuf-query-loaders >$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders &&
|
||||||
|
grep -v -E 'Automatically generated|Created by|LoaderDir =' <$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders >$TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp &&
|
||||||
|
mv $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders.temp $TARGET/etc/gtk-2.0/gdk-pixbuf.loaders &&
|
||||||
|
grep -v -E 'Automatically generated|Created by|ModulesPath =' <$TARGET/etc/gtk-2.0/gtk.immodules >$TARGET/etc/gtk-2.0/gtk.immodules.temp &&
|
||||||
|
mv $TARGET/etc/gtk-2.0/gtk.immodules.temp $TARGET/etc/gtk-2.0/gtk.immodules &&
|
||||||
|
./gtk-zip.sh &&
|
||||||
|
(cd /devel/src/tml && zip /tmp/$MOD-dev-$VER.zip make/$THIS.make) &&
|
||||||
|
manifestify /tmp/$MOD*-$VER.zip
|
||||||
|
|
||||||
|
You should not just copy the above blindly. There are some things in
|
||||||
|
the script that are very specific to *my* build setup on *my* current
|
||||||
|
machine. For instance the "latest.sh" script, the "usedev" and
|
||||||
|
"usemsvs6" shell functions, the /devel/dist folder. The above script
|
||||||
|
is really just meant for reference, to give an idea. You really need
|
||||||
|
to understand what things like PKG_CONFIG_PATH are and set them up
|
||||||
|
properly after installing the dependencies before building GTK+.
|
||||||
|
|
||||||
|
As you see above, after running configure, one can just say "make
|
||||||
|
install", like on Unix. A post-build fix is needed, running
|
||||||
|
gdk-pixbuf-query-loaders once more to get a correct gdk-pixbuf.loaders
|
||||||
|
file.
|
||||||
|
|
||||||
|
2) Microsoft's tools
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Use the Microsoft compiler, cl and Make, nmake. Say nmake -f
|
||||||
|
makefile.msc in gdk and gtk. Be prepared to manually edit various
|
||||||
|
makefile.msc files, and the makefile snippets in build/win32.
|
||||||
|
|
||||||
|
Alternative 1 also generates Microsoft import libraries (.lib), if you
|
||||||
|
have lib.exe available. It might also work for cross-compilation from
|
||||||
|
Unix.
|
||||||
|
|
||||||
|
I use method 1 myself. Hans Breuer has been taking care of the MSVC
|
||||||
|
makefiles. At times, we disagree a bit about various issues, and for
|
||||||
|
instance the makefile.msc files might not produce identically named
|
||||||
|
DLLs and import libraries as the "autoconfiscated" makefiles and
|
||||||
|
libtool do. If this bothers you, you will have to fix the makefiles.
|
||||||
|
|
||||||
|
Using GTK+ on Win32
|
||||||
|
===================
|
||||||
|
|
||||||
|
To use GTK+ on Win32, you also need either one of the above mentioned
|
||||||
|
compilers. Other compilers might work, but don't count on it. Look for
|
||||||
|
prebuilt developer packages (DLLs, import libraries, headers) on the
|
||||||
|
above website.
|
||||||
|
|
||||||
|
Multi-threaded use of GTK+ on Win32
|
||||||
|
===================================
|
||||||
|
|
||||||
|
Multi-threaded GTK+ programs might work on Windows in special simple
|
||||||
|
cases, but not in general. Sorry. If you have all GTK+ and GDK calls
|
||||||
|
in the same thread, it might work. Otherwise, probably not at
|
||||||
|
all. Possible ways to fix this are being investigated.
|
||||||
|
|
||||||
|
Wintab
|
||||||
|
======
|
||||||
|
|
||||||
|
The tablet support uses the Wintab API. The Wintab development kit is
|
||||||
|
no longer required. The wintab.h header file is bundled with GTK+
|
||||||
|
sources. Unfortunately it seems that only Wacom tablets come with
|
||||||
|
support for the Wintab API nowadays.
|
||||||
|
|
||||||
|
--Tor Lillqvist <tml@iki.fi>, <tml@novell.com>
|
79
acinclude.m4
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
# autoconf 2.13 / 2.50 compatibility macro
|
||||||
|
|
||||||
|
# GLIB_AC_DIVERT_BEFORE_HELP(STUFF)
|
||||||
|
# ---------------------------------
|
||||||
|
# Put STUFF early enough so that they are available for $ac_help expansion.
|
||||||
|
# Handle both classic (<= v2.13) and modern autoconf
|
||||||
|
AC_DEFUN([GLIB_AC_DIVERT_BEFORE_HELP],
|
||||||
|
[ifdef([m4_divert_text], [m4_divert_text([NOTICE],[$1])],
|
||||||
|
[ifdef([AC_DIVERT], [AC_DIVERT([NOTICE],[$1])],
|
||||||
|
[AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl
|
||||||
|
$1
|
||||||
|
AC_DIVERT_POP()])])])
|
||||||
|
|
||||||
|
# GTK_ADD_LIB(VAR,LIBNAME)
|
||||||
|
# ---------------------------------
|
||||||
|
# Helper macro to add a -lBlah to a variable, avoiding repeats
|
||||||
|
# Note that this needs to be quoted when used in an enclosing macro
|
||||||
|
AC_DEFUN([GTK_ADD_LIB],
|
||||||
|
[ case "$$1 " in
|
||||||
|
*-l$2[[\ \ ]]*) ;;
|
||||||
|
*) $1="-l$2 $$1" ;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
# Checks the location of the XML Catalog
|
||||||
|
# Usage:
|
||||||
|
# JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
|
# Defines XMLCATALOG and XML_CATALOG_FILE substitutions
|
||||||
|
AC_DEFUN([JH_PATH_XML_CATALOG],
|
||||||
|
[
|
||||||
|
# check for the presence of the XML catalog
|
||||||
|
AC_ARG_WITH([xml-catalog],
|
||||||
|
AC_HELP_STRING([--with-xml-catalog=CATALOG],
|
||||||
|
[path to xml catalog to use]),,
|
||||||
|
[with_xml_catalog=/etc/xml/catalog])
|
||||||
|
jh_found_xmlcatalog=true
|
||||||
|
XML_CATALOG_FILE="$with_xml_catalog"
|
||||||
|
AC_SUBST([XML_CATALOG_FILE])
|
||||||
|
AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)])
|
||||||
|
if test -f "$XML_CATALOG_FILE"; then
|
||||||
|
AC_MSG_RESULT([found])
|
||||||
|
else
|
||||||
|
jh_found_xmlcatalog=false
|
||||||
|
AC_MSG_RESULT([not found])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check for the xmlcatalog program
|
||||||
|
AC_PATH_PROG(XMLCATALOG, xmlcatalog, no)
|
||||||
|
if test "x$XMLCATALOG" = xno; then
|
||||||
|
jh_found_xmlcatalog=false
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $jh_found_xmlcatalog; then
|
||||||
|
ifelse([$1],,[:],[$1])
|
||||||
|
else
|
||||||
|
ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2])
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
# Checks if a particular URI appears in the XML catalog
|
||||||
|
# Usage:
|
||||||
|
# JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||||
|
AC_DEFUN([JH_CHECK_XML_CATALOG],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
|
||||||
|
AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
|
||||||
|
if $jh_found_xmlcatalog && \
|
||||||
|
AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
|
||||||
|
AC_MSG_RESULT([found])
|
||||||
|
ifelse([$3],,,[$3
|
||||||
|
])dnl
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT([not found])
|
||||||
|
ifelse([$4],,
|
||||||
|
[AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
|
||||||
|
[$4])
|
||||||
|
fi
|
||||||
|
])
|
117
autogen.sh
Executable file
@@ -0,0 +1,117 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Run this to generate all the initial makefiles, etc.
|
||||||
|
|
||||||
|
srcdir=`dirname $0`
|
||||||
|
test -z "$srcdir" && srcdir=.
|
||||||
|
|
||||||
|
ORIGDIR=`pwd`
|
||||||
|
cd $srcdir
|
||||||
|
PROJECT=Gtk+
|
||||||
|
TEST_TYPE=-d
|
||||||
|
FILE=gdk
|
||||||
|
|
||||||
|
DIE=0
|
||||||
|
|
||||||
|
have_libtool=false
|
||||||
|
if libtoolize --version < /dev/null > /dev/null 2>&1 ; then
|
||||||
|
libtool_version=`libtoolize --version | sed 's/^[^0-9]*\([0-9.][0-9.]*\).*/\1/'`
|
||||||
|
case $libtool_version in
|
||||||
|
1.4*|1.5*|2.2*)
|
||||||
|
have_libtool=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if $have_libtool ; then : ; else
|
||||||
|
echo
|
||||||
|
echo "You must have libtool 1.4 installed to compile $PROJECT."
|
||||||
|
echo "Install the appropriate package for your distribution,"
|
||||||
|
echo "or get the source tarball at http://ftp.gnu.org/gnu/libtool/"
|
||||||
|
DIE=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
(gtkdocize --version) < /dev/null > /dev/null 2>&1 || {
|
||||||
|
echo
|
||||||
|
echo "You must have gtk-doc installed to compile $PROJECT."
|
||||||
|
echo "Install the appropriate package for your distribution,"
|
||||||
|
echo "or get the source tarball at http://ftp.gnome.org/pub/GNOME/sources/gtk-doc/"
|
||||||
|
DIE=1
|
||||||
|
}
|
||||||
|
|
||||||
|
(autoconf --version) < /dev/null > /dev/null 2>&1 || {
|
||||||
|
echo
|
||||||
|
echo "You must have autoconf installed to compile $PROJECT."
|
||||||
|
echo "Install the appropriate package for your distribution,"
|
||||||
|
echo "or get the source tarball at http://ftp.gnu.org/gnu/autoconf/"
|
||||||
|
DIE=1
|
||||||
|
}
|
||||||
|
|
||||||
|
if automake-1.7 --version < /dev/null > /dev/null 2>&1 ; then
|
||||||
|
AUTOMAKE=automake-1.7
|
||||||
|
ACLOCAL=aclocal-1.7
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "You must have automake 1.7.x installed to compile $PROJECT."
|
||||||
|
echo "Install the appropriate package for your distribution,"
|
||||||
|
echo "or get the source tarball at http://ftp.gnu.org/gnu/automake/"
|
||||||
|
DIE=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$DIE" -eq 1; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
test $TEST_TYPE $FILE || {
|
||||||
|
echo "You must run this script in the top-level $PROJECT directory"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if test -z "$AUTOGEN_SUBDIR_MODE"; then
|
||||||
|
if test -z "$*"; then
|
||||||
|
echo "I am going to run ./configure with no arguments - if you wish "
|
||||||
|
echo "to pass any to it, please specify them on the $0 command line."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -z "$ACLOCAL_FLAGS"; then
|
||||||
|
|
||||||
|
acdir=`$ACLOCAL --print-ac-dir`
|
||||||
|
m4list="glib-2.0.m4 glib-gettext.m4"
|
||||||
|
|
||||||
|
for file in $m4list
|
||||||
|
do
|
||||||
|
if [ ! -f "$acdir/$file" ]; then
|
||||||
|
echo "WARNING: aclocal's directory is $acdir, but..."
|
||||||
|
echo " no file $acdir/$file"
|
||||||
|
echo " You may see fatal macro warnings below."
|
||||||
|
echo " If these files are installed in /some/dir, set the ACLOCAL_FLAGS "
|
||||||
|
echo " environment variable to \"-I /some/dir\", or install"
|
||||||
|
echo " $acdir/$file."
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf autom4te.cache
|
||||||
|
|
||||||
|
# README and INSTALL are required by automake, but may be deleted by clean
|
||||||
|
# up rules. to get automake to work, simply touch these here, they will be
|
||||||
|
# regenerated from their corresponding *.in files by ./configure anyway.
|
||||||
|
touch README INSTALL
|
||||||
|
|
||||||
|
$ACLOCAL $ACLOCAL_FLAGS || exit $?
|
||||||
|
|
||||||
|
libtoolize --force || exit $?
|
||||||
|
gtkdocize || exit $?
|
||||||
|
|
||||||
|
autoheader || exit $?
|
||||||
|
|
||||||
|
$AUTOMAKE --add-missing || exit $?
|
||||||
|
autoconf || exit $?
|
||||||
|
cd $ORIGDIR || exit $?
|
||||||
|
|
||||||
|
if test -z "$AUTOGEN_SUBDIR_MODE"; then
|
||||||
|
$srcdir/configure --enable-maintainer-mode $AUTOGEN_CONFIGURE_ARGS "$@" || exit $?
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "Now type 'make' to compile $PROJECT."
|
||||||
|
fi
|
@@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"app-id": "org.gtk.Demo4",
|
|
||||||
"runtime": "org.gnome.Platform",
|
|
||||||
"runtime-version": "master",
|
|
||||||
"sdk": "org.gnome.Sdk",
|
|
||||||
"command": "gtk4-demo",
|
|
||||||
"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,72 +0,0 @@
|
|||||||
{
|
|
||||||
"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,72 +0,0 @@
|
|||||||
{
|
|
||||||
"app-id": "org.gtk.WidgetFactory4",
|
|
||||||
"runtime": "org.gnome.Platform",
|
|
||||||
"runtime-version": "master",
|
|
||||||
"sdk": "org.gnome.Sdk",
|
|
||||||
"command": "gtk4-widget-factory",
|
|
||||||
"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,31 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
if 'DESTDIR' not in os.environ:
|
|
||||||
gtk_api_version = sys.argv[1]
|
|
||||||
gtk_abi_version = sys.argv[2]
|
|
||||||
gtk_libdir = sys.argv[3]
|
|
||||||
gtk_datadir = sys.argv[4]
|
|
||||||
|
|
||||||
gtk_moduledir = os.path.join(gtk_libdir, 'gtk-' + gtk_api_version, gtk_abi_version)
|
|
||||||
gtk_printmodule_dir = os.path.join(gtk_moduledir, 'printbackends')
|
|
||||||
gtk_immodule_dir = os.path.join(gtk_moduledir, 'immodules')
|
|
||||||
|
|
||||||
print('Compiling GSettings schemas...')
|
|
||||||
subprocess.call(['glib-compile-schemas',
|
|
||||||
os.path.join(gtk_datadir, 'glib-2.0', 'schemas')])
|
|
||||||
|
|
||||||
print('Updating icon cache...')
|
|
||||||
subprocess.call(['gtk4-update-icon-cache', '-q', '-t' ,'-f',
|
|
||||||
os.path.join(gtk_datadir, 'icons', 'hicolor')])
|
|
||||||
|
|
||||||
print('Updating module cache for print backends...')
|
|
||||||
os.makedirs(gtk_printmodule_dir, exist_ok=True)
|
|
||||||
subprocess.call(['gio-querymodules', gtk_printmodule_dir])
|
|
||||||
|
|
||||||
print('Updating module cache for input methods...')
|
|
||||||
os.makedirs(gtk_immodule_dir, exist_ok=True)
|
|
||||||
subprocess.call(['gio-querymodules', gtk_immodule_dir])
|
|
306
config.h.meson
@@ -1,306 +0,0 @@
|
|||||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
|
||||||
|
|
||||||
/* always defined to indicate that i18n is enabled */
|
|
||||||
#define ENABLE_NLS 1
|
|
||||||
|
|
||||||
/* The prefix for our gettext translation domains. */
|
|
||||||
#mesondefine GETTEXT_PACKAGE
|
|
||||||
|
|
||||||
/* Disable deprecation warnings from glib */
|
|
||||||
#mesondefine GLIB_DISABLE_DEPRECATION_WARNINGS
|
|
||||||
|
|
||||||
/* Define the location where the catalogs will be installed */
|
|
||||||
#mesondefine GTK_LOCALEDIR
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `bind_textdomain_codeset' function. */
|
|
||||||
#mesondefine HAVE_BIND_TEXTDOMAIN_CODESET
|
|
||||||
|
|
||||||
/* Have the cloudproviders library */
|
|
||||||
#mesondefine HAVE_CLOUDPROVIDERS
|
|
||||||
|
|
||||||
/* define if we have colord */
|
|
||||||
#mesondefine HAVE_COLORD
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <crt_externs.h> header file. */
|
|
||||||
#mesondefine HAVE_CRT_EXTERNS_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `dcgettext' function. */
|
|
||||||
#mesondefine HAVE_DCGETTEXT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `isinf', and to 0 if you don't.
|
|
||||||
*/
|
|
||||||
#mesondefine HAVE_DECL_ISINF
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `isnan', and to 0 if you don't.
|
|
||||||
*/
|
|
||||||
#mesondefine HAVE_DECL_ISNAN
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
|
||||||
#mesondefine HAVE_DLFCN_H
|
|
||||||
|
|
||||||
/* Have the ffmpeg library */
|
|
||||||
#mesondefine HAVE_FFMPEG
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <ftw.h> header file. */
|
|
||||||
#mesondefine HAVE_FTW_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `getpagesize' function. */
|
|
||||||
#mesondefine HAVE_GETPAGESIZE
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `getresuid' function. */
|
|
||||||
#mesondefine HAVE_GETRESUID
|
|
||||||
|
|
||||||
/* Define if gio-unix is available */
|
|
||||||
#mesondefine HAVE_GIO_UNIX
|
|
||||||
|
|
||||||
/* Define if GStreamer support is available */
|
|
||||||
#mesondefine HAVE_GSTREAMER
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `httpGetAuthString' function. */
|
|
||||||
#mesondefine HAVE_HTTPGETAUTHSTRING
|
|
||||||
|
|
||||||
/* Define if cups http_t authstring field is accessible */
|
|
||||||
#mesondefine HAVE_HTTP_AUTHSTRING
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
|
||||||
#mesondefine HAVE_INTTYPES_H
|
|
||||||
|
|
||||||
/* Define to 1 if the system has the type `IPrintDialogCallback'. */
|
|
||||||
#mesondefine HAVE_IPRINTDIALOGCALLBACK
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <locale.h> header file. */
|
|
||||||
#mesondefine HAVE_LOCALE_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `lstat' function. */
|
|
||||||
#mesondefine HAVE_LSTAT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `mallinfo' function. */
|
|
||||||
#mesondefine HAVE_MALLINFO
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <memory.h> header file. */
|
|
||||||
#mesondefine HAVE_MEMORY_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `mkstemp' function. */
|
|
||||||
#mesondefine HAVE_MKSTEMP
|
|
||||||
|
|
||||||
/* Define to 1 if you have a working `mmap' system call. */
|
|
||||||
#mesondefine HAVE_MMAP
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `nearbyint' function. */
|
|
||||||
#mesondefine HAVE_NEARBYINT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `posix_fallocate' function. */
|
|
||||||
#mesondefine HAVE_POSIX_FALLOCATE
|
|
||||||
|
|
||||||
/* Have the Xrandr extension library */
|
|
||||||
#mesondefine HAVE_RANDR
|
|
||||||
|
|
||||||
/* Have the Xrandr 1.5 extension library */
|
|
||||||
#mesondefine HAVE_RANDR15
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `rint' function. */
|
|
||||||
#mesondefine HAVE_RINT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `round' function. */
|
|
||||||
#mesondefine HAVE_ROUND
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `sincos' function. */
|
|
||||||
#mesondefine HAVE_SINCOS
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `log2` function */
|
|
||||||
#mesondefine HAVE_LOG2
|
|
||||||
|
|
||||||
/* Define to 1 if you ahve the `exp2` function */
|
|
||||||
#mesondefine HAVE_EXP2
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdint.h> header file. */
|
|
||||||
#mesondefine HAVE_STDINT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
|
||||||
#mesondefine HAVE_STDLIB_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <strings.h> header file. */
|
|
||||||
#mesondefine HAVE_STRINGS_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <string.h> header file. */
|
|
||||||
#mesondefine HAVE_STRING_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/mman.h> header file. */
|
|
||||||
#mesondefine HAVE_SYS_MMAN_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/param.h> header file. */
|
|
||||||
#mesondefine HAVE_SYS_PARAM_H
|
|
||||||
|
|
||||||
/* Have the sysprof-capture library */
|
|
||||||
#mesondefine HAVE_SYSPROF_CAPTURE
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
|
||||||
#mesondefine HAVE_SYS_STAT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/time.h> header file. */
|
|
||||||
#mesondefine HAVE_SYS_TIME_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
||||||
#mesondefine HAVE_SYS_TYPES_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
|
||||||
#mesondefine HAVE_UNISTD_H
|
|
||||||
|
|
||||||
/* Have the XCOMPOSITE X extension */
|
|
||||||
#mesondefine HAVE_XCOMPOSITE
|
|
||||||
|
|
||||||
/* Have the Xcursor library */
|
|
||||||
#mesondefine HAVE_XCURSOR
|
|
||||||
|
|
||||||
/* Have the XDAMAGE X extension */
|
|
||||||
#mesondefine HAVE_XDAMAGE
|
|
||||||
|
|
||||||
/* Have the XFIXES X extension */
|
|
||||||
#mesondefine HAVE_XFIXES
|
|
||||||
|
|
||||||
/* Define to 1 if XFree Xinerama is available */
|
|
||||||
#mesondefine HAVE_XFREE_XINERAMA
|
|
||||||
|
|
||||||
/* Have XGenericEvent */
|
|
||||||
#mesondefine HAVE_XGENERICEVENTS
|
|
||||||
|
|
||||||
/* Define to use XKB extension */
|
|
||||||
#mesondefine HAVE_XKB
|
|
||||||
|
|
||||||
/* Have the SYNC extension library */
|
|
||||||
#mesondefine HAVE_XSYNC
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `_lock_file' function */
|
|
||||||
#mesondefine HAVE__LOCK_FILE
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `flockfile' function */
|
|
||||||
#mesondefine HAVE_FLOCKFILE
|
|
||||||
|
|
||||||
/* Define if _NL_MEASUREMENT_MEASUREMENT is available */
|
|
||||||
#mesondefine HAVE__NL_MEASUREMENT_MEASUREMENT
|
|
||||||
|
|
||||||
/* Define if _NL_PAPER_HEIGHT is available */
|
|
||||||
#mesondefine HAVE__NL_PAPER_HEIGHT
|
|
||||||
|
|
||||||
/* Define if _NL_PAPER_WIDTH is available */
|
|
||||||
#mesondefine HAVE__NL_PAPER_WIDTH
|
|
||||||
|
|
||||||
/* Define if _NL_TIME_FIRST_WEEKDAY is available */
|
|
||||||
#mesondefine HAVE__NL_TIME_FIRST_WEEKDAY
|
|
||||||
|
|
||||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
|
||||||
#mesondefine LT_OBJDIR
|
|
||||||
|
|
||||||
/* Define if <X11/extensions/XIproto.h> needed for xReply */
|
|
||||||
#mesondefine NEED_XIPROTO_H_FOR_XREPLY
|
|
||||||
|
|
||||||
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
|
|
||||||
#mesondefine NO_MINUS_C_MINUS_O
|
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
|
||||||
#mesondefine PACKAGE_BUGREPORT
|
|
||||||
|
|
||||||
/* Define to the full name of this package. */
|
|
||||||
#mesondefine PACKAGE_NAME
|
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
|
||||||
#mesondefine PACKAGE_STRING
|
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
|
||||||
#mesondefine PACKAGE_TARNAME
|
|
||||||
|
|
||||||
/* Define to the home page for this package. */
|
|
||||||
#mesondefine PACKAGE_URL
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
|
||||||
#mesondefine PACKAGE_VERSION
|
|
||||||
|
|
||||||
/* Use NSBundle functions to determine load paths for libraries, translations,
|
|
||||||
etc. */
|
|
||||||
#mesondefine QUARTZ_RELOCATION
|
|
||||||
|
|
||||||
/* Define to 1 if you have the ANSI C header files. */
|
|
||||||
#mesondefine STDC_HEADERS
|
|
||||||
|
|
||||||
/* Enable extensions on AIX 3, Interix. */
|
|
||||||
#ifndef _ALL_SOURCE
|
|
||||||
# undef _ALL_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable GNU extensions on systems that have them. */
|
|
||||||
#ifndef _GNU_SOURCE
|
|
||||||
# undef _GNU_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable threading extensions on Solaris. */
|
|
||||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
|
||||||
# undef _POSIX_PTHREAD_SEMANTICS
|
|
||||||
#endif
|
|
||||||
/* Enable extensions on HP NonStop. */
|
|
||||||
#ifndef _TANDEM_SOURCE
|
|
||||||
# undef _TANDEM_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable general extensions on Solaris. */
|
|
||||||
#ifndef __EXTENSIONS__
|
|
||||||
# undef __EXTENSIONS__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Define to 1 if XInput 2.2 is available */
|
|
||||||
#mesondefine XINPUT_2_2
|
|
||||||
|
|
||||||
/* Define to 1 if the X Window System is missing or not being used. */
|
|
||||||
#mesondefine X_DISPLAY_MISSING
|
|
||||||
|
|
||||||
/* Enable large inode numbers on Mac OS X 10.5. */
|
|
||||||
#ifndef _DARWIN_USE_64_BIT_INODE
|
|
||||||
# define _DARWIN_USE_64_BIT_INODE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
|
||||||
#mesondefine _FILE_OFFSET_BITS
|
|
||||||
|
|
||||||
/* defines how to decorate public symbols while building */
|
|
||||||
#mesondefine _GDK_EXTERN
|
|
||||||
|
|
||||||
/* Define for large files, on AIX-style hosts. */
|
|
||||||
#mesondefine _LARGE_FILES
|
|
||||||
|
|
||||||
/* Define to 1 if on MINIX. */
|
|
||||||
#mesondefine _MINIX
|
|
||||||
|
|
||||||
/* Define to 2 if the system does not provide POSIX.1 features except with
|
|
||||||
this defined. */
|
|
||||||
#mesondefine _POSIX_1_SOURCE
|
|
||||||
|
|
||||||
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
|
||||||
#mesondefine _POSIX_SOURCE
|
|
||||||
|
|
||||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
|
||||||
#mesondefine gid_t
|
|
||||||
|
|
||||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
|
||||||
#mesondefine uid_t
|
|
||||||
|
|
||||||
/* Define to 1 if linux/memfd.h exists */
|
|
||||||
#mesondefine HAVE_LINUX_MEMFD_H
|
|
||||||
|
|
||||||
#mesondefine HAVE_LINUX_INPUT_H
|
|
||||||
|
|
||||||
#mesondefine HAVE_DEV_EVDEV_INPUT_H
|
|
||||||
|
|
||||||
#mesondefine GTK_SYSCONFDIR
|
|
||||||
|
|
||||||
#mesondefine GTK_LOCALEDIR
|
|
||||||
|
|
||||||
#mesondefine GTK_DATADIR
|
|
||||||
|
|
||||||
#mesondefine GTK_LIBDIR
|
|
||||||
|
|
||||||
#mesondefine GTK_PRINT_BACKENDS
|
|
||||||
|
|
||||||
#mesondefine HAVE_CAIRO_SCRIPT_INTERPRETER
|
|
||||||
|
|
||||||
#mesondefine HAVE_HARFBUZZ
|
|
||||||
|
|
||||||
#mesondefine HAVE_PANGOFT
|
|
||||||
|
|
||||||
#mesondefine ISO_CODES_PREFIX
|
|
296
config.h.win32.in
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
/* config.h.win32.in. Merged from two versions generated by configure for gcc and MSVC. */
|
||||||
|
/* config.h. Generated from config.h.in by configure. */
|
||||||
|
/* config.h.in. Generated from configure.in by autoheader. */
|
||||||
|
|
||||||
|
/* always defined to indicate that i18n is enabled */
|
||||||
|
#define ENABLE_NLS 1
|
||||||
|
|
||||||
|
/* The prefix for our gettext translation domains. */
|
||||||
|
#define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@"
|
||||||
|
|
||||||
|
/* Define if debugging is enabled */
|
||||||
|
#define GTK_COMPILED_WITH_DEBUGGING "yes"
|
||||||
|
|
||||||
|
/* Define the location where the catalogs will be installed */
|
||||||
|
#define GTK_LOCALEDIR "c:/devel/target/HEAD/share/locale"
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `bind_textdomain_codeset' function. */
|
||||||
|
#define HAVE_BIND_TEXTDOMAIN_CODESET 1
|
||||||
|
|
||||||
|
/* Is the wctype implementation broken */
|
||||||
|
/* #undef HAVE_BROKEN_WCTYPE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <crt_externs.h> header file. */
|
||||||
|
/* #undef HAVE_CRT_EXTERNS_H */
|
||||||
|
|
||||||
|
/* Define to 1 if CUPS 1.2 API is available */
|
||||||
|
/* #undef HAVE_CUPS_API_1_2 */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `dcgettext' function. */
|
||||||
|
#define HAVE_DCGETTEXT 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||||
|
/* #undef HAVE_DLFCN_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `flockfile' function. */
|
||||||
|
/* #undef HAVE_FLOCKFILE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <ftw.h> header file. */
|
||||||
|
/* #undef HAVE_FTW_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getc_unlocked' function. */
|
||||||
|
/* #undef HAVE_GETC_UNLOCKED */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getpagesize' function. */
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#define HAVE_GETPAGESIZE 1
|
||||||
|
#else
|
||||||
|
/* #undef HAVE_GETPAGESIZE */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `getresuid' function. */
|
||||||
|
/* #undef HAVE_GETRESUID */
|
||||||
|
|
||||||
|
/* Define if the GNU gettext() function is already present or preinstalled. */
|
||||||
|
#define HAVE_GETTEXT 1
|
||||||
|
|
||||||
|
/* Have GNU ftw */
|
||||||
|
/* #undef HAVE_GNU_FTW */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `httpGetAuthString' function. */
|
||||||
|
/* #undef HAVE_HTTPGETAUTHSTRING */
|
||||||
|
|
||||||
|
/* Define if cups http_t authstring field is accessible */
|
||||||
|
/* #undef HAVE_HTTP_AUTHSTRING */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#define HAVE_INTTYPES_H 1
|
||||||
|
#else
|
||||||
|
/* #undef HAVE_INTTYPES_H */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if ipc.h is available */
|
||||||
|
/* #undef HAVE_IPC_H */
|
||||||
|
|
||||||
|
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
||||||
|
/* #undef HAVE_LC_MESSAGES */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <locale.h> header file. */
|
||||||
|
#define HAVE_LOCALE_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `localtime_r' function. */
|
||||||
|
/* #undef HAVE_LOCALTIME_R */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `lstat' function. */
|
||||||
|
/* #undef HAVE_LSTAT */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mallinfo' function. */
|
||||||
|
/* #undef HAVE_MALLINFO */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#define HAVE_MEMORY_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mkstemp' function. */
|
||||||
|
/* #undef HAVE_MKSTEMP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have a working `mmap' system call. */
|
||||||
|
/* #undef HAVE_MMAP */
|
||||||
|
|
||||||
|
/* Define to 1 is libjpeg supports progressive JPEG */
|
||||||
|
/* #undef HAVE_PROGRESSIVE_JPEG */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <pwd.h> header file. */
|
||||||
|
/* #undef HAVE_PWD_H */
|
||||||
|
|
||||||
|
/* Have the Xrandr extension library */
|
||||||
|
/* #undef HAVE_RANDR */
|
||||||
|
|
||||||
|
/* Define to 1 if the XShape extension is available */
|
||||||
|
/* #undef HAVE_SHAPE_EXT */
|
||||||
|
|
||||||
|
/* Define to 1 if shm.h is available */
|
||||||
|
/* #undef HAVE_SHM_H */
|
||||||
|
|
||||||
|
/* Define to 1 if sigsetjmp is available */
|
||||||
|
/* #undef HAVE_SIGSETJMP */
|
||||||
|
|
||||||
|
/* Have the sockaddr_un.sun_len member */
|
||||||
|
/* #undef HAVE_SOCKADDR_UN_SUN_LEN */
|
||||||
|
|
||||||
|
/* Define to 1 if solaris xinerama is available */
|
||||||
|
/* #undef HAVE_SOLARIS_XINERAMA */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#define HAVE_STDINT_H 1
|
||||||
|
#else
|
||||||
|
/* #undef HAVE_STDINT_H */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
|
#define HAVE_STDLIB_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
|
#define HAVE_STRINGS_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
|
#define HAVE_STRING_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if sys/select.h is available */
|
||||||
|
/* #undef HAVE_SYS_SELECT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#define HAVE_SYS_STAT_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if sys/sysinfo.h is available */
|
||||||
|
/* #undef HAVE_SYS_SYSINFO_H */
|
||||||
|
|
||||||
|
/* Define to 1 if sys/systeminfo.h is available */
|
||||||
|
/* #undef HAVE_SYS_SYSTEMINFO_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#define HAVE_SYS_TIME_H 1
|
||||||
|
#else /* _MSC_VER */
|
||||||
|
/* #undef HAVE_SYS_TIME_H */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#define HAVE_SYS_TYPES_H 1
|
||||||
|
|
||||||
|
/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
|
||||||
|
/* #undef HAVE_SYS_WAIT_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#define HAVE_UNISTD_H 1
|
||||||
|
#else
|
||||||
|
/* #undef HAVE_UNISTD_H */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Have uxtheme.h include file */
|
||||||
|
#define HAVE_UXTHEME_H 1
|
||||||
|
|
||||||
|
/* Have wchar.h include file */
|
||||||
|
#define HAVE_WCHAR_H 1
|
||||||
|
|
||||||
|
/* Have wctype.h include file */
|
||||||
|
#define HAVE_WCTYPE_H 1
|
||||||
|
|
||||||
|
/* Define if we have X11R6 */
|
||||||
|
/* #undef HAVE_X11R6 */
|
||||||
|
|
||||||
|
/* Have the XCOMPOSITE X extension */
|
||||||
|
/* #undef HAVE_XCOMPOSITE */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `XConvertCase' function. */
|
||||||
|
/* #undef HAVE_XCONVERTCASE */
|
||||||
|
|
||||||
|
/* Have the Xcursor library */
|
||||||
|
/* #undef HAVE_XCURSOR */
|
||||||
|
|
||||||
|
/* Have the XDAMAGE X extension */
|
||||||
|
/* #undef HAVE_XDAMAGE */
|
||||||
|
|
||||||
|
/* Have the XFIXES X extension */
|
||||||
|
/* #undef HAVE_XFIXES */
|
||||||
|
|
||||||
|
/* Define to 1 if XFree Xinerama is available */
|
||||||
|
/* #undef HAVE_XFREE_XINERAMA */
|
||||||
|
|
||||||
|
/* Define to 1 is Xinerama is available */
|
||||||
|
/* #undef HAVE_XINERAMA */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `XInternAtoms' function. */
|
||||||
|
/* #undef HAVE_XINTERNATOMS */
|
||||||
|
|
||||||
|
/* Define to use XKB extension */
|
||||||
|
/* #undef HAVE_XKB */
|
||||||
|
|
||||||
|
/* Define to 1 if xshm.h is available */
|
||||||
|
/* #undef HAVE_XSHM_H */
|
||||||
|
|
||||||
|
/* Have the SYNC extension library */
|
||||||
|
/* #undef HAVE_XSYNC */
|
||||||
|
|
||||||
|
/* Define if _NL_MEASUREMENT_MEASUREMENT is available */
|
||||||
|
/* #undef HAVE__NL_MEASUREMENT_MEASUREMENT */
|
||||||
|
|
||||||
|
/* Define if _NL_PAPER_HEIGHT is available */
|
||||||
|
/* #undef HAVE__NL_PAPER_HEIGHT */
|
||||||
|
|
||||||
|
/* Define if _NL_PAPER_WIDTH is available */
|
||||||
|
/* #undef HAVE__NL_PAPER_WIDTH */
|
||||||
|
|
||||||
|
/* Define if _NL_TIME_FIRST_WEEKDAY is available */
|
||||||
|
/* #undef HAVE__NL_TIME_FIRST_WEEKDAY */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `_NSGetEnviron' function. */
|
||||||
|
/* #undef HAVE__NSGETENVIRON */
|
||||||
|
|
||||||
|
/* Define if <X11/extensions/XIproto.h> needed for xReply */
|
||||||
|
/* #undef NEED_XIPROTO_H_FOR_XREPLY */
|
||||||
|
|
||||||
|
/* Define to 1 if fd_set is not available */
|
||||||
|
#define NO_FD_SET 1
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#define PACKAGE_BUGREPORT "http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B"
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#define PACKAGE_NAME "gtk+"
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#define PACKAGE_STRING "gtk+ @GTK_MAJOR_VERSION@.@GTK_MINOR_VERSION@.@GTK_MICRO_VERSION@"
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#define PACKAGE_TARNAME "gtk+"
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#define PACKAGE_VERSION "@GTK_MAJOR_VERSION@.@GTK_MINOR_VERSION@.@GTK_MICRO_VERSION@"
|
||||||
|
|
||||||
|
/* Define as the return type of signal handlers (`int' or `void'). */
|
||||||
|
#define RETSIGTYPE void
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#define STDC_HEADERS 1
|
||||||
|
|
||||||
|
/* Define to 1 if gmodule works and should be used */
|
||||||
|
#define USE_GMODULE 1
|
||||||
|
|
||||||
|
/* Whether to load modules via .la files rather than directly */
|
||||||
|
/* #undef USE_LA_MODULES */
|
||||||
|
|
||||||
|
/* Define to 1 if medialib is available and should be used */
|
||||||
|
/* #undef USE_MEDIALIB */
|
||||||
|
|
||||||
|
/* Define to 1 if medialib 2.5 is available */
|
||||||
|
/* #undef USE_MEDIALIB25 */
|
||||||
|
|
||||||
|
/* Define to 1 if XXM is available and should be used */
|
||||||
|
#define USE_MMX 1
|
||||||
|
|
||||||
|
/* Define to 1 if no XInput should be used */
|
||||||
|
/* #undef XINPUT_NONE */
|
||||||
|
|
||||||
|
/* Define to 1 if XFree XInput should be used */
|
||||||
|
/* #undef XINPUT_XFREE */
|
||||||
|
|
||||||
|
/* Define to 1 if the X Window System is missing or not being used. */
|
||||||
|
/* #undef X_DISPLAY_MISSING */
|
||||||
|
|
||||||
|
/* Number of bits in a file offset, on hosts where this is settable. */
|
||||||
|
/* #undef _FILE_OFFSET_BITS */
|
||||||
|
|
||||||
|
/* Define for large files, on AIX-style hosts. */
|
||||||
|
/* #undef _LARGE_FILES */
|
||||||
|
|
||||||
|
/* Define to empty if `const' does not conform to ANSI C. */
|
||||||
|
/* #undef const */
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
#define gid_t int
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||||
|
#define uid_t int
|
2143
configure.in
Normal file
6
contrib/Makefile.am
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
include $(top_srcdir)/Makefile.decl
|
||||||
|
|
||||||
|
SUBDIRS =
|
||||||
|
if USE_X11
|
||||||
|
SUBDIRS += gdk-pixbuf-xlib
|
||||||
|
endif
|
354
contrib/gdk-pixbuf-xlib/ChangeLog
Normal file
@@ -0,0 +1,354 @@
|
|||||||
|
=== ChangeLog discontinued ===
|
||||||
|
|
||||||
|
With the move to git, GTK+ is switching from a ChangeLog file
|
||||||
|
to relying on commit messages to provide change history. Please
|
||||||
|
see README.commits for guidance on the expected message format.
|
||||||
|
|
||||||
|
2009-03-13 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.16.0 ===
|
||||||
|
|
||||||
|
2009-03-02 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.15.5 ===
|
||||||
|
|
||||||
|
2009-02-17 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.15.4 ===
|
||||||
|
|
||||||
|
2009-02-02 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.15.3 ===
|
||||||
|
|
||||||
|
2009-01-27 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.15.2 ===
|
||||||
|
|
||||||
|
2009-01-23 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.15.1 ===
|
||||||
|
|
||||||
|
2009-01-01 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.15.0 ===
|
||||||
|
|
||||||
|
2008-09-17 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.14.2 ===
|
||||||
|
|
||||||
|
2008-09-04 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.14.1 ===
|
||||||
|
|
||||||
|
2008-09-04 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.14.0 ===
|
||||||
|
|
||||||
|
2008-08-18 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* ==== Released 2.13.7 ===
|
||||||
|
|
||||||
|
2008-08-05 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.13.6 ===
|
||||||
|
|
||||||
|
2008-07-21 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.13.5 ===
|
||||||
|
|
||||||
|
2008-07-05 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.13.4 ===
|
||||||
|
|
||||||
|
2008-06-13 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.13.3 ===
|
||||||
|
|
||||||
|
2008-06-03 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.13.2 ===
|
||||||
|
|
||||||
|
2008-05-29 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.13.1 ===
|
||||||
|
|
||||||
|
2008-05-26 Michael Natterer <mitch@imendio.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlib.h
|
||||||
|
* gdk-pixbuf-xlibrgb.h: use G_BEGIN/END_DECLS.
|
||||||
|
|
||||||
|
2008-02-16 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.13.0 ===
|
||||||
|
|
||||||
|
2007-10-16 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.12.1 ===
|
||||||
|
|
||||||
|
2007-09-13 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.12.0 ===
|
||||||
|
|
||||||
|
2007-07-21 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.11.6 ===
|
||||||
|
|
||||||
|
2007-07-02 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.11.5 ===
|
||||||
|
|
||||||
|
2007-06-19 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.11.4 ===
|
||||||
|
|
||||||
|
2007-06-15 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.11.3 ===
|
||||||
|
|
||||||
|
2007-06-06 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.11.2 ===
|
||||||
|
|
||||||
|
2007-06-04 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.11.1 ===
|
||||||
|
|
||||||
|
2007-05-24 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.11.0 ===
|
||||||
|
|
||||||
|
2006-10-08 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlib.c: Apply a cleanup patch by
|
||||||
|
Kjartan Maraas (#341812)
|
||||||
|
|
||||||
|
2006-08-17 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.10.2 ===
|
||||||
|
|
||||||
|
2006-07-23 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.10.1 ===
|
||||||
|
|
||||||
|
2006-07-02 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.10.0 ===
|
||||||
|
|
||||||
|
2006-06-21 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.9.4 ===
|
||||||
|
|
||||||
|
2006-06-12 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.9.3 ===
|
||||||
|
|
||||||
|
2006-06-05 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.9.2 ===
|
||||||
|
|
||||||
|
2006-05-16 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.9.1 ====
|
||||||
|
|
||||||
|
2006-05-04 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.9.0 ===
|
||||||
|
|
||||||
|
2005-11-17 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlib-drawable.c:
|
||||||
|
* gdk-pixbuf-xlibrgb.c: const correctness fixes
|
||||||
|
found by Arjan van de Ven and gcc.
|
||||||
|
|
||||||
|
2005-10-05 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlib-2.0.pc.in (Requires): Require
|
||||||
|
gmodule-no-export-2.0 instead of gmodule-2.0
|
||||||
|
|
||||||
|
2005-08-24 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.8.2 ===
|
||||||
|
|
||||||
|
* === Released 2.8.1 ===
|
||||||
|
|
||||||
|
2005-08-13 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.8.0 ===
|
||||||
|
|
||||||
|
2005-08-02 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.7.5 ===
|
||||||
|
|
||||||
|
2005-07-22 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.7.4 ===
|
||||||
|
|
||||||
|
2005-07-15 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.7.3 ===
|
||||||
|
|
||||||
|
2005-07-08 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.7.2 ===
|
||||||
|
|
||||||
|
2005-07-01 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.7.1 ===
|
||||||
|
|
||||||
|
2005-06-20 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.7.0 ===
|
||||||
|
|
||||||
|
2005-01-08 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.6.1 ===
|
||||||
|
|
||||||
|
2004-12-16 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.6.0 ===
|
||||||
|
|
||||||
|
2004-12-02 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.5.6 ===
|
||||||
|
|
||||||
|
2004-11-12 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.5.5 ===
|
||||||
|
|
||||||
|
2004-10-27 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.5.4 ===
|
||||||
|
|
||||||
|
2004-09-19 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.5.3 ===
|
||||||
|
|
||||||
|
2004-08-25 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.5.2 ===
|
||||||
|
|
||||||
|
2004-08-01 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.5.1 ===
|
||||||
|
|
||||||
|
Tue Jul 20 23:26:10 2004 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlibrgb.c: Include config.h first. (#148034)
|
||||||
|
|
||||||
|
Sun Jul 18 20:17:41 2004 Soeren Sandmann <sandmann@daimi.au.dk>
|
||||||
|
|
||||||
|
* === released 2.5.0 ==
|
||||||
|
|
||||||
|
Tue Mar 9 09:33:54 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.3.6 ===
|
||||||
|
|
||||||
|
Wed Mar 3 15:50:28 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* Makefile.am (libgdk_pixbuf_xlib_2_0_la_LIBADD): Add
|
||||||
|
a shared library dependency on libgdk-pixbuf (#124687)
|
||||||
|
|
||||||
|
Tue Feb 24 14:45:03 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* === Released 2.3.3 ===
|
||||||
|
|
||||||
|
Fri Feb 13 10:32:09 2004 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlibrgb.h: Remove a couple of unneeded
|
||||||
|
#includes. Isn't unsupported code fun?
|
||||||
|
(133833, Gregory Merchan)
|
||||||
|
|
||||||
|
Tue Oct 7 23:30:00 2003 Matthias Clasen <maclas@gmx.de>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlib.h: Add C++ guards. (123955, Harring Figueiredo)
|
||||||
|
|
||||||
|
2002-08-06 jacob berkman <jacob@ximian.com>
|
||||||
|
|
||||||
|
* Makefile.am (lib_LTLIBRARIES): link against xlibs
|
||||||
|
|
||||||
|
2002-01-25 Federico Mena Quintero <federico@ximian.com>
|
||||||
|
|
||||||
|
Merge from gdk-pixbuf stable.
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlib-drawable.c (rgb565msb): Fixed the endianness
|
||||||
|
conversion --- swap the individual 16 bit values instead of taking
|
||||||
|
everying as a 32 bit value.
|
||||||
|
(rgb565lsb): Likewise.
|
||||||
|
(rgb555lsb): Likewise.
|
||||||
|
(rgb555msb): Likewise.
|
||||||
|
|
||||||
|
2001-11-26 Akira TAGOH <tagoh@redhat.com>
|
||||||
|
|
||||||
|
* Makefile.am (libgdk_pixbuf_xlib_1_3_la_LDFLAGS):
|
||||||
|
Added -version-info.
|
||||||
|
|
||||||
|
2001-05-19 Havoc Pennington <hp@pobox.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlibrgb.c: docs
|
||||||
|
|
||||||
|
2001-06-04 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlibrgb.c (xlib_rgb_init): remove C++ comment,
|
||||||
|
reported by Dan McNichol
|
||||||
|
|
||||||
|
Mon Jan 8 11:41:41 2001 Owen Taylor <otaylor@redhat.com>
|
||||||
|
|
||||||
|
* Makefile.am (INCLUDES): Add @x_cflags@ (#36310)
|
||||||
|
|
||||||
|
2001-01-02 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlib-2.0.pc.in (Description): fix up description a bit.
|
||||||
|
|
||||||
|
2000-10-06 Havoc Pennington <hp@redhat.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf-xlib.c: Put display/screen here, instead of in
|
||||||
|
the main gdk-pixbuf library as it was in 1.0; since the io-xpm
|
||||||
|
loader doesn't use these variables anymore it should be OK
|
||||||
|
|
||||||
|
2000-09-26 Federico Mena Quintero <federico@helixcode.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf/gdk-pixbuf-xlib-drawable.c
|
||||||
|
(gdk_pixbuf_xlib_get_from_drawable): Do not use
|
||||||
|
gdk_screen_{width,height}(). Thanks to John Harper for pointing
|
||||||
|
this out.
|
||||||
|
|
||||||
|
2000-08-26 Federico Mena Quintero <federico@helixcode.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf/gdk-pixbuf-xlibrgb.c: Added API reference docs.
|
||||||
|
|
||||||
|
2000-08-25 Federico Mena Quintero <federico@helixcode.com>
|
||||||
|
|
||||||
|
* gdk-pixbuf/gdk-pixbuf-xlib-drawable.c (handle_x_error): Return
|
||||||
|
0.
|
||||||
|
(xlib_window_is_viewable): Return FALSE in the last case.
|
||||||
|
|
||||||
|
* gdk-pixbuf/gdk-pixbuf-xlib-render.c: Updated the inline docs.
|
||||||
|
|
||||||
|
* gdk-pixbuf/gdk-pixbuf-xlib.c: Added API docs.
|
||||||
|
|
||||||
|
2000-08-25 John Harper <john@dcs.warwick.ac.uk>
|
||||||
|
|
||||||
|
Work to create an Xlib version of gdk-pixbuf (with the Xlib
|
||||||
|
port of GdkRGB for rendering):
|
||||||
|
|
||||||
|
* configure.in: check for X libraries, set and substitute
|
||||||
|
GDK_PIXBUF_XLIB_{LIBDIR,INCLUDEDIR,LIBS} variables
|
||||||
|
|
||||||
|
* gdk_pixbuf_xlibConf.sh.in: new file -- gnome-config details
|
||||||
|
for the gdk-pixbuf-xlib library
|
||||||
|
* Makefile.am: build and install gdk_pixbuf_xlibConf.sh
|
||||||
|
|
||||||
|
* gdk-pixbuf/gdk-pixbuf-xlib-render.c,
|
||||||
|
gdk-pixbuf/gdk-pixbuf-xlib.c, gdk-pixbuf/gdk-pixbuf-xlib.h,
|
||||||
|
gdk-pixbuf/gdk-pixbuf-xlib-private.h,
|
||||||
|
gdk-pixbuf/gdk-pixbuf-xlib-drawable.c: new files, ported the
|
||||||
|
GDK dependent parts of gdk-pixbuf to use Xlib. Functions that
|
||||||
|
were called gdk_pixbuf_FOO are now gdk_pixbuf_xlib_FOO
|
||||||
|
|
||||||
|
* gdk-pixbuf/gdk-pixbuf-xlibrgb.c,
|
||||||
|
gdk-pixbuf/gdk-pixbuf-xlibrgb.h: added Chris Blizzard's Xlib
|
||||||
|
port of GdkRGB (from Mozilla CVS)
|
||||||
|
|
||||||
|
* gdk-pixbuf/Makefile.am: build a library libgdk_pixbuf_xlib.la
|
||||||
|
including the non-GDK dependent objects from libgdk_pixbuf.la
|
||||||
|
plus the Xlib ports and xlibrgb
|
40
contrib/gdk-pixbuf-xlib/Makefile.am
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
include $(top_srcdir)/Makefile.decl
|
||||||
|
|
||||||
|
if PLATFORM_WIN32
|
||||||
|
no_undefined = -no-undefined
|
||||||
|
endif
|
||||||
|
|
||||||
|
lib_LTLIBRARIES=libgdk_pixbuf_xlib-2.0.la
|
||||||
|
|
||||||
|
INCLUDES = \
|
||||||
|
-I$(top_srcdir) -I$(top_builddir) \
|
||||||
|
-I$(top_srcdir)/gdk-pixbuf \
|
||||||
|
-I$(top_srcdir)/contrib \
|
||||||
|
$(GDK_PIXBUF_XLIB_DEP_CFLAGS)
|
||||||
|
|
||||||
|
libgdk_pixbuf_xlib_2_0_la_LDFLAGS = \
|
||||||
|
-export-dynamic \
|
||||||
|
$(no_undefined) \
|
||||||
|
-version-info $(LT_VERSION_INFO)
|
||||||
|
|
||||||
|
libgdk_pixbuf_xlib_2_0_la_LIBADD = \
|
||||||
|
$(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
|
||||||
|
$(GDK_PIXBUF_XLIB_DEP_LIBS)
|
||||||
|
|
||||||
|
libgdk_pixbuf_xlib_2_0_la_SOURCES = \
|
||||||
|
gdk-pixbuf-xlib-private.h \
|
||||||
|
gdk-pixbuf-xlib.c \
|
||||||
|
gdk-pixbuf-xlib-render.c \
|
||||||
|
gdk-pixbuf-xlib-drawable.c \
|
||||||
|
gdk-pixbuf-xlibrgb.c
|
||||||
|
|
||||||
|
libgdk_pixbuf_xlibincludedir=$(includedir)/gtk-2.0/gdk-pixbuf-xlib
|
||||||
|
|
||||||
|
libgdk_pixbuf_xlibinclude_HEADERS = \
|
||||||
|
gdk-pixbuf-xlib.h \
|
||||||
|
gdk-pixbuf-xlibrgb.h
|
||||||
|
|
||||||
|
pkgconfigdir = $(libdir)/pkgconfig
|
||||||
|
pkgconfig_DATA = gdk-pixbuf-xlib-2.0.pc
|
||||||
|
|
||||||
|
EXTRA_DIST += gdk-pixbuf-xlib-2.0.pc.in
|
11
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-2.0.pc.in
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
prefix=@prefix@
|
||||||
|
exec_prefix=@exec_prefix@
|
||||||
|
libdir=@libdir@
|
||||||
|
includedir=@includedir@
|
||||||
|
|
||||||
|
Name: GdkPixbuf Xlib
|
||||||
|
Description: GdkPixbuf rendering for Xlib
|
||||||
|
Version: @VERSION@
|
||||||
|
Requires: gobject-2.0,gmodule-no-export-2.0,gdk-pixbuf-2.0
|
||||||
|
Libs: -L${libdir} -lgdk_pixbuf_xlib-@GTK_API_VERSION@
|
||||||
|
Cflags: -I${includedir}
|
1337
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c
Normal file
30
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-private.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/* GdkPixbuf library - Xlib header file
|
||||||
|
*
|
||||||
|
* Authors: John Harper <john@dcs.warwick.ac.uk>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GDK_PIXBUF_XLIB_PRIVATE_H
|
||||||
|
#define GDK_PIXBUF_XLIB_PRIVATE_H
|
||||||
|
|
||||||
|
#include "gdk-pixbuf-xlib.h"
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
|
extern Display *gdk_pixbuf_dpy;
|
||||||
|
extern int gdk_pixbuf_screen;
|
||||||
|
|
||||||
|
#endif
|
398
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-render.c
Normal file
@@ -0,0 +1,398 @@
|
|||||||
|
/* GdkPixbuf library - Rendering functions
|
||||||
|
*
|
||||||
|
* Copyright (C) 1999 The Free Software Foundation
|
||||||
|
*
|
||||||
|
* Author: Federico Mena-Quintero <federico@gimp.org>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Trivially ported to Xlib(RGB) by John Harper. */
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include "gdk-pixbuf-private.h"
|
||||||
|
#include "gdk-pixbuf-xlib-private.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_pixbuf_xlib_render_threshold_alpha:
|
||||||
|
* @pixbuf: A pixbuf.
|
||||||
|
* @bitmap: Bitmap where the bilevel mask will be painted to.
|
||||||
|
* @src_x: Source X coordinate.
|
||||||
|
* @src_y: source Y coordinate.
|
||||||
|
* @dest_x: Destination X coordinate.
|
||||||
|
* @dest_y: Destination Y coordinate.
|
||||||
|
* @width: Width of region to threshold.
|
||||||
|
* @height: Height of region to threshold.
|
||||||
|
* @alpha_threshold: Opacity values below this will be painted as zero; all
|
||||||
|
* other values will be painted as one.
|
||||||
|
*
|
||||||
|
* Takes the opacity values in a rectangular portion of a pixbuf and thresholds
|
||||||
|
* them to produce a bi-level alpha mask that can be used as a clipping mask for
|
||||||
|
* a drawable.
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_pixbuf_xlib_render_threshold_alpha (GdkPixbuf *pixbuf, Pixmap bitmap,
|
||||||
|
int src_x, int src_y,
|
||||||
|
int dest_x, int dest_y,
|
||||||
|
int width, int height,
|
||||||
|
int alpha_threshold)
|
||||||
|
{
|
||||||
|
GC gc;
|
||||||
|
XColor color;
|
||||||
|
int x, y;
|
||||||
|
guchar *p;
|
||||||
|
int start, start_status;
|
||||||
|
int status;
|
||||||
|
XGCValues gcv;
|
||||||
|
|
||||||
|
g_return_if_fail (pixbuf != NULL);
|
||||||
|
g_return_if_fail (pixbuf->colorspace == GDK_COLORSPACE_RGB);
|
||||||
|
g_return_if_fail (pixbuf->n_channels == 3 || pixbuf->n_channels == 4);
|
||||||
|
g_return_if_fail (pixbuf->bits_per_sample == 8);
|
||||||
|
|
||||||
|
g_return_if_fail (bitmap != 0);
|
||||||
|
g_return_if_fail (width >= 0 && height >= 0);
|
||||||
|
g_return_if_fail (src_x >= 0 && src_x + width <= pixbuf->width);
|
||||||
|
g_return_if_fail (src_y >= 0 && src_y + height <= pixbuf->height);
|
||||||
|
|
||||||
|
g_return_if_fail (alpha_threshold >= 0 && alpha_threshold <= 255);
|
||||||
|
|
||||||
|
if (width == 0 || height == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
gc = XCreateGC (gdk_pixbuf_dpy, bitmap, 0, &gcv);
|
||||||
|
|
||||||
|
if (!pixbuf->has_alpha) {
|
||||||
|
color.pixel = (alpha_threshold == 255) ? 0 : 1;
|
||||||
|
XSetForeground (gdk_pixbuf_dpy, gc, color.pixel);
|
||||||
|
XFillRectangle (gdk_pixbuf_dpy, bitmap, gc,
|
||||||
|
dest_x, dest_y, width, height);
|
||||||
|
XFreeGC (gdk_pixbuf_dpy, gc);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
color.pixel = 0;
|
||||||
|
XSetForeground (gdk_pixbuf_dpy, gc, color.pixel);
|
||||||
|
XFillRectangle (gdk_pixbuf_dpy, bitmap, gc,
|
||||||
|
dest_x, dest_y, width, height);
|
||||||
|
|
||||||
|
color.pixel = 1;
|
||||||
|
XSetForeground (gdk_pixbuf_dpy, gc, color.pixel);
|
||||||
|
|
||||||
|
for (y = 0; y < height; y++) {
|
||||||
|
p = (pixbuf->pixels + (y + src_y) * pixbuf->rowstride + src_x * pixbuf->n_channels
|
||||||
|
+ pixbuf->n_channels - 1);
|
||||||
|
|
||||||
|
start = 0;
|
||||||
|
start_status = *p < alpha_threshold;
|
||||||
|
|
||||||
|
for (x = 0; x < width; x++) {
|
||||||
|
status = *p < alpha_threshold;
|
||||||
|
|
||||||
|
if (status != start_status) {
|
||||||
|
if (!start_status)
|
||||||
|
XDrawLine (gdk_pixbuf_dpy, bitmap, gc,
|
||||||
|
start + dest_x, y + dest_y,
|
||||||
|
x - 1 + dest_x, y + dest_y);
|
||||||
|
|
||||||
|
start = x;
|
||||||
|
start_status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
p += pixbuf->n_channels;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!start_status)
|
||||||
|
XDrawLine (gdk_pixbuf_dpy, bitmap, gc,
|
||||||
|
start + dest_x, y + dest_y,
|
||||||
|
x - 1 + dest_x, y + dest_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
XFreeGC (gdk_pixbuf_dpy, gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Creates a buffer by stripping the alpha channel of a pixbuf */
|
||||||
|
static guchar *
|
||||||
|
remove_alpha (GdkPixbuf *pixbuf, int x, int y, int width, int height, int *rowstride)
|
||||||
|
{
|
||||||
|
guchar *buf;
|
||||||
|
int xx, yy;
|
||||||
|
guchar *src, *dest;
|
||||||
|
|
||||||
|
g_assert (pixbuf->n_channels == 4);
|
||||||
|
g_assert (pixbuf->has_alpha);
|
||||||
|
g_assert (width > 0 && height > 0);
|
||||||
|
g_assert (x >= 0 && x + width <= pixbuf->width);
|
||||||
|
g_assert (y >= 0 && y + height <= pixbuf->height);
|
||||||
|
|
||||||
|
*rowstride = 4 * ((width * 3 + 3) / 4);
|
||||||
|
|
||||||
|
buf = g_new (guchar, *rowstride * height);
|
||||||
|
|
||||||
|
for (yy = 0; yy < height; yy++) {
|
||||||
|
src = pixbuf->pixels + pixbuf->rowstride * (yy + y) + x * pixbuf->n_channels;
|
||||||
|
dest = buf + *rowstride * yy;
|
||||||
|
|
||||||
|
for (xx = 0; xx < width; xx++) {
|
||||||
|
*dest++ = *src++;
|
||||||
|
*dest++ = *src++;
|
||||||
|
*dest++ = *src++;
|
||||||
|
src++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_pixbuf_xlib_render_to_drawable:
|
||||||
|
* @pixbuf: A pixbuf.
|
||||||
|
* @drawable: Destination drawable.
|
||||||
|
* @gc: GC used for rendering.
|
||||||
|
* @src_x: Source X coordinate within pixbuf.
|
||||||
|
* @src_y: Source Y coordinate within pixbuf.
|
||||||
|
* @dest_x: Destination X coordinate within drawable.
|
||||||
|
* @dest_y: Destination Y coordinate within drawable.
|
||||||
|
* @width: Width of region to render, in pixels.
|
||||||
|
* @height: Height of region to render, in pixels.
|
||||||
|
* @dither: Dithering mode for XlibRGB.
|
||||||
|
* @x_dither: X offset for dither.
|
||||||
|
* @y_dither: Y offset for dither.
|
||||||
|
*
|
||||||
|
* Renders a rectangular portion of a pixbuf to a drawable while using the
|
||||||
|
* specified GC. This is done using XlibRGB, so the specified drawable must
|
||||||
|
* have the XlibRGB visual and colormap. Note that this function will ignore
|
||||||
|
* the opacity information for images with an alpha channel; the GC must already
|
||||||
|
* have the clipping mask set if you want transparent regions to show through.
|
||||||
|
*
|
||||||
|
* For an explanation of dither offsets, see the XlibRGB documentation. In
|
||||||
|
* brief, the dither offset is important when re-rendering partial regions of an
|
||||||
|
* image to a rendered version of the full image, or for when the offsets to a
|
||||||
|
* base position change, as in scrolling. The dither matrix has to be shifted
|
||||||
|
* for consistent visual results. If you do not have any of these cases, the
|
||||||
|
* dither offsets can be both zero.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_pixbuf_xlib_render_to_drawable (GdkPixbuf *pixbuf,
|
||||||
|
Drawable drawable, GC gc,
|
||||||
|
int src_x, int src_y,
|
||||||
|
int dest_x, int dest_y,
|
||||||
|
int width, int height,
|
||||||
|
XlibRgbDither dither,
|
||||||
|
int x_dither, int y_dither)
|
||||||
|
{
|
||||||
|
guchar *buf;
|
||||||
|
int rowstride;
|
||||||
|
|
||||||
|
g_return_if_fail (pixbuf != NULL);
|
||||||
|
g_return_if_fail (pixbuf->colorspace == GDK_COLORSPACE_RGB);
|
||||||
|
g_return_if_fail (pixbuf->n_channels == 3 || pixbuf->n_channels == 4);
|
||||||
|
g_return_if_fail (pixbuf->bits_per_sample == 8);
|
||||||
|
|
||||||
|
g_return_if_fail (drawable != 0);
|
||||||
|
g_return_if_fail (gc != 0);
|
||||||
|
|
||||||
|
g_return_if_fail (width >= 0 && height >= 0);
|
||||||
|
g_return_if_fail (src_x >= 0 && src_x + width <= pixbuf->width);
|
||||||
|
g_return_if_fail (src_y >= 0 && src_y + height <= pixbuf->height);
|
||||||
|
|
||||||
|
if (width == 0 || height == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* This will have to be modified once we support other image types.
|
||||||
|
* Also, GdkRGB does not have gdk_draw_rgb_32_image_dithalign(), so we
|
||||||
|
* have to pack the buffer first. Sigh.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (pixbuf->has_alpha)
|
||||||
|
buf = remove_alpha (pixbuf, src_x, src_y, width, height, &rowstride);
|
||||||
|
else {
|
||||||
|
buf = pixbuf->pixels + src_y * pixbuf->rowstride + src_x * 3;
|
||||||
|
rowstride = pixbuf->rowstride;
|
||||||
|
}
|
||||||
|
|
||||||
|
xlib_draw_rgb_image_dithalign (drawable, gc,
|
||||||
|
dest_x, dest_y,
|
||||||
|
width, height,
|
||||||
|
dither,
|
||||||
|
buf, rowstride,
|
||||||
|
x_dither, y_dither);
|
||||||
|
|
||||||
|
if (pixbuf->has_alpha)
|
||||||
|
g_free (buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_pixbuf_xlib_render_to_drawable_alpha:
|
||||||
|
* @pixbuf: A pixbuf.
|
||||||
|
* @drawable: Destination drawable.
|
||||||
|
* @src_x: Source X coordinate within pixbuf.
|
||||||
|
* @src_y: Source Y coordinates within pixbuf.
|
||||||
|
* @dest_x: Destination X coordinate within drawable.
|
||||||
|
* @dest_y: Destination Y coordinate within drawable.
|
||||||
|
* @width: Width of region to render, in pixels.
|
||||||
|
* @height: Height of region to render, in pixels.
|
||||||
|
* @alpha_mode: If the image does not have opacity information, this is ignored.
|
||||||
|
* Otherwise, specifies how to handle transparency when rendering.
|
||||||
|
* @alpha_threshold: If the image does have opacity information and @alpha_mode
|
||||||
|
* is GDK_PIXBUF_ALPHA_BILEVEL, specifies the threshold value for opacity
|
||||||
|
* values.
|
||||||
|
* @dither: Dithering mode for XlibRGB.
|
||||||
|
* @x_dither: X offset for dither.
|
||||||
|
* @y_dither: Y offset for dither.
|
||||||
|
*
|
||||||
|
* Renders a rectangular portion of a pixbuf to a drawable. This is done using
|
||||||
|
* XlibRGB, so the specified drawable must have the XlibRGB visual and colormap.
|
||||||
|
*
|
||||||
|
* When used with #GDK_PIXBUF_ALPHA_BILEVEL, this function has to create a bitmap
|
||||||
|
* out of the thresholded alpha channel of the image and, it has to set this
|
||||||
|
* bitmap as the clipping mask for the GC used for drawing. This can be a
|
||||||
|
* significant performance penalty depending on the size and the complexity of
|
||||||
|
* the alpha channel of the image. If performance is crucial, consider handling
|
||||||
|
* the alpha channel yourself (possibly by caching it in your application) and
|
||||||
|
* using gdk_pixbuf_xlib_render_to_drawable() or GdkRGB directly instead.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_pixbuf_xlib_render_to_drawable_alpha (GdkPixbuf *pixbuf, Drawable drawable,
|
||||||
|
int src_x, int src_y,
|
||||||
|
int dest_x, int dest_y,
|
||||||
|
int width, int height,
|
||||||
|
GdkPixbufAlphaMode alpha_mode,
|
||||||
|
int alpha_threshold,
|
||||||
|
XlibRgbDither dither,
|
||||||
|
int x_dither, int y_dither)
|
||||||
|
{
|
||||||
|
Pixmap bitmap = 0;
|
||||||
|
GC gc;
|
||||||
|
XGCValues gcv;
|
||||||
|
|
||||||
|
g_return_if_fail (pixbuf != NULL);
|
||||||
|
g_return_if_fail (pixbuf->colorspace == GDK_COLORSPACE_RGB);
|
||||||
|
g_return_if_fail (pixbuf->n_channels == 3 || pixbuf->n_channels == 4);
|
||||||
|
g_return_if_fail (pixbuf->bits_per_sample == 8);
|
||||||
|
|
||||||
|
g_return_if_fail (drawable != 0);
|
||||||
|
g_return_if_fail (width >= 0 && height >= 0);
|
||||||
|
g_return_if_fail (src_x >= 0 && src_x + width <= pixbuf->width);
|
||||||
|
g_return_if_fail (src_y >= 0 && src_y + height <= pixbuf->height);
|
||||||
|
|
||||||
|
if (width == 0 || height == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
gc = XCreateGC (gdk_pixbuf_dpy, drawable, 0, &gcv);
|
||||||
|
|
||||||
|
if (pixbuf->has_alpha) {
|
||||||
|
/* Right now we only support GDK_PIXBUF_ALPHA_BILEVEL, so we
|
||||||
|
* unconditionally create the clipping mask.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bitmap = XCreatePixmap (gdk_pixbuf_dpy,
|
||||||
|
RootWindow (gdk_pixbuf_dpy,
|
||||||
|
gdk_pixbuf_screen),
|
||||||
|
width, height, 1);
|
||||||
|
gdk_pixbuf_xlib_render_threshold_alpha (pixbuf, bitmap,
|
||||||
|
src_x, src_y,
|
||||||
|
0, 0,
|
||||||
|
width, height,
|
||||||
|
alpha_threshold);
|
||||||
|
|
||||||
|
XSetClipMask (gdk_pixbuf_dpy, gc, bitmap);
|
||||||
|
XSetClipOrigin (gdk_pixbuf_dpy, gc, dest_x, dest_y);
|
||||||
|
}
|
||||||
|
|
||||||
|
gdk_pixbuf_xlib_render_to_drawable (pixbuf, drawable, gc,
|
||||||
|
src_x, src_y,
|
||||||
|
dest_x, dest_y,
|
||||||
|
width, height,
|
||||||
|
dither,
|
||||||
|
x_dither, y_dither);
|
||||||
|
|
||||||
|
if (bitmap)
|
||||||
|
XFreePixmap (gdk_pixbuf_dpy, bitmap);
|
||||||
|
|
||||||
|
XFreeGC (gdk_pixbuf_dpy, gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_pixbuf_xlib_render_pixmap_and_mask:
|
||||||
|
* @pixbuf: A pixbuf.
|
||||||
|
* @pixmap_return: Return value for the created pixmap.
|
||||||
|
* @mask_return: Return value for the created mask.
|
||||||
|
* @alpha_threshold: Threshold value for opacity values.
|
||||||
|
*
|
||||||
|
* Creates a pixmap and a mask bitmap which are returned in the @pixmap_return
|
||||||
|
* and @mask_return arguments, respectively, and renders a pixbuf and its
|
||||||
|
* corresponding tresholded alpha mask to them. This is merely a convenience
|
||||||
|
* function; applications that need to render pixbufs with dither offsets or to
|
||||||
|
* given drawables should use gdk_pixbuf_xlib_render_to_drawable_alpha() or
|
||||||
|
* gdk_pixbuf_xlib_render_to_drawable(), and
|
||||||
|
* gdk_pixbuf_xlib_render_threshold_alpha().
|
||||||
|
*
|
||||||
|
* If the pixbuf does not have an alpha channel, then *@mask_return will be set
|
||||||
|
* to None.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_pixbuf_xlib_render_pixmap_and_mask (GdkPixbuf *pixbuf,
|
||||||
|
Pixmap *pixmap_return,
|
||||||
|
Pixmap *mask_return,
|
||||||
|
int alpha_threshold)
|
||||||
|
{
|
||||||
|
g_return_if_fail (pixbuf != NULL);
|
||||||
|
|
||||||
|
if (pixmap_return) {
|
||||||
|
GC gc;
|
||||||
|
XGCValues gcv;
|
||||||
|
|
||||||
|
*pixmap_return = XCreatePixmap (gdk_pixbuf_dpy,
|
||||||
|
RootWindow (gdk_pixbuf_dpy,
|
||||||
|
gdk_pixbuf_screen),
|
||||||
|
pixbuf->width,
|
||||||
|
pixbuf->height,
|
||||||
|
xlib_rgb_get_depth ());
|
||||||
|
gc = XCreateGC (gdk_pixbuf_dpy, *pixmap_return, 0, &gcv);
|
||||||
|
gdk_pixbuf_xlib_render_to_drawable (pixbuf, *pixmap_return, gc,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
pixbuf->width,
|
||||||
|
pixbuf->height,
|
||||||
|
XLIB_RGB_DITHER_NORMAL,
|
||||||
|
0, 0);
|
||||||
|
XFreeGC (gdk_pixbuf_dpy, gc);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mask_return) {
|
||||||
|
if (pixbuf->has_alpha) {
|
||||||
|
*mask_return = XCreatePixmap (gdk_pixbuf_dpy,
|
||||||
|
RootWindow (gdk_pixbuf_dpy,
|
||||||
|
gdk_pixbuf_screen),
|
||||||
|
pixbuf->width,
|
||||||
|
pixbuf->height, 1);
|
||||||
|
gdk_pixbuf_xlib_render_threshold_alpha (pixbuf,
|
||||||
|
*mask_return,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
pixbuf->width,
|
||||||
|
pixbuf->height,
|
||||||
|
alpha_threshold);
|
||||||
|
} else
|
||||||
|
*mask_return = 0;
|
||||||
|
}
|
||||||
|
}
|
63
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib.c
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/* GdkPixbuf library - Initialization functions
|
||||||
|
*
|
||||||
|
* Author: John Harper <john@dcs.warwick.ac.uk>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <gdk-pixbuf/gdk-pixbuf-private.h>
|
||||||
|
#include "gdk-pixbuf-xlib-private.h"
|
||||||
|
|
||||||
|
Display *gdk_pixbuf_dpy = NULL;
|
||||||
|
int gdk_pixbuf_screen = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_pixbuf_xlib_init:
|
||||||
|
* @display: X display to use.
|
||||||
|
* @screen_num: Screen number.
|
||||||
|
*
|
||||||
|
* Initializes the gdk-pixbuf Xlib machinery by calling xlib_rgb_init(). This
|
||||||
|
* function should be called near the beginning of your program, or before using
|
||||||
|
* any of the gdk-pixbuf-xlib functions.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_pixbuf_xlib_init (Display *display, int screen_num)
|
||||||
|
{
|
||||||
|
xlib_rgb_init (display, ScreenOfDisplay (display, screen_num));
|
||||||
|
gdk_pixbuf_dpy = display;
|
||||||
|
gdk_pixbuf_screen = screen_num;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gdk_pixbuf_xlib_init_with_depth:
|
||||||
|
* @display: X display to use.
|
||||||
|
* @screen_num: Screen number.
|
||||||
|
* @prefDepth: Preferred depth for XlibRGB.
|
||||||
|
*
|
||||||
|
* Similar to gdk_pixbuf_xlib_init(), but also lets you specify the preferred
|
||||||
|
* depth for XlibRGB if you do not want it to use the default depth it picks.
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gdk_pixbuf_xlib_init_with_depth (Display *display,
|
||||||
|
int screen_num, int prefDepth)
|
||||||
|
{
|
||||||
|
xlib_rgb_init_with_depth (display, ScreenOfDisplay (display, screen_num),
|
||||||
|
prefDepth);
|
||||||
|
gdk_pixbuf_dpy = display;
|
||||||
|
gdk_pixbuf_screen = screen_num;
|
||||||
|
}
|
87
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib.h
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
/* GdkPixbuf library - Xlib header file
|
||||||
|
*
|
||||||
|
* Authors: John Harper <john@dcs.warwick.ac.uk>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Library General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Library General Public
|
||||||
|
* License along with this library; if not, write to the
|
||||||
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
* Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GDK_PIXBUF_XLIB_H
|
||||||
|
#define GDK_PIXBUF_XLIB_H
|
||||||
|
|
||||||
|
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||||
|
#include <gdk-pixbuf-xlib/gdk-pixbuf-xlibrgb.h>
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* init */
|
||||||
|
|
||||||
|
void gdk_pixbuf_xlib_init (Display *display, int screen_num);
|
||||||
|
|
||||||
|
void gdk_pixbuf_xlib_init_with_depth (Display *display, int screen_num,
|
||||||
|
int prefDepth);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* render */
|
||||||
|
|
||||||
|
void gdk_pixbuf_xlib_render_threshold_alpha (GdkPixbuf *pixbuf, Pixmap bitmap,
|
||||||
|
int src_x, int src_y,
|
||||||
|
int dest_x, int dest_y,
|
||||||
|
int width, int height,
|
||||||
|
int alpha_threshold);
|
||||||
|
|
||||||
|
void gdk_pixbuf_xlib_render_to_drawable (GdkPixbuf *pixbuf,
|
||||||
|
Drawable drawable, GC gc,
|
||||||
|
int src_x, int src_y,
|
||||||
|
int dest_x, int dest_y,
|
||||||
|
int width, int height,
|
||||||
|
XlibRgbDither dither,
|
||||||
|
int x_dither, int y_dither);
|
||||||
|
|
||||||
|
|
||||||
|
void gdk_pixbuf_xlib_render_to_drawable_alpha (GdkPixbuf *pixbuf,
|
||||||
|
Drawable drawable,
|
||||||
|
int src_x, int src_y,
|
||||||
|
int dest_x, int dest_y,
|
||||||
|
int width, int height,
|
||||||
|
GdkPixbufAlphaMode alpha_mode,
|
||||||
|
int alpha_threshold,
|
||||||
|
XlibRgbDither dither,
|
||||||
|
int x_dither, int y_dither);
|
||||||
|
|
||||||
|
void gdk_pixbuf_xlib_render_pixmap_and_mask (GdkPixbuf *pixbuf,
|
||||||
|
Pixmap *pixmap_return,
|
||||||
|
Pixmap *mask_return,
|
||||||
|
int alpha_threshold);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* drawable */
|
||||||
|
|
||||||
|
GdkPixbuf *gdk_pixbuf_xlib_get_from_drawable (GdkPixbuf *dest,
|
||||||
|
Drawable src,
|
||||||
|
Colormap cmap, Visual *visual,
|
||||||
|
int src_x, int src_y,
|
||||||
|
int dest_x, int dest_y,
|
||||||
|
int width, int height);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* GDK_PIXBUF_XLIB_H */
|
3724
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlibrgb.c
Normal file
188
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlibrgb.h
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||||
|
*
|
||||||
|
* The contents of this file are subject to the Mozilla Public License
|
||||||
|
* Version 1.1 (the "MPL"); you may not use this file except in
|
||||||
|
* compliance with the MPL. You may obtain a copy of the MPL at
|
||||||
|
* http://www.mozilla.org/MPL/
|
||||||
|
*
|
||||||
|
* Software distributed under the MPL is distributed on an "AS IS" basis,
|
||||||
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the MPL
|
||||||
|
* for the specific language governing rights and limitations under the
|
||||||
|
* MPL.
|
||||||
|
*
|
||||||
|
* Alternatively, the contents of this file may be used under the
|
||||||
|
* terms of the GNU Library General Public License (the "LGPL"), in
|
||||||
|
* which case the provisions of the LGPL are applicable instead of
|
||||||
|
* those above. If you wish to allow use of your version of this file
|
||||||
|
* only under the terms of the LGPL and not to allow others to use
|
||||||
|
* your version of this file under the MPL, indicate your decision by
|
||||||
|
* deleting the provisions above and replace them with the notice and
|
||||||
|
* other provisions required by the LGPL. If you do not delete the
|
||||||
|
* provisions above, a recipient may use your version of this file
|
||||||
|
* under either the MPL or the LGPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This code is derived from GdkRgb.
|
||||||
|
* For more information on GdkRgb, see http://www.levien.com/gdkrgb/
|
||||||
|
* Raph Levien <raph@acm.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Ported by Christopher Blizzard to Xlib. With permission from the
|
||||||
|
* original authors of this file, the contents of this file are also
|
||||||
|
* redistributable under the terms of the Mozilla Public license. For
|
||||||
|
* information about the Mozilla Public License, please see the
|
||||||
|
* license information at http://www.mozilla.org/MPL/
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This code is copyright the following authors:
|
||||||
|
* Raph Levien <raph@acm.org>
|
||||||
|
* Manish Singh <manish@gtk.org>
|
||||||
|
* Tim Janik <timj@gtk.org>
|
||||||
|
* Peter Mattis <petm@xcf.berkeley.edu>
|
||||||
|
* Spencer Kimball <spencer@xcf.berkeley.edu>
|
||||||
|
* Josh MacDonald <jmacd@xcf.berkeley.edu>
|
||||||
|
* Christopher Blizzard <blizzard@redhat.com>
|
||||||
|
* Owen Taylor <otaylor@redhat.com>
|
||||||
|
* Shawn T. Amundson <amundson@gtk.org>
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef __XLIB_RGB_H__
|
||||||
|
#define __XLIB_RGB_H__
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
|
typedef struct _XlibRgbCmap XlibRgbCmap;
|
||||||
|
|
||||||
|
struct _XlibRgbCmap {
|
||||||
|
unsigned int colors[256];
|
||||||
|
unsigned char lut[256]; /* for 8-bit modes */
|
||||||
|
};
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_rgb_init (Display *display, Screen *screen);
|
||||||
|
void
|
||||||
|
xlib_rgb_init_with_depth (Display *display, Screen *screen, int prefDepth);
|
||||||
|
|
||||||
|
unsigned long
|
||||||
|
xlib_rgb_xpixel_from_rgb (guint32 rgb);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_rgb_gc_set_foreground (GC gc, guint32 rgb);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_rgb_gc_set_background (GC gc, guint32 rgb);
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
XLIB_RGB_DITHER_NONE,
|
||||||
|
XLIB_RGB_DITHER_NORMAL,
|
||||||
|
XLIB_RGB_DITHER_MAX
|
||||||
|
} XlibRgbDither;
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_draw_rgb_image (Drawable drawable,
|
||||||
|
GC gc,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
XlibRgbDither dith,
|
||||||
|
unsigned char *rgb_buf,
|
||||||
|
int rowstride);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_draw_rgb_image_dithalign (Drawable drawable,
|
||||||
|
GC gc,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
XlibRgbDither dith,
|
||||||
|
unsigned char *rgb_buf,
|
||||||
|
int rowstride,
|
||||||
|
int xdith,
|
||||||
|
int ydith);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_draw_rgb_32_image (Drawable drawable,
|
||||||
|
GC gc,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
XlibRgbDither dith,
|
||||||
|
unsigned char *buf,
|
||||||
|
int rowstride);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_draw_gray_image (Drawable drawable,
|
||||||
|
GC gc,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
XlibRgbDither dith,
|
||||||
|
unsigned char *buf,
|
||||||
|
int rowstride);
|
||||||
|
|
||||||
|
XlibRgbCmap *
|
||||||
|
xlib_rgb_cmap_new (guint32 *colors, int n_colors);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_rgb_cmap_free (XlibRgbCmap *cmap);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_draw_indexed_image (Drawable drawable,
|
||||||
|
GC gc,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
XlibRgbDither dith,
|
||||||
|
unsigned char *buf,
|
||||||
|
int rowstride,
|
||||||
|
XlibRgbCmap *cmap);
|
||||||
|
|
||||||
|
/* Below are some functions which are primarily useful for debugging
|
||||||
|
and experimentation. */
|
||||||
|
Bool
|
||||||
|
xlib_rgb_ditherable (void);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_rgb_set_verbose (Bool verbose);
|
||||||
|
|
||||||
|
/* experimental colormap stuff */
|
||||||
|
void
|
||||||
|
xlib_rgb_set_install (Bool install);
|
||||||
|
|
||||||
|
void
|
||||||
|
xlib_rgb_set_min_colors (int min_colors);
|
||||||
|
|
||||||
|
Colormap
|
||||||
|
xlib_rgb_get_cmap (void);
|
||||||
|
|
||||||
|
Visual *
|
||||||
|
xlib_rgb_get_visual (void);
|
||||||
|
|
||||||
|
XVisualInfo *
|
||||||
|
xlib_rgb_get_visual_info (void);
|
||||||
|
|
||||||
|
int
|
||||||
|
xlib_rgb_get_depth (void);
|
||||||
|
|
||||||
|
Display *
|
||||||
|
xlib_rgb_get_display (void);
|
||||||
|
|
||||||
|
Screen *
|
||||||
|
xlib_rgb_get_screen (void);
|
||||||
|
|
||||||
|
G_END_DECLS
|
||||||
|
|
||||||
|
#endif /* __XLIB_RGB_H__ */
|
18
debian/README.debian
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
libgtk1 for Debian
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
The GIMP Tool Kit (gtk) is a set of widgets to help you program
|
||||||
|
programs for the X Windowing System easily and powerfully.
|
||||||
|
|
||||||
|
gtk is the moving force behind The GNU Image Manipulation Program (The
|
||||||
|
GIMP) -- the number one freely-available image editing and creation
|
||||||
|
program available.
|
||||||
|
|
||||||
|
gtk is rapidly under development, and the source tree has officially
|
||||||
|
been separated from The GIMP now, as other teams of programmers
|
||||||
|
are beginning to write software using its great widget set -- like
|
||||||
|
GNOME, a desktop interface for X, and gzilla, a freely available
|
||||||
|
web browser for X.
|
||||||
|
|
||||||
|
Ben Gertzfield <che@debian.org>, Mon, 29 Sep 1997 13:11:45 -0700
|
||||||
|
|
62
debian/build
vendored
Executable file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
# Adjust debian/changelog and build a new
|
||||||
|
# Debian package of a CVS archive.
|
||||||
|
|
||||||
|
# Written 17 November 1998 by Ben Gertzfield
|
||||||
|
# <che@debian.org>
|
||||||
|
|
||||||
|
# This work is released under the GNU
|
||||||
|
# General Public License, version 2 or
|
||||||
|
# later.
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use diagnostics;
|
||||||
|
use File::Copy;
|
||||||
|
|
||||||
|
my $maintainer = 'Ben Gertzfield <che@debian.org>';
|
||||||
|
|
||||||
|
my @date = localtime;
|
||||||
|
|
||||||
|
my $datestr = sprintf("%d%.2d%.2d", $date[5] + 1900, $date[4] + 1, $date[3]);
|
||||||
|
my $revision = '01';
|
||||||
|
|
||||||
|
open (CHANGELOG, 'debian/changelog') or die "Couldn't open debian/changelog: $!\n";
|
||||||
|
|
||||||
|
$_ = <CHANGELOG>;
|
||||||
|
chomp;
|
||||||
|
|
||||||
|
close CHANGELOG;
|
||||||
|
|
||||||
|
my ($package, $last_date, $last_revision) = /^(.*?) \((.*?)\.(.*)?\)/;
|
||||||
|
|
||||||
|
if ($last_date eq $datestr) {
|
||||||
|
$revision = sprintf("%.2d", $last_revision + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
my $new_version = "$datestr.$revision";
|
||||||
|
|
||||||
|
copy('debian/changelog', 'debian/changelog.old') or die "Couldn't copy debian/changelog to debian/changelog.old: $!\n";
|
||||||
|
|
||||||
|
open(NEWCHANGELOG, ">debian/changelog") or die "Couldn't open debian/changelog for writing: $!\n";
|
||||||
|
|
||||||
|
print NEWCHANGELOG "$package ($new_version) unstable; urgency=low\n\n * CVS snapshot build at " . scalar localtime() . "\n\n -- $maintainer " . `date -R` . "\n";
|
||||||
|
|
||||||
|
open(OLDCHANGELOG, "debian/changelog.old") or die "Couldn't open debian/changelog.old: $!\n";
|
||||||
|
|
||||||
|
while (<OLDCHANGELOG>) {
|
||||||
|
print NEWCHANGELOG;
|
||||||
|
}
|
||||||
|
|
||||||
|
close OLDCHANGELOG;
|
||||||
|
close NEWCHANGELOG;
|
||||||
|
|
||||||
|
unlink('debian/changelog.old') or die "Couldn't unlink debian/changelog.old: $!\n";
|
||||||
|
|
||||||
|
open(NEWVERSION, '>debian/version') or die "Couldn't open debian/version for writing: $!\n";
|
||||||
|
print NEWVERSION "$new_version\n";
|
||||||
|
close NEWVERSION;
|
||||||
|
|
||||||
|
system('dpkg-buildpackage -b -rfakeroot -us -uc');
|
||||||
|
unlink 'debian/version' or die "Couldn't unlink debian/version: $!\n";
|
||||||
|
|
10
debian/changelog
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
gtk+-cvs (19981116.01) unstable; urgency=low
|
||||||
|
|
||||||
|
* First test build from CVS
|
||||||
|
|
||||||
|
-- Ben Gertzfield <che@debian.org> Tue, 17 Nov 1998 12:02:13 -0800
|
||||||
|
|
||||||
|
Local variables:
|
||||||
|
mode: debian-changelog
|
||||||
|
add-log-mailing-address: "che@debian.org"
|
||||||
|
End:
|
81
debian/control
vendored
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
Source: gtk+-cvs
|
||||||
|
Priority: extra
|
||||||
|
Section: libs
|
||||||
|
Maintainer: Ben Gertzfield <che@debian.org>
|
||||||
|
Standards-Version: 2.4.0.0
|
||||||
|
|
||||||
|
Package: libgtk-cvs-1.1
|
||||||
|
Architecture: any
|
||||||
|
Section: libs
|
||||||
|
Depends: ${shlibs:Depends}
|
||||||
|
Conflicts: libgtk-dev (<< 1:1.0.2), libgtk1.1
|
||||||
|
Description: CVS build of the GIMP Toolkit set of widgets for X
|
||||||
|
**THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
|
||||||
|
BUILD OF THE GTK+ LIBRARIES! BEWARE! IT MAY NOT WORK!**
|
||||||
|
.
|
||||||
|
The GIMP Toolkit is a freely available set of widgets for X.
|
||||||
|
GTK is easy to use, and has been implemented in such projects as
|
||||||
|
The GNU Image Manipulation Program (The GIMP), GNOME, a GNU
|
||||||
|
desktop set of utilities for X, and gzilla, a GNU web-browser.
|
||||||
|
.
|
||||||
|
This is the unstable 1.1 branch of GTK. It is not intended for use
|
||||||
|
with stable projects!
|
||||||
|
|
||||||
|
Package: libgtk-cvs-dev
|
||||||
|
Architecture: any
|
||||||
|
Section: devel
|
||||||
|
Depends: libgtk-cvs-1.1 (=${Source-Version}), libglib-cvs-dev
|
||||||
|
Suggests: libgtk-cvs-doc
|
||||||
|
Provides: libgtk1.1-dev
|
||||||
|
Replaces: libgtk1.1-dev
|
||||||
|
Conflicts: libgtk-dev, libgtk1 (<< 1:1.0.4), libgtk1.1-dev
|
||||||
|
Description: CVS build of development files for the GIMP Toolkit
|
||||||
|
**THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
|
||||||
|
BUILD OF THE GTK+ LIBRARIES! BEWARE! IT MAY NOT WORK!**
|
||||||
|
.
|
||||||
|
This package contains the header files and static libraries for the
|
||||||
|
GIMP Toolkit set of widgets for X.
|
||||||
|
.
|
||||||
|
This is the unstable, 1.1 branch of GTK+. This is not intended for
|
||||||
|
use with stable releases of programs!
|
||||||
|
.
|
||||||
|
Install this package if you wish to develop your own X programs using
|
||||||
|
the GIMP Toolkit 1.1, or if you wish to compile your own plug-ins for
|
||||||
|
The GIMP.
|
||||||
|
|
||||||
|
Package: libgtk-cvs-doc
|
||||||
|
Architecture: all
|
||||||
|
Section: doc
|
||||||
|
Conflicts: libgtk-dev (<< 1:0.99.4), libgtk-doc, libgtk1.1-doc
|
||||||
|
Description: CVS build of documentation for the GIMP Toolkit
|
||||||
|
**THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
|
||||||
|
BUILD OF THE GTK+ LIBRARIES! BEWARE! IT MAY NOT WORK!**
|
||||||
|
.
|
||||||
|
This package contains lots of info-files, HTML docs, FAQs, and
|
||||||
|
other handy documentation about the GIMP Toolkit set of widgets
|
||||||
|
for X.
|
||||||
|
.
|
||||||
|
This package documents the unstable 1.1 release of the GIMP Toolkit.
|
||||||
|
.
|
||||||
|
Install this package if you want to have lots of info about the
|
||||||
|
GIMP toolkit when you're programming.
|
||||||
|
|
||||||
|
Package: libgtk-cvs-dbg
|
||||||
|
Architecture: any
|
||||||
|
Section: devel
|
||||||
|
Depends: libgtk-cvs-1.1 (= ${Source-Version}), libgtk-cvs-dev (= ${Source-Version})
|
||||||
|
Suggests: libgtk-cvs-doc
|
||||||
|
Conflicts: libgtk1.1-dbg
|
||||||
|
Description: CVS build of debugging files for the GIMP Toolkit
|
||||||
|
**THIS IS NOT AN OFFICIAL DEBIAN PACKAGE! THIS IS AN AUTOMATED CVS
|
||||||
|
BUILD OF THE GTK+ LIBRARIES! BEWARE! IT MAY NOT WORK!**
|
||||||
|
.
|
||||||
|
This package contains the debugging static libraries for the
|
||||||
|
GIMP Toolkit set of widgets for X.
|
||||||
|
.
|
||||||
|
This is the unstable, 1.1 branch of GTK+. This is not intended for
|
||||||
|
use with stable releases of programs!
|
||||||
|
.
|
||||||
|
Install this package if you wish to debug your own X programs using
|
||||||
|
the GIMP Toolkit 1.1, or if you wish to debug your own plug-ins for
|
||||||
|
The GIMP.
|
8
debian/copyright
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
This package was debianized by Ben Gertzfield <che@debian.org> on
|
||||||
|
Tue, 17 Nov 1998 12:07:17 -0800
|
||||||
|
|
||||||
|
It was produced from the CVS repository at cvs.gimp.org.
|
||||||
|
|
||||||
|
It may be redistributed under the terms of the GNU LGPL, Version 2 or
|
||||||
|
later, found on Debian systems in the file /usr/doc/copyright/LGPL.
|
||||||
|
|
9
debian/libgtk-cvs-dev.files
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
usr/lib/libgdk.so
|
||||||
|
usr/lib/libgdk.a
|
||||||
|
usr/lib/libgtk.so
|
||||||
|
usr/lib/libgtk.a
|
||||||
|
usr/include/gdk/
|
||||||
|
usr/include/gtk/
|
||||||
|
usr/bin/gtk-config
|
||||||
|
usr/man/man1/gtk-config.1
|
||||||
|
usr/share/aclocal/gtk.m4
|
5
debian/libgtk-cvs-dev.postinst
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
#DEBHELPER#
|
6
debian/libgtk-cvs-dev.prerm
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
install-info --quiet --remove gtk
|
||||||
|
|
||||||
|
#DEBHELPER#
|
8
debian/libgtk-cvs-doc.files
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
usr/info/gdk.info
|
||||||
|
usr/info/gtk.info
|
||||||
|
usr/info/gtk.info-1
|
||||||
|
usr/info/gtk.info-2
|
||||||
|
usr/info/gtk.info-3
|
||||||
|
usr/info/gtk.info-4
|
||||||
|
usr/info/gtk.info-5
|
||||||
|
|
11
debian/libgtk-cvs-doc.postinst
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
install-info --quiet --description="The GIMP Toolkit." \
|
||||||
|
--section "The GIMP" "The GIMP" /usr/info/gtk.info.gz
|
||||||
|
|
||||||
|
install-info --quiet --description="The GIMP Drawing Kit." \
|
||||||
|
--section "The GIMP" "The GIMP" /usr/info/gdk.info.gz
|
||||||
|
|
||||||
|
#DEBHELPER#
|
7
debian/libgtk-cvs-doc.prerm
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
install-info --quiet --remove gtk
|
||||||
|
install-info --quiet --remove gdk
|
||||||
|
|
||||||
|
#DEBHELPER#
|
7
debian/postinst
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
ldconfig
|
||||||
|
|
||||||
|
#DEBHELPER#
|
160
debian/rules
vendored
Executable file
@@ -0,0 +1,160 @@
|
|||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
# debian/rules file for gtk+ Debian package
|
||||||
|
# written April 1998 by Ben Gertzfield <che@debian.org
|
||||||
|
|
||||||
|
build: build-stamp
|
||||||
|
build-stamp:
|
||||||
|
dh_testdir
|
||||||
|
./autogen.sh --prefix=/usr --with-xinput=xfree
|
||||||
|
$(MAKE)
|
||||||
|
cd docs && make distdocs
|
||||||
|
cd ..
|
||||||
|
touch build-stamp
|
||||||
|
|
||||||
|
build-dbg: build-dbg-stamp
|
||||||
|
build-dbg-stamp:
|
||||||
|
dh_testdir
|
||||||
|
./configure --prefix=/usr --with-xinput=xfree --enable-debug=yes
|
||||||
|
$(MAKE)
|
||||||
|
touch build-dbg-stamp
|
||||||
|
|
||||||
|
clean:
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
rm -f build-stamp build-dbg-stamp install-stamp install-dbg-stamp
|
||||||
|
# Add here commands to clean up after the build process.
|
||||||
|
-$(MAKE) clean
|
||||||
|
cd docs
|
||||||
|
-$(MAKE) maintainer-clean
|
||||||
|
cd ..
|
||||||
|
-$(MAKE) distclean
|
||||||
|
find . -name '*.o' -o -name '_libs' -o -name '*.lo' -o -name '*.a' -o -name '.deps' | xargs rm -rf
|
||||||
|
dh_clean
|
||||||
|
|
||||||
|
clean-dbg:
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
rm -f build-stamp build-dbg-stamp install-stamp install-dbg-stamp
|
||||||
|
# Add here commands to clean up after the build process.
|
||||||
|
-$(MAKE) clean
|
||||||
|
cd docs
|
||||||
|
-$(MAKE) maintainer-clean
|
||||||
|
cd ..
|
||||||
|
-$(MAKE) distclean
|
||||||
|
find . -name '*.o' -o -name '_libs' -o -name '*.lo' -o -name '*.a' -o -name '.deps' | xargs rm -rf
|
||||||
|
dh_clean -k
|
||||||
|
|
||||||
|
install: install-stamp
|
||||||
|
install-stamp: build
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
dh_clean
|
||||||
|
$(MAKE) prefix=`pwd`/debian/tmp/usr install
|
||||||
|
touch install-stamp
|
||||||
|
|
||||||
|
install-dbg: install-dbg-stamp
|
||||||
|
install-dbg-stamp: build-dbg
|
||||||
|
dh_testdir
|
||||||
|
dh_testroot
|
||||||
|
dh_clean -k
|
||||||
|
$(MAKE) prefix=`pwd`/debian/libgtk-cvs-dbg/usr install
|
||||||
|
touch install-dbg-stamp
|
||||||
|
|
||||||
|
# Build architecture-independent files here.
|
||||||
|
binary-indep: build install libgtk-cvs-doc
|
||||||
|
# We have nothing to do by default.
|
||||||
|
|
||||||
|
# Build architecture-dependent files here.
|
||||||
|
binary-arch: build install libgtk-cvs-dev libgtk-cvs-1.1 libgtk-cvs-dbg
|
||||||
|
|
||||||
|
libgtk-cvs-1.1: build
|
||||||
|
dh_testdir -plibgtk-cvs-1.1
|
||||||
|
dh_testroot -plibgtk-cvs-1.1
|
||||||
|
dh_installdirs -plibgtk-cvs-1.1
|
||||||
|
# Add here commands to install the files into debian/tmp
|
||||||
|
rm -rf debian/tmp/usr/bin debian/tmp/usr/include debian/tmp/usr/info debian/tmp/usr/lib/glib debian/tmp/usr/share/aclocal debian/tmp/usr/man debian/tmp/usr/lib/*.la
|
||||||
|
dh_installdocs -plibgtk-cvs-1.1
|
||||||
|
dh_installchangelogs -plibgtk-cvs-1.1
|
||||||
|
dh_strip -plibgtk-cvs-1.1
|
||||||
|
dh_compress -plibgtk-cvs-1.1
|
||||||
|
dh_fixperms -plibgtk-cvs-1.1
|
||||||
|
dh_installdeb -plibgtk-cvs-1.1
|
||||||
|
dh_shlibdeps -plibgtk-cvs-1.1
|
||||||
|
dh_gencontrol -plibgtk-cvs-1.1
|
||||||
|
dh_makeshlibs -plibgtk-cvs-1.1 -V 'libgtk-cvs-1.1 (='`cat debian/version`')'
|
||||||
|
dh_md5sums -plibgtk-cvs-1.1
|
||||||
|
dh_builddeb -plibgtk-cvs-1.1
|
||||||
|
|
||||||
|
libgtk-cvs-dev: build
|
||||||
|
dh_testdir -plibgtk-cvs-dev
|
||||||
|
dh_testroot -plibgtk-cvs-dev
|
||||||
|
dh_clean -plibgtk-cvs-dev -k
|
||||||
|
dh_installdirs -plibgtk-cvs-dev
|
||||||
|
# Add here commands to install the files into debian/tmp
|
||||||
|
dh_movefiles -plibgtk-cvs-dev
|
||||||
|
cp gtk-config debian/tmp/usr/bin
|
||||||
|
dh_installdocs -plibgtk-cvs-dev
|
||||||
|
dh_installchangelogs -plibgtk-cvs-dev
|
||||||
|
dh_strip -plibgtk-cvs-dev
|
||||||
|
dh_compress -plibgtk-cvs-dev
|
||||||
|
dh_fixperms -plibgtk-cvs-dev
|
||||||
|
dh_installdeb -plibgtk-cvs-dev
|
||||||
|
dh_shlibdeps -plibgtk-cvs-dev
|
||||||
|
dh_gencontrol -plibgtk-cvs-dev
|
||||||
|
dh_md5sums -plibgtk-cvs-dev
|
||||||
|
dh_builddeb -plibgtk-cvs-dev
|
||||||
|
|
||||||
|
libgtk-cvs-doc:
|
||||||
|
dh_testdir -plibgtk-cvs-doc
|
||||||
|
dh_testroot -plibgtk-cvs-doc
|
||||||
|
dh_clean -plibgtk-cvs-doc -k
|
||||||
|
dh_installdirs -plibgtk-cvs-doc usr/doc/libgtk-cvs-doc/faq-html \
|
||||||
|
usr/doc/libgtk-cvs-doc/tutorial-html usr/doc/libgtk-cvs-doc/italian-tutorial-html usr/doc/libgtk-cvs-doc/french-tutorial-html usr/doc/libgtk-cvs-doc/gdk-html
|
||||||
|
dh_movefiles -plibgtk-cvs-doc
|
||||||
|
cp docs/html/gtkfaq*.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/faq-html
|
||||||
|
cp docs/html/gtk_tut-*.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/tutorial-html
|
||||||
|
cp docs/html/*.gif debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/tutorial-html
|
||||||
|
cp docs/html/gtk_tut.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/tutorial-html
|
||||||
|
cp docs/html/gtk_tut_it*.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/italian-tutorial-html
|
||||||
|
cp docs/html/*.gif debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/italian-tutorial-html
|
||||||
|
cp docs/html/gtk_tut_fr*.html debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/french-tutorial-html
|
||||||
|
cp docs/html/*.gif debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/french-tutorial-html
|
||||||
|
cp docs/html/gdk* debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/gdk-html
|
||||||
|
cp docs/text/*.txt debian/libgtk-cvs-doc/usr/doc/libgtk-cvs-doc/
|
||||||
|
|
||||||
|
dh_installdocs -plibgtk-cvs-doc docs/{debugging,developers,styles,text_widget,widget_system,gtk-config,refcounting}.txt TODO NEWS
|
||||||
|
dh_installchangelogs -plibgtk-cvs-doc
|
||||||
|
dh_strip -plibgtk-cvs-doc
|
||||||
|
dh_compress -plibgtk-cvs-doc
|
||||||
|
dh_fixperms -plibgtk-cvs-doc
|
||||||
|
dh_installdeb -plibgtk-cvs-doc
|
||||||
|
dh_shlibdeps -plibgtk-cvs-doc
|
||||||
|
dh_gencontrol -plibgtk-cvs-doc
|
||||||
|
dh_md5sums -plibgtk-cvs-doc
|
||||||
|
dh_builddeb -plibgtk-cvs-doc
|
||||||
|
|
||||||
|
libgtk-cvs-dbg: clean-dbg install-dbg
|
||||||
|
dh_testdir -plibgtk-cvs-dbg
|
||||||
|
dh_testroot -plibgtk-cvs-dbg
|
||||||
|
dh_installdirs -plibgtk-cvs-dbg
|
||||||
|
# Add here commands to install the files into debian/libgtk-cvs-dbg
|
||||||
|
rm -rf debian/libgtk-cvs-dbg/usr/bin debian/libgtk-cvs-dbg/usr/include debian/libgtk-cvs-dbg/usr/info debian/libgtk-cvs-dbg/usr/lib/glib debian/libgtk-cvs-dbg/usr/man debian/libgtk-cvs-dbg/usr/share debian/libgtk-cvs-dbg/usr/lib/*.{la,so*}
|
||||||
|
for file in `find debian/libgtk-cvs-dbg/usr/lib -name '*.a'` ; do \
|
||||||
|
mv $$file debian/libgtk-cvs-dbg/usr/lib/`basename $$file .a`_g.a; \
|
||||||
|
done
|
||||||
|
dh_installdocs -plibgtk-cvs-dbg
|
||||||
|
dh_installchangelogs -plibgtk-cvs-dbg
|
||||||
|
dh_compress -plibgtk-cvs-dbg
|
||||||
|
dh_fixperms -plibgtk-cvs-dbg
|
||||||
|
dh_installdeb -plibgtk-cvs-dbg
|
||||||
|
dh_shlibdeps -plibgtk-cvs-dbg
|
||||||
|
dh_gencontrol -plibgtk-cvs-dbg
|
||||||
|
dh_md5sums -plibgtk-cvs-dbg
|
||||||
|
dh_builddeb -plibgtk-cvs-dbg
|
||||||
|
|
||||||
|
source diff:
|
||||||
|
@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false
|
||||||
|
|
||||||
|
binary: binary-indep binary-arch
|
||||||
|
.PHONY: build clean binary-indep binary-arch binary
|
84
demos/Makefile.am
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
## Makefile.am for gtk+/demos
|
||||||
|
include $(top_srcdir)/Makefile.decl
|
||||||
|
|
||||||
|
SUBDIRS = gtk-demo
|
||||||
|
|
||||||
|
INCLUDES = \
|
||||||
|
-I$(top_srcdir) \
|
||||||
|
-I$(top_builddir)/gdk \
|
||||||
|
-DGDK_DISABLE_DEPRECATED \
|
||||||
|
-DGTK_DISABLE_DEPRECATED \
|
||||||
|
$(GTK_DEBUG_FLAGS) \
|
||||||
|
$(GTK_DEP_CFLAGS)
|
||||||
|
|
||||||
|
DEPS = \
|
||||||
|
$(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
|
||||||
|
$(top_builddir)/gdk/$(gdktargetlib) \
|
||||||
|
$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
|
|
||||||
|
LDADDS = \
|
||||||
|
$(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
|
||||||
|
$(top_builddir)/gdk/$(gdktargetlib) \
|
||||||
|
$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
|
|
||||||
|
noinst_PROGRAMS = \
|
||||||
|
testpixbuf-drawable \
|
||||||
|
testanimation \
|
||||||
|
testpixbuf-save \
|
||||||
|
testpixbuf-scale \
|
||||||
|
pixbuf-demo
|
||||||
|
|
||||||
|
# Need to build test-inline-pixbufs.h for testpixbuf
|
||||||
|
if HAVE_PNG
|
||||||
|
noinst_PROGRAMS += testpixbuf
|
||||||
|
BUILT_SOURCES = test-inline-pixbufs.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
if CROSS_COMPILING
|
||||||
|
pixbuf_csource=$(GDK_PIXBUF_CSOURCE)
|
||||||
|
pixbuf_csource_deps=
|
||||||
|
else
|
||||||
|
pixbuf_csource=GDK_PIXBUF_MODULE_FILE=$(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders $(top_builddir)/gdk-pixbuf/gdk-pixbuf-csource
|
||||||
|
pixbuf_csource_deps=$(top_builddir)/gdk-pixbuf/gdk-pixbuf-csource $(top_builddir)/gdk-pixbuf/gdk-pixbuf.loaders
|
||||||
|
endif
|
||||||
|
|
||||||
|
test-inline-pixbufs.h: $(pixbuf_csource_deps) apple-red.png gnome-foot.png
|
||||||
|
$(pixbuf_csource) --raw --build-list \
|
||||||
|
apple_red $(srcdir)/apple-red.png \
|
||||||
|
gnome_foot $(srcdir)/gnome-foot.png \
|
||||||
|
> test-inline-pixbufs.h \
|
||||||
|
|| (rm -f test-inline-pixbufs.h && false)
|
||||||
|
|
||||||
|
testpixbuf_DEPENDENCIES = $(DEPS)
|
||||||
|
testpixbuf_drawable_DEPENDENCIES = $(DEPS)
|
||||||
|
testpixbuf_save_DEPENDENCIES = $(DEPS)
|
||||||
|
testpixbuf_scale_DEPENDENCIES = $(DEPS)
|
||||||
|
testanimation_DEPENDENCIES = $(DEPS)
|
||||||
|
pixbuf_demo_DEPENDENCIES = $(DEPS)
|
||||||
|
|
||||||
|
testpixbuf_LDADD = $(LDADDS)
|
||||||
|
testpixbuf_drawable_LDADD = $(LDADDS)
|
||||||
|
testpixbuf_save_LDADD = $(LDADDS)
|
||||||
|
testpixbuf_scale_LDADD = $(LDADDS)
|
||||||
|
testanimation_LDADD = $(LDADDS)
|
||||||
|
pixbuf_demo_LDADD = $(LDADDS)
|
||||||
|
|
||||||
|
testpixbuf_SOURCES = testpixbuf.c pixbuf-init.c
|
||||||
|
testpixbuf_drawable_SOURCES = testpixbuf-drawable.c pixbuf-init.c
|
||||||
|
testpixbuf_save_SOURCES = testpixbuf-save.c
|
||||||
|
testpixbuf_scale_SOURCES = testpixbuf-scale.c pixbuf-init.c
|
||||||
|
testanimation_SOURCES = testanimation.c pixbuf-init.c
|
||||||
|
pixbuf_demo_SOURCES = pixbuf-demo.c pixbuf-init.c
|
||||||
|
|
||||||
|
EXTRA_DIST += \
|
||||||
|
apple-red.png \
|
||||||
|
background.jpg \
|
||||||
|
gnome-applets.png \
|
||||||
|
gnome-calendar.png \
|
||||||
|
gnome-foot.png \
|
||||||
|
gnome-gimp.png \
|
||||||
|
gnome-gmush.png \
|
||||||
|
gnome-gsame.png \
|
||||||
|
gnu-keys.png
|
||||||
|
|
||||||
|
DISTCLEANFILES = test-inline-pixbufs.h
|
BIN
demos/apple-red.png
Normal file
After Width: | Height: | Size: 3.5 KiB |
BIN
demos/background.jpg
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
demos/gnome-applets.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
demos/gnome-calendar.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
demos/gnome-foot.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
demos/gnome-gimp.png
Normal file
After Width: | Height: | Size: 3.3 KiB |
BIN
demos/gnome-gmush.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
demos/gnome-gsame.png
Normal file
After Width: | Height: | Size: 4.2 KiB |
BIN
demos/gnu-keys.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
98
demos/gtk-demo/Makefile.am
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
## Makefile.am for gtk+/demos
|
||||||
|
include $(top_srcdir)/Makefile.decl
|
||||||
|
|
||||||
|
democodedir=$(datadir)/gtk-2.0/demo
|
||||||
|
|
||||||
|
## These should be in the order you want them to appear in the
|
||||||
|
## demo app, which means alphabetized by demo title, not filename
|
||||||
|
demos = \
|
||||||
|
appwindow.c \
|
||||||
|
assistant.c \
|
||||||
|
builder.c \
|
||||||
|
button_box.c \
|
||||||
|
changedisplay.c \
|
||||||
|
clipboard.c \
|
||||||
|
colorsel.c \
|
||||||
|
combobox.c \
|
||||||
|
dialog.c \
|
||||||
|
drawingarea.c \
|
||||||
|
editable_cells.c \
|
||||||
|
entry_completion.c \
|
||||||
|
expander.c \
|
||||||
|
hypertext.c \
|
||||||
|
iconview.c \
|
||||||
|
iconview_edit.c \
|
||||||
|
images.c \
|
||||||
|
list_store.c \
|
||||||
|
menus.c \
|
||||||
|
panes.c \
|
||||||
|
pickers.c \
|
||||||
|
pixbufs.c \
|
||||||
|
printing.c \
|
||||||
|
rotated_text.c \
|
||||||
|
search_entry.c \
|
||||||
|
sizegroup.c \
|
||||||
|
stock_browser.c \
|
||||||
|
textview.c \
|
||||||
|
textscroll.c \
|
||||||
|
tree_store.c \
|
||||||
|
ui_manager.c
|
||||||
|
|
||||||
|
INCLUDES = \
|
||||||
|
-DDEMOCODEDIR="\"$(democodedir)\"" \
|
||||||
|
-I$(top_srcdir) \
|
||||||
|
-I$(top_builddir)/gdk \
|
||||||
|
-DGDK_DISABLE_DEPRECATED \
|
||||||
|
-DGTK_DISABLE_DEPRECATED \
|
||||||
|
$(GTK_DEBUG_FLAGS) \
|
||||||
|
$(GTK_DEP_CFLAGS)
|
||||||
|
|
||||||
|
DEPS = \
|
||||||
|
$(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
|
||||||
|
$(top_builddir)/gdk/$(gdktargetlib) \
|
||||||
|
$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
|
|
||||||
|
LDADDS = \
|
||||||
|
$(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la \
|
||||||
|
$(top_builddir)/gdk/$(gdktargetlib) \
|
||||||
|
$(top_builddir)/gtk/$(gtktargetlib)
|
||||||
|
|
||||||
|
bin_PROGRAMS = gtk-demo
|
||||||
|
|
||||||
|
BUILT_SOURCES = demos.h
|
||||||
|
|
||||||
|
EXTRA_DIST += \
|
||||||
|
$(IMAGEFILES) \
|
||||||
|
demo.ui
|
||||||
|
|
||||||
|
demos.h: @REBUILD@ $(demos) geninclude.pl
|
||||||
|
(here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos)) > demos.h
|
||||||
|
|
||||||
|
gtk_demo_SOURCES = \
|
||||||
|
$(demos) \
|
||||||
|
demo-common.h \
|
||||||
|
main.c \
|
||||||
|
demos.h
|
||||||
|
|
||||||
|
gtk_demo_DEPENDENCIES = $(DEPS)
|
||||||
|
gtk_demo_LDADD = $(LDADDS)
|
||||||
|
gtk_demo_LDFLAGS = -export-dynamic
|
||||||
|
|
||||||
|
IMAGEFILES= alphatest.png \
|
||||||
|
apple-red.png \
|
||||||
|
background.jpg \
|
||||||
|
floppybuddy.gif \
|
||||||
|
gnome-applets.png \
|
||||||
|
gnome-calendar.png \
|
||||||
|
gnome-fs-directory.png \
|
||||||
|
gnome-fs-regular.png \
|
||||||
|
gnome-foot.png \
|
||||||
|
gnome-gimp.png \
|
||||||
|
gnome-gmush.png \
|
||||||
|
gnome-gsame.png \
|
||||||
|
gnu-keys.png \
|
||||||
|
gtk-logo-rgb.gif
|
||||||
|
|
||||||
|
democode_DATA = $(demos) $(IMAGEFILES) demo.ui
|
||||||
|
|
||||||
|
DISTCLEANFILES = demos.h
|
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.7 KiB |
@@ -1,549 +0,0 @@
|
|||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
typedef GtkApplication DemoApplication;
|
|
||||||
typedef GtkApplicationClass DemoApplicationClass;
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (DemoApplication, demo_application, GTK_TYPE_APPLICATION)
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
GtkApplicationWindow parent_instance;
|
|
||||||
|
|
||||||
GtkWidget *message;
|
|
||||||
GtkWidget *infobar;
|
|
||||||
GtkWidget *status;
|
|
||||||
GtkWidget *menutool;
|
|
||||||
GMenuModel *toolmenu;
|
|
||||||
GtkTextBuffer *buffer;
|
|
||||||
|
|
||||||
int width;
|
|
||||||
int height;
|
|
||||||
gboolean maximized;
|
|
||||||
gboolean fullscreen;
|
|
||||||
} DemoApplicationWindow;
|
|
||||||
typedef GtkApplicationWindowClass DemoApplicationWindowClass;
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (DemoApplicationWindow, demo_application_window, GTK_TYPE_APPLICATION_WINDOW)
|
|
||||||
|
|
||||||
static void create_window (GApplication *app, const char *contents);
|
|
||||||
|
|
||||||
static void
|
|
||||||
show_action_dialog (GSimpleAction *action)
|
|
||||||
{
|
|
||||||
const gchar *name;
|
|
||||||
GtkWidget *dialog;
|
|
||||||
|
|
||||||
name = g_action_get_name (G_ACTION (action));
|
|
||||||
|
|
||||||
dialog = gtk_message_dialog_new (NULL,
|
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
||||||
GTK_MESSAGE_INFO,
|
|
||||||
GTK_BUTTONS_CLOSE,
|
|
||||||
"You activated action: \"%s\"",
|
|
||||||
name);
|
|
||||||
|
|
||||||
g_signal_connect (dialog, "response",
|
|
||||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
|
||||||
|
|
||||||
gtk_widget_show (dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
show_action_infobar (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer data)
|
|
||||||
{
|
|
||||||
DemoApplicationWindow *window = data;
|
|
||||||
gchar *text;
|
|
||||||
const gchar *name;
|
|
||||||
const gchar *value;
|
|
||||||
|
|
||||||
name = g_action_get_name (G_ACTION (action));
|
|
||||||
value = g_variant_get_string (parameter, NULL);
|
|
||||||
|
|
||||||
text = g_strdup_printf ("You activated radio action: \"%s\".\n"
|
|
||||||
"Current value: %s", name, value);
|
|
||||||
gtk_label_set_text (GTK_LABEL (window->message), text);
|
|
||||||
gtk_widget_show (window->infobar);
|
|
||||||
g_free (text);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate_action (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
show_action_dialog (action);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate_new (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GApplication *app = user_data;
|
|
||||||
|
|
||||||
create_window (app, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
open_response_cb (GtkNativeDialog *dialog,
|
|
||||||
gint response_id,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GtkFileChooserNative *native = user_data;
|
|
||||||
GApplication *app = g_object_get_data (G_OBJECT (native), "app");
|
|
||||||
GtkWidget *message_dialog;
|
|
||||||
GFile *file;
|
|
||||||
char *contents;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
if (response_id == GTK_RESPONSE_ACCEPT)
|
|
||||||
{
|
|
||||||
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (native));
|
|
||||||
|
|
||||||
if (g_file_load_contents (file, NULL, &contents, NULL, NULL, &error))
|
|
||||||
{
|
|
||||||
create_window (app, contents);
|
|
||||||
g_free (contents);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
message_dialog = gtk_message_dialog_new (NULL,
|
|
||||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
|
||||||
GTK_MESSAGE_ERROR,
|
|
||||||
GTK_BUTTONS_CLOSE,
|
|
||||||
"Error loading file: \"%s\"",
|
|
||||||
error->message);
|
|
||||||
g_signal_connect (message_dialog, "response",
|
|
||||||
G_CALLBACK (gtk_widget_destroy), NULL);
|
|
||||||
gtk_widget_show (message_dialog);
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_native_dialog_destroy (GTK_NATIVE_DIALOG (native));
|
|
||||||
g_object_unref (native);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate_open (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GApplication *app = user_data;
|
|
||||||
GtkFileChooserNative *native;
|
|
||||||
|
|
||||||
native = gtk_file_chooser_native_new ("Open File",
|
|
||||||
NULL,
|
|
||||||
GTK_FILE_CHOOSER_ACTION_OPEN,
|
|
||||||
"_Open",
|
|
||||||
"_Cancel");
|
|
||||||
|
|
||||||
g_object_set_data_full (G_OBJECT (native), "app", g_object_ref (app), g_object_unref);
|
|
||||||
g_signal_connect (native,
|
|
||||||
"response",
|
|
||||||
G_CALLBACK (open_response_cb),
|
|
||||||
native);
|
|
||||||
|
|
||||||
gtk_native_dialog_show (GTK_NATIVE_DIALOG (native));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate_toggle (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GVariant *state;
|
|
||||||
|
|
||||||
show_action_dialog (action);
|
|
||||||
|
|
||||||
state = g_action_get_state (G_ACTION (action));
|
|
||||||
g_action_change_state (G_ACTION (action), g_variant_new_boolean (!g_variant_get_boolean (state)));
|
|
||||||
g_variant_unref (state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate_radio (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
show_action_infobar (action, parameter, user_data);
|
|
||||||
|
|
||||||
g_action_change_state (G_ACTION (action), parameter);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate_about (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GtkWidget *window = user_data;
|
|
||||||
|
|
||||||
const gchar *authors[] = {
|
|
||||||
"Peter Mattis",
|
|
||||||
"Spencer Kimball",
|
|
||||||
"Josh MacDonald",
|
|
||||||
"and many more...",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
const gchar *documentors[] = {
|
|
||||||
"Owen Taylor",
|
|
||||||
"Tony Gale",
|
|
||||||
"Matthias Clasen <mclasen@redhat.com>",
|
|
||||||
"and many more...",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
gtk_show_about_dialog (GTK_WINDOW (window),
|
|
||||||
"program-name", "GTK Code Demos",
|
|
||||||
"version", g_strdup_printf ("%s,\nRunning against GTK %d.%d.%d",
|
|
||||||
PACKAGE_VERSION,
|
|
||||||
gtk_get_major_version (),
|
|
||||||
gtk_get_minor_version (),
|
|
||||||
gtk_get_micro_version ()),
|
|
||||||
"copyright", "(C) 1997-2013 The GTK Team",
|
|
||||||
"license-type", GTK_LICENSE_LGPL_2_1,
|
|
||||||
"website", "http://www.gtk.org",
|
|
||||||
"comments", "Program to demonstrate GTK functions.",
|
|
||||||
"authors", authors,
|
|
||||||
"documenters", documentors,
|
|
||||||
"logo-icon-name", "org.gtk.Demo4",
|
|
||||||
"title", "About GTK Code Demos",
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate_quit (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GtkApplication *app = user_data;
|
|
||||||
GtkWidget *win;
|
|
||||||
GList *list, *next;
|
|
||||||
|
|
||||||
list = gtk_application_get_windows (app);
|
|
||||||
while (list)
|
|
||||||
{
|
|
||||||
win = list->data;
|
|
||||||
next = list->next;
|
|
||||||
|
|
||||||
gtk_widget_destroy (GTK_WIDGET (win));
|
|
||||||
|
|
||||||
list = next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
update_statusbar (GtkTextBuffer *buffer,
|
|
||||||
DemoApplicationWindow *window)
|
|
||||||
{
|
|
||||||
gchar *msg;
|
|
||||||
gint row, col;
|
|
||||||
gint count;
|
|
||||||
GtkTextIter iter;
|
|
||||||
|
|
||||||
/* clear any previous message, underflow is allowed */
|
|
||||||
gtk_statusbar_pop (GTK_STATUSBAR (window->status), 0);
|
|
||||||
|
|
||||||
count = gtk_text_buffer_get_char_count (buffer);
|
|
||||||
|
|
||||||
gtk_text_buffer_get_iter_at_mark (buffer,
|
|
||||||
&iter,
|
|
||||||
gtk_text_buffer_get_insert (buffer));
|
|
||||||
|
|
||||||
row = gtk_text_iter_get_line (&iter);
|
|
||||||
col = gtk_text_iter_get_line_offset (&iter);
|
|
||||||
|
|
||||||
msg = g_strdup_printf ("Cursor at row %d column %d - %d chars in document",
|
|
||||||
row, col, count);
|
|
||||||
|
|
||||||
gtk_statusbar_push (GTK_STATUSBAR (window->status), 0, msg);
|
|
||||||
|
|
||||||
g_free (msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
mark_set_callback (GtkTextBuffer *buffer,
|
|
||||||
const GtkTextIter *new_location,
|
|
||||||
GtkTextMark *mark,
|
|
||||||
DemoApplicationWindow *window)
|
|
||||||
{
|
|
||||||
update_statusbar (buffer, window);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
change_theme_state (GSimpleAction *action,
|
|
||||||
GVariant *state,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
GtkSettings *settings = gtk_settings_get_default ();
|
|
||||||
|
|
||||||
g_object_set (G_OBJECT (settings),
|
|
||||||
"gtk-application-prefer-dark-theme",
|
|
||||||
g_variant_get_boolean (state),
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
g_simple_action_set_state (action, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
change_radio_state (GSimpleAction *action,
|
|
||||||
GVariant *state,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
g_simple_action_set_state (action, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static GActionEntry app_entries[] = {
|
|
||||||
{ "new", activate_new, NULL, NULL, NULL },
|
|
||||||
{ "open", activate_open, NULL, NULL, NULL },
|
|
||||||
{ "save", activate_action, NULL, NULL, NULL },
|
|
||||||
{ "save-as", activate_action, NULL, NULL, NULL },
|
|
||||||
{ "quit", activate_quit, NULL, NULL, NULL },
|
|
||||||
{ "dark", activate_toggle, NULL, "false", change_theme_state }
|
|
||||||
};
|
|
||||||
|
|
||||||
static GActionEntry win_entries[] = {
|
|
||||||
{ "shape", activate_radio, "s", "'oval'", change_radio_state },
|
|
||||||
{ "bold", activate_toggle, NULL, "false", NULL },
|
|
||||||
{ "about", activate_about, NULL, NULL, NULL },
|
|
||||||
{ "file1", activate_action, NULL, NULL, NULL },
|
|
||||||
{ "logo", activate_action, NULL, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
|
||||||
clicked_cb (GtkWidget *widget, DemoApplicationWindow *window)
|
|
||||||
{
|
|
||||||
gtk_widget_hide (window->infobar);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
startup (GApplication *app)
|
|
||||||
{
|
|
||||||
GtkBuilder *builder;
|
|
||||||
GMenuModel *appmenu;
|
|
||||||
GMenuModel *menubar;
|
|
||||||
|
|
||||||
G_APPLICATION_CLASS (demo_application_parent_class)->startup (app);
|
|
||||||
|
|
||||||
builder = gtk_builder_new ();
|
|
||||||
gtk_builder_add_from_resource (builder, "/application_demo/menus.ui", NULL);
|
|
||||||
|
|
||||||
appmenu = (GMenuModel *)gtk_builder_get_object (builder, "appmenu");
|
|
||||||
menubar = (GMenuModel *)gtk_builder_get_object (builder, "menubar");
|
|
||||||
|
|
||||||
gtk_application_set_app_menu (GTK_APPLICATION (app), appmenu);
|
|
||||||
gtk_application_set_menubar (GTK_APPLICATION (app), menubar);
|
|
||||||
|
|
||||||
g_object_unref (builder);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
create_window (GApplication *app,
|
|
||||||
const char *content)
|
|
||||||
{
|
|
||||||
DemoApplicationWindow *window;
|
|
||||||
|
|
||||||
window = (DemoApplicationWindow *)g_object_new (demo_application_window_get_type (),
|
|
||||||
"application", app,
|
|
||||||
NULL);
|
|
||||||
if (content)
|
|
||||||
gtk_text_buffer_set_text (window->buffer, content, -1);
|
|
||||||
|
|
||||||
gtk_window_present (GTK_WINDOW (window));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
activate (GApplication *app)
|
|
||||||
{
|
|
||||||
create_window (app, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_init (DemoApplication *app)
|
|
||||||
{
|
|
||||||
GSettings *settings;
|
|
||||||
GAction *action;
|
|
||||||
|
|
||||||
settings = g_settings_new ("org.gtk.Demo4");
|
|
||||||
|
|
||||||
g_action_map_add_action_entries (G_ACTION_MAP (app),
|
|
||||||
app_entries, G_N_ELEMENTS (app_entries),
|
|
||||||
app);
|
|
||||||
|
|
||||||
action = g_settings_create_action (settings, "color");
|
|
||||||
|
|
||||||
g_action_map_add_action (G_ACTION_MAP (app), action);
|
|
||||||
|
|
||||||
g_object_unref (settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_class_init (DemoApplicationClass *class)
|
|
||||||
{
|
|
||||||
GApplicationClass *app_class = G_APPLICATION_CLASS (class);
|
|
||||||
|
|
||||||
app_class->startup = startup;
|
|
||||||
app_class->activate = activate;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_store_state (DemoApplicationWindow *win)
|
|
||||||
{
|
|
||||||
GSettings *settings;
|
|
||||||
|
|
||||||
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);
|
|
||||||
g_object_unref (settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_load_state (DemoApplicationWindow *win)
|
|
||||||
{
|
|
||||||
GSettings *settings;
|
|
||||||
|
|
||||||
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");
|
|
||||||
g_object_unref (settings);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_init (DemoApplicationWindow *window)
|
|
||||||
{
|
|
||||||
GtkWidget *menu;
|
|
||||||
|
|
||||||
window->width = -1;
|
|
||||||
window->height = -1;
|
|
||||||
window->maximized = FALSE;
|
|
||||||
window->fullscreen = FALSE;
|
|
||||||
|
|
||||||
gtk_widget_init_template (GTK_WIDGET (window));
|
|
||||||
|
|
||||||
menu = gtk_menu_new_from_model (window->toolmenu);
|
|
||||||
gtk_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (window->menutool), menu);
|
|
||||||
|
|
||||||
g_action_map_add_action_entries (G_ACTION_MAP (window),
|
|
||||||
win_entries, G_N_ELEMENTS (win_entries),
|
|
||||||
window);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_constructed (GObject *object)
|
|
||||||
{
|
|
||||||
DemoApplicationWindow *window = (DemoApplicationWindow *)object;
|
|
||||||
|
|
||||||
demo_application_window_load_state (window);
|
|
||||||
|
|
||||||
gtk_window_set_default_size (GTK_WINDOW (window), window->width, window->height);
|
|
||||||
|
|
||||||
if (window->maximized)
|
|
||||||
gtk_window_maximize (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
if (window->fullscreen)
|
|
||||||
gtk_window_fullscreen (GTK_WINDOW (window));
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (demo_application_window_parent_class)->constructed (object);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_size_allocate (GtkWidget *widget,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
int baseline)
|
|
||||||
{
|
|
||||||
DemoApplicationWindow *window = (DemoApplicationWindow *)widget;
|
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (demo_application_window_parent_class)->size_allocate (widget,
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
baseline);
|
|
||||||
|
|
||||||
if (!window->maximized && !window->fullscreen)
|
|
||||||
gtk_window_get_size (GTK_WINDOW (window), &window->width, &window->height);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
surface_state_changed (GtkWidget *widget)
|
|
||||||
{
|
|
||||||
DemoApplicationWindow *window = (DemoApplicationWindow *)widget;
|
|
||||||
GdkSurfaceState new_state;
|
|
||||||
|
|
||||||
new_state = gdk_surface_get_state (gtk_native_get_surface (GTK_NATIVE (widget)));
|
|
||||||
window->maximized = (new_state & GDK_SURFACE_STATE_MAXIMIZED) != 0;
|
|
||||||
window->fullscreen = (new_state & GDK_SURFACE_STATE_FULLSCREEN) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_realize (GtkWidget *widget)
|
|
||||||
{
|
|
||||||
GTK_WIDGET_CLASS (demo_application_window_parent_class)->realize (widget);
|
|
||||||
|
|
||||||
g_signal_connect_swapped (gtk_native_get_surface (GTK_NATIVE (widget)), "notify::state",
|
|
||||||
G_CALLBACK (surface_state_changed), widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_unrealize (GtkWidget *widget)
|
|
||||||
{
|
|
||||||
g_signal_handlers_disconnect_by_func (gtk_native_get_surface (GTK_NATIVE (widget)),
|
|
||||||
surface_state_changed, widget);
|
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (demo_application_window_parent_class)->unrealize (widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_destroy (GtkWidget *widget)
|
|
||||||
{
|
|
||||||
DemoApplicationWindow *window = (DemoApplicationWindow *)widget;
|
|
||||||
|
|
||||||
demo_application_window_store_state (window);
|
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (demo_application_window_parent_class)->destroy (widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
demo_application_window_class_init (DemoApplicationWindowClass *class)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (class);
|
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
|
|
||||||
|
|
||||||
object_class->constructed = demo_application_window_constructed;
|
|
||||||
|
|
||||||
widget_class->size_allocate = demo_application_window_size_allocate;
|
|
||||||
widget_class->realize = demo_application_window_realize;
|
|
||||||
widget_class->unrealize = demo_application_window_unrealize;
|
|
||||||
widget_class->destroy = demo_application_window_destroy;
|
|
||||||
|
|
||||||
gtk_widget_class_set_template_from_resource (widget_class, "/application_demo/application.ui");
|
|
||||||
gtk_widget_class_bind_template_child (widget_class, DemoApplicationWindow, message);
|
|
||||||
gtk_widget_class_bind_template_child (widget_class, DemoApplicationWindow, infobar);
|
|
||||||
gtk_widget_class_bind_template_child (widget_class, DemoApplicationWindow, status);
|
|
||||||
gtk_widget_class_bind_template_child (widget_class, DemoApplicationWindow, buffer);
|
|
||||||
gtk_widget_class_bind_template_child (widget_class, DemoApplicationWindow, menutool);
|
|
||||||
gtk_widget_class_bind_template_child (widget_class, DemoApplicationWindow, toolmenu);
|
|
||||||
gtk_widget_class_bind_template_callback (widget_class, clicked_cb);
|
|
||||||
gtk_widget_class_bind_template_callback (widget_class, update_statusbar);
|
|
||||||
gtk_widget_class_bind_template_callback (widget_class, mark_set_callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
main (int argc, char *argv[])
|
|
||||||
{
|
|
||||||
GtkApplication *app;
|
|
||||||
|
|
||||||
app = GTK_APPLICATION (g_object_new (demo_application_get_type (),
|
|
||||||
"application-id", "org.gtk.Demo4.App",
|
|
||||||
"flags", G_APPLICATION_HANDLES_OPEN,
|
|
||||||
NULL));
|
|
||||||
|
|
||||||
return g_application_run (G_APPLICATION (app), 0, NULL);
|
|
||||||
}
|
|
@@ -1,111 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<template class="DemoApplicationWindow" parent="GtkApplicationWindow">
|
|
||||||
<property name="title" translatable="yes">Application Class</property>
|
|
||||||
<property name="default-width">200</property>
|
|
||||||
<property name="default-height">200</property>
|
|
||||||
<property name="icon-name">document-open</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkGrid">
|
|
||||||
<child>
|
|
||||||
<object class="GtkToolbar">
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<style>
|
|
||||||
<class name="primary-toolbar"/>
|
|
||||||
</style>
|
|
||||||
<child>
|
|
||||||
<object class="GtkMenuToolButton" id="menutool">
|
|
||||||
<property name="icon-name">document-open</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkToolButton">
|
|
||||||
<property name="icon-name">application-exit</property>
|
|
||||||
<property name="action-name">app.quit</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkSeparatorToolItem"/>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkToolButton">
|
|
||||||
<property name="icon-name">applications-other</property>
|
|
||||||
<property name="action-name">win.logo</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">0</property>
|
|
||||||
<property name="top-attach">0</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkInfoBar" id="infobar">
|
|
||||||
<property name="visible">0</property>
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<child internal-child="content_area">
|
|
||||||
<object class="GtkBox" id="content_area">
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel" id="message">
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child internal-child="action_area">
|
|
||||||
<object class="GtkBox">
|
|
||||||
<child>
|
|
||||||
<object class="GtkButton">
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<property name="label" translatable="yes">_OK</property>
|
|
||||||
<property name="use-underline">1</property>
|
|
||||||
<signal name="clicked" handler="clicked_cb"/>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">0</property>
|
|
||||||
<property name="top-attach">1</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScrolledWindow">
|
|
||||||
<property name="shadow-type">in</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkTextView">
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<property name="vexpand">1</property>
|
|
||||||
<property name="buffer">buffer</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">0</property>
|
|
||||||
<property name="top-attach">2</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</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>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</template>
|
|
||||||
<menu id="toolmenu">
|
|
||||||
<item>
|
|
||||||
<attribute name="label">File1</attribute>
|
|
||||||
<attribute name="action">win.file1</attribute>
|
|
||||||
</item>
|
|
||||||
</menu>
|
|
||||||
<object class="GtkTextBuffer" id="buffer">
|
|
||||||
<signal name="changed" handler="update_statusbar"/>
|
|
||||||
<signal name="mark-set" handler="mark_set_callback"/>
|
|
||||||
</object>
|
|
||||||
</interface>
|
|
@@ -1,95 +0,0 @@
|
|||||||
/* Application Class
|
|
||||||
*
|
|
||||||
* Demonstrates a simple application.
|
|
||||||
*
|
|
||||||
* This example uses GtkApplication, GtkApplicationWindow, GtkBuilder
|
|
||||||
* as well as GMenu and GResource. Due to the way GtkApplication is structured,
|
|
||||||
* it is run as a separate process.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
static gboolean name_seen;
|
|
||||||
static GtkWidget *placeholder;
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_name_appeared (GDBusConnection *connection,
|
|
||||||
const gchar *name,
|
|
||||||
const gchar *name_owner,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
name_seen = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
on_name_vanished (GDBusConnection *connection,
|
|
||||||
const gchar *name,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
if (!name_seen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (placeholder)
|
|
||||||
{
|
|
||||||
gtk_widget_destroy (placeholder);
|
|
||||||
g_object_unref (placeholder);
|
|
||||||
placeholder = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef G_OS_WIN32
|
|
||||||
#define APP_EXTENSION ".exe"
|
|
||||||
#else
|
|
||||||
#define APP_EXTENSION
|
|
||||||
#endif
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
do_application_demo (GtkWidget *toplevel)
|
|
||||||
{
|
|
||||||
static guint watch = 0;
|
|
||||||
|
|
||||||
if (watch == 0)
|
|
||||||
watch = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
|
||||||
"org.gtk.Demo4.App",
|
|
||||||
0,
|
|
||||||
on_name_appeared,
|
|
||||||
on_name_vanished,
|
|
||||||
NULL, NULL);
|
|
||||||
|
|
||||||
if (placeholder == NULL)
|
|
||||||
{
|
|
||||||
const gchar *command;
|
|
||||||
GError *error = NULL;
|
|
||||||
|
|
||||||
if (g_file_test ("./gtk4-demo-application" APP_EXTENSION, G_FILE_TEST_IS_EXECUTABLE))
|
|
||||||
command = "./gtk4-demo-application" APP_EXTENSION;
|
|
||||||
else
|
|
||||||
command = "gtk4-demo-application";
|
|
||||||
|
|
||||||
if (!g_spawn_command_line_async (command, &error))
|
|
||||||
{
|
|
||||||
g_warning ("%s", error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
|
|
||||||
placeholder = gtk_label_new ("");
|
|
||||||
g_object_ref_sink (placeholder);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_dbus_connection_call_sync (g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL),
|
|
||||||
"org.gtk.Demo4.App",
|
|
||||||
"/org/gtk/Demo4/App",
|
|
||||||
"org.gtk.Actions",
|
|
||||||
"Activate",
|
|
||||||
g_variant_new ("(sava{sv})", "quit", NULL, NULL),
|
|
||||||
NULL,
|
|
||||||
0,
|
|
||||||
G_MAXINT,
|
|
||||||
NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return placeholder;
|
|
||||||
}
|
|
@@ -1,18 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<menu id="appmenu">
|
|
||||||
<section>
|
|
||||||
<item>
|
|
||||||
<attribute name="label" translatable="yes">About</attribute>
|
|
||||||
<attribute name="action">app.about</attribute>
|
|
||||||
</item>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<item>
|
|
||||||
<attribute name="label" translatable="yes">_Quit</attribute>
|
|
||||||
<attribute name="action">app.quit</attribute>
|
|
||||||
<attribute name="accel"><Primary>q</attribute>
|
|
||||||
</item>
|
|
||||||
</section>
|
|
||||||
</menu>
|
|
||||||
</interface>
|
|
594
demos/gtk-demo/appwindow.c
Normal file
@@ -0,0 +1,594 @@
|
|||||||
|
/* Application main window
|
||||||
|
*
|
||||||
|
* Demonstrates a typical application window with menubar, toolbar, statusbar.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
#include "config.h"
|
||||||
|
#include "demo-common.h"
|
||||||
|
|
||||||
|
static GtkWidget *window = NULL;
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_action (GtkAction *action)
|
||||||
|
{
|
||||||
|
const gchar *name = gtk_action_get_name (action);
|
||||||
|
const gchar *typename = G_OBJECT_TYPE_NAME (action);
|
||||||
|
|
||||||
|
GtkWidget *dialog;
|
||||||
|
|
||||||
|
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||||
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
|
GTK_MESSAGE_INFO,
|
||||||
|
GTK_BUTTONS_CLOSE,
|
||||||
|
"You activated action: \"%s\" of type \"%s\"",
|
||||||
|
name, typename);
|
||||||
|
|
||||||
|
/* Close dialog on user response */
|
||||||
|
g_signal_connect (dialog,
|
||||||
|
"response",
|
||||||
|
G_CALLBACK (gtk_widget_destroy),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
gtk_widget_show (dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_radio_action (GtkAction *action, GtkRadioAction *current)
|
||||||
|
{
|
||||||
|
const gchar *name = gtk_action_get_name (GTK_ACTION (current));
|
||||||
|
const gchar *typename = G_OBJECT_TYPE_NAME (GTK_ACTION (current));
|
||||||
|
gboolean active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current));
|
||||||
|
gint value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current));
|
||||||
|
|
||||||
|
if (active)
|
||||||
|
{
|
||||||
|
GtkWidget *dialog;
|
||||||
|
|
||||||
|
dialog = gtk_message_dialog_new (GTK_WINDOW (window),
|
||||||
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
|
GTK_MESSAGE_INFO,
|
||||||
|
GTK_BUTTONS_CLOSE,
|
||||||
|
"You activated radio action: \"%s\" of type \"%s\".\n"
|
||||||
|
"Current value: %d",
|
||||||
|
name, typename, value);
|
||||||
|
|
||||||
|
/* Close dialog on user response */
|
||||||
|
g_signal_connect (dialog,
|
||||||
|
"response",
|
||||||
|
G_CALLBACK (gtk_widget_destroy),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
gtk_widget_show (dialog);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_email (GtkAboutDialog *about,
|
||||||
|
const gchar *link,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
g_print ("send mail to %s\n", link);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_url (GtkAboutDialog *about,
|
||||||
|
const gchar *link,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
g_print ("show url %s\n", link);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
about_cb (GtkAction *action,
|
||||||
|
GtkWidget *window)
|
||||||
|
{
|
||||||
|
GdkPixbuf *pixbuf, *transparent;
|
||||||
|
gchar *filename;
|
||||||
|
|
||||||
|
const gchar *authors[] = {
|
||||||
|
"Peter Mattis",
|
||||||
|
"Spencer Kimball",
|
||||||
|
"Josh MacDonald",
|
||||||
|
"and many more...",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
const gchar *documentors[] = {
|
||||||
|
"Owen Taylor",
|
||||||
|
"Tony Gale",
|
||||||
|
"Matthias Clasen <mclasen@redhat.com>",
|
||||||
|
"and many more...",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
const gchar *license =
|
||||||
|
"This library is free software; you can redistribute it and/or\n"
|
||||||
|
"modify it under the terms of the GNU Library General Public License as\n"
|
||||||
|
"published by the Free Software Foundation; either version 2 of the\n"
|
||||||
|
"License, or (at your option) any later version.\n"
|
||||||
|
"\n"
|
||||||
|
"This library is distributed in the hope that it will be useful,\n"
|
||||||
|
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
|
||||||
|
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
|
||||||
|
"Library General Public License for more details.\n"
|
||||||
|
"\n"
|
||||||
|
"You should have received a copy of the GNU Library General Public\n"
|
||||||
|
"License along with the Gnome Library; see the file COPYING.LIB. If not,\n"
|
||||||
|
"write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,\n"
|
||||||
|
"Boston, MA 02111-1307, USA.\n";
|
||||||
|
|
||||||
|
pixbuf = NULL;
|
||||||
|
transparent = NULL;
|
||||||
|
filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
|
||||||
|
if (filename)
|
||||||
|
{
|
||||||
|
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
|
||||||
|
g_free (filename);
|
||||||
|
transparent = gdk_pixbuf_add_alpha (pixbuf, TRUE, 0xff, 0xff, 0xff);
|
||||||
|
g_object_unref (pixbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_about_dialog_set_email_hook (activate_email, NULL, NULL);
|
||||||
|
gtk_about_dialog_set_url_hook (activate_url, NULL, NULL);
|
||||||
|
gtk_show_about_dialog (GTK_WINDOW (window),
|
||||||
|
"program-name", "GTK+ Code Demos",
|
||||||
|
"version", PACKAGE_VERSION,
|
||||||
|
"copyright", "(C) 1997-2009 The GTK+ Team",
|
||||||
|
"license", license,
|
||||||
|
"website", "http://www.gtk.org",
|
||||||
|
"comments", "Program to demonstrate GTK+ functions.",
|
||||||
|
"authors", authors,
|
||||||
|
"documenters", documentors,
|
||||||
|
"logo", transparent,
|
||||||
|
"title", "About GTK+ Code Demos",
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_object_unref (transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
GtkAction action;
|
||||||
|
} ToolMenuAction;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
GtkActionClass parent_class;
|
||||||
|
} ToolMenuActionClass;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE(ToolMenuAction, tool_menu_action, GTK_TYPE_ACTION)
|
||||||
|
|
||||||
|
static void
|
||||||
|
tool_menu_action_class_init (ToolMenuActionClass *class)
|
||||||
|
{
|
||||||
|
GTK_ACTION_CLASS (class)->toolbar_item_type = GTK_TYPE_MENU_TOOL_BUTTON;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
tool_menu_action_init (ToolMenuAction *action)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkActionEntry entries[] = {
|
||||||
|
{ "FileMenu", NULL, "_File" }, /* name, stock id, label */
|
||||||
|
{ "OpenMenu", NULL, "_Open" }, /* name, stock id, label */
|
||||||
|
{ "PreferencesMenu", NULL, "_Preferences" }, /* name, stock id, label */
|
||||||
|
{ "ColorMenu", NULL, "_Color" }, /* name, stock id, label */
|
||||||
|
{ "ShapeMenu", NULL, "_Shape" }, /* name, stock id, label */
|
||||||
|
{ "HelpMenu", NULL, "_Help" }, /* name, stock id, label */
|
||||||
|
{ "New", GTK_STOCK_NEW, /* name, stock id */
|
||||||
|
"_New", "<control>N", /* label, accelerator */
|
||||||
|
"Create a new file", /* tooltip */
|
||||||
|
G_CALLBACK (activate_action) },
|
||||||
|
{ "File1", NULL, /* name, stock id */
|
||||||
|
"File1", NULL, /* label, accelerator */
|
||||||
|
"Open first file", /* tooltip */
|
||||||
|
G_CALLBACK (activate_action) },
|
||||||
|
{ "Save", GTK_STOCK_SAVE, /* name, stock id */
|
||||||
|
"_Save","<control>S", /* label, accelerator */
|
||||||
|
"Save current file", /* tooltip */
|
||||||
|
G_CALLBACK (activate_action) },
|
||||||
|
{ "SaveAs", GTK_STOCK_SAVE, /* name, stock id */
|
||||||
|
"Save _As...", NULL, /* label, accelerator */
|
||||||
|
"Save to a file", /* tooltip */
|
||||||
|
G_CALLBACK (activate_action) },
|
||||||
|
{ "Quit", GTK_STOCK_QUIT, /* name, stock id */
|
||||||
|
"_Quit", "<control>Q", /* label, accelerator */
|
||||||
|
"Quit", /* tooltip */
|
||||||
|
G_CALLBACK (activate_action) },
|
||||||
|
{ "About", NULL, /* name, stock id */
|
||||||
|
"_About", "<control>A", /* label, accelerator */
|
||||||
|
"About", /* tooltip */
|
||||||
|
G_CALLBACK (about_cb) },
|
||||||
|
{ "Logo", "demo-gtk-logo", /* name, stock id */
|
||||||
|
NULL, NULL, /* label, accelerator */
|
||||||
|
"GTK+", /* tooltip */
|
||||||
|
G_CALLBACK (activate_action) },
|
||||||
|
};
|
||||||
|
static guint n_entries = G_N_ELEMENTS (entries);
|
||||||
|
|
||||||
|
|
||||||
|
static GtkToggleActionEntry toggle_entries[] = {
|
||||||
|
{ "Bold", GTK_STOCK_BOLD, /* name, stock id */
|
||||||
|
"_Bold", "<control>B", /* label, accelerator */
|
||||||
|
"Bold", /* tooltip */
|
||||||
|
G_CALLBACK (activate_action),
|
||||||
|
TRUE }, /* is_active */
|
||||||
|
};
|
||||||
|
static guint n_toggle_entries = G_N_ELEMENTS (toggle_entries);
|
||||||
|
|
||||||
|
enum {
|
||||||
|
COLOR_RED,
|
||||||
|
COLOR_GREEN,
|
||||||
|
COLOR_BLUE
|
||||||
|
};
|
||||||
|
|
||||||
|
static GtkRadioActionEntry color_entries[] = {
|
||||||
|
{ "Red", NULL, /* name, stock id */
|
||||||
|
"_Red", "<control>R", /* label, accelerator */
|
||||||
|
"Blood", COLOR_RED }, /* tooltip, value */
|
||||||
|
{ "Green", NULL, /* name, stock id */
|
||||||
|
"_Green", "<control>G", /* label, accelerator */
|
||||||
|
"Grass", COLOR_GREEN }, /* tooltip, value */
|
||||||
|
{ "Blue", NULL, /* name, stock id */
|
||||||
|
"_Blue", "<control>B", /* label, accelerator */
|
||||||
|
"Sky", COLOR_BLUE }, /* tooltip, value */
|
||||||
|
};
|
||||||
|
static guint n_color_entries = G_N_ELEMENTS (color_entries);
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SHAPE_SQUARE,
|
||||||
|
SHAPE_RECTANGLE,
|
||||||
|
SHAPE_OVAL
|
||||||
|
};
|
||||||
|
|
||||||
|
static GtkRadioActionEntry shape_entries[] = {
|
||||||
|
{ "Square", NULL, /* name, stock id */
|
||||||
|
"_Square", "<control>S", /* label, accelerator */
|
||||||
|
"Square", SHAPE_SQUARE }, /* tooltip, value */
|
||||||
|
{ "Rectangle", NULL, /* name, stock id */
|
||||||
|
"_Rectangle", "<control>R", /* label, accelerator */
|
||||||
|
"Rectangle", SHAPE_RECTANGLE }, /* tooltip, value */
|
||||||
|
{ "Oval", NULL, /* name, stock id */
|
||||||
|
"_Oval", "<control>O", /* label, accelerator */
|
||||||
|
"Egg", SHAPE_OVAL }, /* tooltip, value */
|
||||||
|
};
|
||||||
|
static guint n_shape_entries = G_N_ELEMENTS (shape_entries);
|
||||||
|
|
||||||
|
static const gchar *ui_info =
|
||||||
|
"<ui>"
|
||||||
|
" <menubar name='MenuBar'>"
|
||||||
|
" <menu action='FileMenu'>"
|
||||||
|
" <menuitem action='New'/>"
|
||||||
|
" <menuitem action='Open'/>"
|
||||||
|
" <menuitem action='Save'/>"
|
||||||
|
" <menuitem action='SaveAs'/>"
|
||||||
|
" <separator/>"
|
||||||
|
" <menuitem action='Quit'/>"
|
||||||
|
" </menu>"
|
||||||
|
" <menu action='PreferencesMenu'>"
|
||||||
|
" <menu action='ColorMenu'>"
|
||||||
|
" <menuitem action='Red'/>"
|
||||||
|
" <menuitem action='Green'/>"
|
||||||
|
" <menuitem action='Blue'/>"
|
||||||
|
" </menu>"
|
||||||
|
" <menu action='ShapeMenu'>"
|
||||||
|
" <menuitem action='Square'/>"
|
||||||
|
" <menuitem action='Rectangle'/>"
|
||||||
|
" <menuitem action='Oval'/>"
|
||||||
|
" </menu>"
|
||||||
|
" <menuitem action='Bold'/>"
|
||||||
|
" </menu>"
|
||||||
|
" <menu action='HelpMenu'>"
|
||||||
|
" <menuitem action='About'/>"
|
||||||
|
" </menu>"
|
||||||
|
" </menubar>"
|
||||||
|
" <toolbar name='ToolBar'>"
|
||||||
|
" <toolitem action='Open'>"
|
||||||
|
" <menu action='OpenMenu'>"
|
||||||
|
" <menuitem action='File1'/>"
|
||||||
|
" </menu>"
|
||||||
|
" </toolitem>"
|
||||||
|
" <toolitem action='Quit'/>"
|
||||||
|
" <separator action='Sep1'/>"
|
||||||
|
" <toolitem action='Logo'/>"
|
||||||
|
" </toolbar>"
|
||||||
|
"</ui>";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* This function registers our custom toolbar icons, so they can be themed.
|
||||||
|
*
|
||||||
|
* It's totally optional to do this, you could just manually insert icons
|
||||||
|
* and have them not be themeable, especially if you never expect people
|
||||||
|
* to theme your app.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
register_stock_icons (void)
|
||||||
|
{
|
||||||
|
static gboolean registered = FALSE;
|
||||||
|
|
||||||
|
if (!registered)
|
||||||
|
{
|
||||||
|
GdkPixbuf *pixbuf;
|
||||||
|
GtkIconFactory *factory;
|
||||||
|
char *filename;
|
||||||
|
|
||||||
|
static GtkStockItem items[] = {
|
||||||
|
{ "demo-gtk-logo",
|
||||||
|
"_GTK!",
|
||||||
|
0, 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
registered = TRUE;
|
||||||
|
|
||||||
|
/* Register our stock items */
|
||||||
|
gtk_stock_add (items, G_N_ELEMENTS (items));
|
||||||
|
|
||||||
|
/* Add our custom icon factory to the list of defaults */
|
||||||
|
factory = gtk_icon_factory_new ();
|
||||||
|
gtk_icon_factory_add_default (factory);
|
||||||
|
|
||||||
|
/* demo_find_file() looks in the current directory first,
|
||||||
|
* so you can run gtk-demo without installing GTK, then looks
|
||||||
|
* in the location where the file is installed.
|
||||||
|
*/
|
||||||
|
pixbuf = NULL;
|
||||||
|
filename = demo_find_file ("gtk-logo-rgb.gif", NULL);
|
||||||
|
if (filename)
|
||||||
|
{
|
||||||
|
pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
|
||||||
|
g_free (filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Register icon to accompany stock item */
|
||||||
|
if (pixbuf != NULL)
|
||||||
|
{
|
||||||
|
GtkIconSet *icon_set;
|
||||||
|
GdkPixbuf *transparent;
|
||||||
|
|
||||||
|
/* The gtk-logo-rgb icon has a white background, make it transparent */
|
||||||
|
transparent = gdk_pixbuf_add_alpha (pixbuf, TRUE, 0xff, 0xff, 0xff);
|
||||||
|
|
||||||
|
icon_set = gtk_icon_set_new_from_pixbuf (transparent);
|
||||||
|
gtk_icon_factory_add (factory, "demo-gtk-logo", icon_set);
|
||||||
|
gtk_icon_set_unref (icon_set);
|
||||||
|
g_object_unref (pixbuf);
|
||||||
|
g_object_unref (transparent);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
g_warning ("failed to load GTK logo for toolbar");
|
||||||
|
|
||||||
|
/* Drop our reference to the factory, GTK will hold a reference. */
|
||||||
|
g_object_unref (factory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_statusbar (GtkTextBuffer *buffer,
|
||||||
|
GtkStatusbar *statusbar)
|
||||||
|
{
|
||||||
|
gchar *msg;
|
||||||
|
gint row, col;
|
||||||
|
gint count;
|
||||||
|
GtkTextIter iter;
|
||||||
|
|
||||||
|
gtk_statusbar_pop (statusbar, 0); /* clear any previous message,
|
||||||
|
* underflow is allowed
|
||||||
|
*/
|
||||||
|
|
||||||
|
count = gtk_text_buffer_get_char_count (buffer);
|
||||||
|
|
||||||
|
gtk_text_buffer_get_iter_at_mark (buffer,
|
||||||
|
&iter,
|
||||||
|
gtk_text_buffer_get_insert (buffer));
|
||||||
|
|
||||||
|
row = gtk_text_iter_get_line (&iter);
|
||||||
|
col = gtk_text_iter_get_line_offset (&iter);
|
||||||
|
|
||||||
|
msg = g_strdup_printf ("Cursor at row %d column %d - %d chars in document",
|
||||||
|
row, col, count);
|
||||||
|
|
||||||
|
gtk_statusbar_push (statusbar, 0, msg);
|
||||||
|
|
||||||
|
g_free (msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
mark_set_callback (GtkTextBuffer *buffer,
|
||||||
|
const GtkTextIter *new_location,
|
||||||
|
GtkTextMark *mark,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
update_statusbar (buffer, GTK_STATUSBAR (data));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_resize_grip (GtkWidget *widget,
|
||||||
|
GdkEventWindowState *event,
|
||||||
|
GtkStatusbar *statusbar)
|
||||||
|
{
|
||||||
|
if (event->changed_mask & (GDK_WINDOW_STATE_MAXIMIZED |
|
||||||
|
GDK_WINDOW_STATE_FULLSCREEN))
|
||||||
|
{
|
||||||
|
gboolean maximized;
|
||||||
|
|
||||||
|
maximized = event->new_window_state & (GDK_WINDOW_STATE_MAXIMIZED |
|
||||||
|
GDK_WINDOW_STATE_FULLSCREEN);
|
||||||
|
gtk_statusbar_set_has_resize_grip (statusbar, !maximized);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GtkWidget *
|
||||||
|
do_appwindow (GtkWidget *do_widget)
|
||||||
|
{
|
||||||
|
if (!window)
|
||||||
|
{
|
||||||
|
GtkWidget *table;
|
||||||
|
GtkWidget *statusbar;
|
||||||
|
GtkWidget *contents;
|
||||||
|
GtkWidget *sw;
|
||||||
|
GtkWidget *bar;
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
|
GtkActionGroup *action_group;
|
||||||
|
GtkAction *open_action;
|
||||||
|
GtkUIManager *merge;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
register_stock_icons ();
|
||||||
|
|
||||||
|
/* Create the toplevel window
|
||||||
|
*/
|
||||||
|
|
||||||
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
|
gtk_window_set_screen (GTK_WINDOW (window),
|
||||||
|
gtk_widget_get_screen (do_widget));
|
||||||
|
gtk_window_set_title (GTK_WINDOW (window), "Application Window");
|
||||||
|
gtk_window_set_icon_name (GTK_WINDOW (window), "gtk-open");
|
||||||
|
|
||||||
|
/* NULL window variable when window is closed */
|
||||||
|
g_signal_connect (window, "destroy",
|
||||||
|
G_CALLBACK (gtk_widget_destroyed),
|
||||||
|
&window);
|
||||||
|
|
||||||
|
table = gtk_table_new (1, 4, FALSE);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (window), table);
|
||||||
|
|
||||||
|
/* Create the menubar and toolbar
|
||||||
|
*/
|
||||||
|
|
||||||
|
action_group = gtk_action_group_new ("AppWindowActions");
|
||||||
|
open_action = g_object_new (tool_menu_action_get_type (),
|
||||||
|
"name", "Open",
|
||||||
|
"label", "_Open",
|
||||||
|
"tooltip", "Open a file",
|
||||||
|
"stock-id", GTK_STOCK_OPEN,
|
||||||
|
NULL);
|
||||||
|
gtk_action_group_add_action (action_group, open_action);
|
||||||
|
g_object_unref (open_action);
|
||||||
|
gtk_action_group_add_actions (action_group,
|
||||||
|
entries, n_entries,
|
||||||
|
window);
|
||||||
|
gtk_action_group_add_toggle_actions (action_group,
|
||||||
|
toggle_entries, n_toggle_entries,
|
||||||
|
NULL);
|
||||||
|
gtk_action_group_add_radio_actions (action_group,
|
||||||
|
color_entries, n_color_entries,
|
||||||
|
COLOR_RED,
|
||||||
|
G_CALLBACK (activate_radio_action),
|
||||||
|
NULL);
|
||||||
|
gtk_action_group_add_radio_actions (action_group,
|
||||||
|
shape_entries, n_shape_entries,
|
||||||
|
SHAPE_SQUARE,
|
||||||
|
G_CALLBACK (activate_radio_action),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
merge = gtk_ui_manager_new ();
|
||||||
|
g_object_set_data_full (G_OBJECT (window), "ui-manager", merge,
|
||||||
|
g_object_unref);
|
||||||
|
gtk_ui_manager_insert_action_group (merge, action_group, 0);
|
||||||
|
gtk_window_add_accel_group (GTK_WINDOW (window),
|
||||||
|
gtk_ui_manager_get_accel_group (merge));
|
||||||
|
|
||||||
|
if (!gtk_ui_manager_add_ui_from_string (merge, ui_info, -1, &error))
|
||||||
|
{
|
||||||
|
g_message ("building menus failed: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
bar = gtk_ui_manager_get_widget (merge, "/MenuBar");
|
||||||
|
gtk_widget_show (bar);
|
||||||
|
gtk_table_attach (GTK_TABLE (table),
|
||||||
|
bar,
|
||||||
|
/* X direction */ /* Y direction */
|
||||||
|
0, 1, 0, 1,
|
||||||
|
GTK_EXPAND | GTK_FILL, 0,
|
||||||
|
0, 0);
|
||||||
|
|
||||||
|
bar = gtk_ui_manager_get_widget (merge, "/ToolBar");
|
||||||
|
gtk_widget_show (bar);
|
||||||
|
gtk_table_attach (GTK_TABLE (table),
|
||||||
|
bar,
|
||||||
|
/* X direction */ /* Y direction */
|
||||||
|
0, 1, 1, 2,
|
||||||
|
GTK_EXPAND | GTK_FILL, 0,
|
||||||
|
0, 0);
|
||||||
|
|
||||||
|
/* Create document
|
||||||
|
*/
|
||||||
|
|
||||||
|
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||||
|
|
||||||
|
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||||
|
GTK_POLICY_AUTOMATIC,
|
||||||
|
GTK_POLICY_AUTOMATIC);
|
||||||
|
|
||||||
|
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
|
||||||
|
GTK_SHADOW_IN);
|
||||||
|
|
||||||
|
gtk_table_attach (GTK_TABLE (table),
|
||||||
|
sw,
|
||||||
|
/* X direction */ /* Y direction */
|
||||||
|
0, 1, 2, 3,
|
||||||
|
GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL,
|
||||||
|
0, 0);
|
||||||
|
|
||||||
|
gtk_window_set_default_size (GTK_WINDOW (window),
|
||||||
|
200, 200);
|
||||||
|
|
||||||
|
contents = gtk_text_view_new ();
|
||||||
|
gtk_widget_grab_focus (contents);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (sw),
|
||||||
|
contents);
|
||||||
|
|
||||||
|
/* Create statusbar */
|
||||||
|
|
||||||
|
statusbar = gtk_statusbar_new ();
|
||||||
|
gtk_table_attach (GTK_TABLE (table),
|
||||||
|
statusbar,
|
||||||
|
/* X direction */ /* Y direction */
|
||||||
|
0, 1, 3, 4,
|
||||||
|
GTK_EXPAND | GTK_FILL, 0,
|
||||||
|
0, 0);
|
||||||
|
|
||||||
|
/* Show text widget info in the statusbar */
|
||||||
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents));
|
||||||
|
|
||||||
|
g_signal_connect_object (buffer,
|
||||||
|
"changed",
|
||||||
|
G_CALLBACK (update_statusbar),
|
||||||
|
statusbar,
|
||||||
|
0);
|
||||||
|
|
||||||
|
g_signal_connect_object (buffer,
|
||||||
|
"mark_set", /* cursor moved */
|
||||||
|
G_CALLBACK (mark_set_callback),
|
||||||
|
statusbar,
|
||||||
|
0);
|
||||||
|
|
||||||
|
g_signal_connect_object (window,
|
||||||
|
"window_state_event",
|
||||||
|
G_CALLBACK (update_resize_grip),
|
||||||
|
statusbar,
|
||||||
|
0);
|
||||||
|
|
||||||
|
update_statusbar (buffer, GTK_STATUSBAR (statusbar));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!GTK_WIDGET_VISIBLE (window))
|
||||||
|
{
|
||||||
|
gtk_widget_show_all (window);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gtk_widget_destroy (window);
|
||||||
|
window = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return window;
|
||||||
|
}
|
||||||
|
|
@@ -1,43 +1,20 @@
|
|||||||
/* Assistant
|
/* Assistant
|
||||||
*
|
*
|
||||||
* Demonstrates a sample multi-step assistant. Assistants are used to divide
|
* Demonstrates a sample multistep assistant. Assistants are used to divide
|
||||||
* an operation into several simpler sequential steps, and to guide the user
|
* an operation into several simpler sequential steps, and to guide the user
|
||||||
* through these steps.
|
* through these steps.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
#include "demo-common.h"
|
||||||
|
|
||||||
static GtkWidget *assistant = NULL;
|
static GtkWidget *assistant = NULL;
|
||||||
static GtkWidget *progress_bar = NULL;
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
apply_changes_gradually (gpointer data)
|
|
||||||
{
|
|
||||||
gdouble fraction;
|
|
||||||
|
|
||||||
/* Work, work, work... */
|
|
||||||
fraction = gtk_progress_bar_get_fraction (GTK_PROGRESS_BAR (progress_bar));
|
|
||||||
fraction += 0.05;
|
|
||||||
|
|
||||||
if (fraction < 1.0)
|
|
||||||
{
|
|
||||||
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), fraction);
|
|
||||||
return G_SOURCE_CONTINUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Close automatically once changes are fully applied. */
|
|
||||||
gtk_widget_destroy (assistant);
|
|
||||||
assistant = NULL;
|
|
||||||
return G_SOURCE_REMOVE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
on_assistant_apply (GtkWidget *widget, gpointer data)
|
on_assistant_apply (GtkWidget *widget, gpointer data)
|
||||||
{
|
{
|
||||||
/* Start a timer to simulate changes taking a few seconds to apply. */
|
/* Apply here changes, this is a fictional
|
||||||
g_timeout_add (100, apply_changes_gradually, NULL);
|
example, so we just do nothing here */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -61,13 +38,6 @@ on_assistant_prepare (GtkWidget *widget, GtkWidget *page, gpointer data)
|
|||||||
title = g_strdup_printf ("Sample assistant (%d of %d)", current_page + 1, n_pages);
|
title = g_strdup_printf ("Sample assistant (%d of %d)", current_page + 1, n_pages);
|
||||||
gtk_window_set_title (GTK_WINDOW (widget), title);
|
gtk_window_set_title (GTK_WINDOW (widget), title);
|
||||||
g_free (title);
|
g_free (title);
|
||||||
|
|
||||||
/* The fourth page (counting from zero) is the progress page. The
|
|
||||||
* user clicked Apply to get here so we tell the assistant to commit,
|
|
||||||
* which means the changes up to this point are permanent and cannot
|
|
||||||
* be cancelled or revisited. */
|
|
||||||
if (current_page == 3)
|
|
||||||
gtk_assistant_commit (GTK_ASSISTANT (widget));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -80,7 +50,7 @@ on_entry_changed (GtkWidget *widget, gpointer data)
|
|||||||
|
|
||||||
page_number = gtk_assistant_get_current_page (assistant);
|
page_number = gtk_assistant_get_current_page (assistant);
|
||||||
current_page = gtk_assistant_get_nth_page (assistant, page_number);
|
current_page = gtk_assistant_get_nth_page (assistant, page_number);
|
||||||
text = gtk_editable_get_text (GTK_EDITABLE (widget));
|
text = gtk_entry_get_text (GTK_ENTRY (widget));
|
||||||
|
|
||||||
if (text && *text)
|
if (text && *text)
|
||||||
gtk_assistant_set_page_complete (assistant, current_page, TRUE);
|
gtk_assistant_set_page_complete (assistant, current_page, TRUE);
|
||||||
@@ -92,44 +62,57 @@ static void
|
|||||||
create_page1 (GtkWidget *assistant)
|
create_page1 (GtkWidget *assistant)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *label, *entry;
|
GtkWidget *box, *label, *entry;
|
||||||
|
GdkPixbuf *pixbuf;
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
|
box = gtk_hbox_new (FALSE, 12);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (box), 12);
|
||||||
|
|
||||||
label = gtk_label_new ("You must fill out this entry to continue:");
|
label = gtk_label_new ("You must fill out this entry to continue:");
|
||||||
gtk_container_add (GTK_CONTAINER (box), label);
|
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
|
||||||
|
|
||||||
entry = gtk_entry_new ();
|
entry = gtk_entry_new ();
|
||||||
gtk_entry_set_activates_default (GTK_ENTRY (entry), TRUE);
|
gtk_box_pack_start (GTK_BOX (box), entry, TRUE, TRUE, 0);
|
||||||
gtk_widget_set_valign (entry, GTK_ALIGN_CENTER);
|
|
||||||
gtk_container_add (GTK_CONTAINER (box), entry);
|
|
||||||
g_signal_connect (G_OBJECT (entry), "changed",
|
g_signal_connect (G_OBJECT (entry), "changed",
|
||||||
G_CALLBACK (on_entry_changed), assistant);
|
G_CALLBACK (on_entry_changed), assistant);
|
||||||
|
|
||||||
|
gtk_widget_show_all (box);
|
||||||
gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
|
gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
|
||||||
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, "Page 1");
|
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, "Page 1");
|
||||||
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), box, GTK_ASSISTANT_PAGE_INTRO);
|
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), box, GTK_ASSISTANT_PAGE_INTRO);
|
||||||
|
|
||||||
|
pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL);
|
||||||
|
gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), box, pixbuf);
|
||||||
|
g_object_unref (pixbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
create_page2 (GtkWidget *assistant)
|
create_page2 (GtkWidget *assistant)
|
||||||
{
|
{
|
||||||
GtkWidget *box, *checkbutton;
|
GtkWidget *box, *checkbutton;
|
||||||
|
GdkPixbuf *pixbuf;
|
||||||
|
|
||||||
box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
|
box = gtk_vbox_new (12, FALSE);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (box), 12);
|
||||||
|
|
||||||
checkbutton = gtk_check_button_new_with_label ("This is optional data, you may continue "
|
checkbutton = gtk_check_button_new_with_label ("This is optional data, you may continue "
|
||||||
"even if you do not check this");
|
"even if you do not check this");
|
||||||
gtk_container_add (GTK_CONTAINER (box), checkbutton);
|
gtk_box_pack_start (GTK_BOX (box), checkbutton, FALSE, FALSE, 0);
|
||||||
|
|
||||||
|
gtk_widget_show_all (box);
|
||||||
gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
|
gtk_assistant_append_page (GTK_ASSISTANT (assistant), box);
|
||||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), box, TRUE);
|
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), box, TRUE);
|
||||||
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, "Page 2");
|
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), box, "Page 2");
|
||||||
|
|
||||||
|
pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL);
|
||||||
|
gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), box, pixbuf);
|
||||||
|
g_object_unref (pixbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
create_page3 (GtkWidget *assistant)
|
create_page3 (GtkWidget *assistant)
|
||||||
{
|
{
|
||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
|
GdkPixbuf *pixbuf;
|
||||||
|
|
||||||
label = gtk_label_new ("This is a confirmation page, press 'Apply' to apply changes");
|
label = gtk_label_new ("This is a confirmation page, press 'Apply' to apply changes");
|
||||||
|
|
||||||
@@ -138,27 +121,10 @@ create_page3 (GtkWidget *assistant)
|
|||||||
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), label, GTK_ASSISTANT_PAGE_CONFIRM);
|
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), label, GTK_ASSISTANT_PAGE_CONFIRM);
|
||||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), label, TRUE);
|
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), label, TRUE);
|
||||||
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), label, "Confirmation");
|
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), label, "Confirmation");
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
pixbuf = gtk_widget_render_icon (assistant, GTK_STOCK_DIALOG_INFO, GTK_ICON_SIZE_DIALOG, NULL);
|
||||||
create_page4 (GtkWidget *assistant)
|
gtk_assistant_set_page_header_image (GTK_ASSISTANT (assistant), label, pixbuf);
|
||||||
{
|
g_object_unref (pixbuf);
|
||||||
progress_bar = gtk_progress_bar_new ();
|
|
||||||
gtk_widget_set_halign (progress_bar, GTK_ALIGN_FILL);
|
|
||||||
gtk_widget_set_valign (progress_bar, GTK_ALIGN_CENTER);
|
|
||||||
gtk_widget_set_hexpand (progress_bar, TRUE);
|
|
||||||
gtk_widget_set_margin_start (progress_bar, 40);
|
|
||||||
gtk_widget_set_margin_end (progress_bar, 40);
|
|
||||||
|
|
||||||
gtk_widget_show (progress_bar);
|
|
||||||
gtk_assistant_append_page (GTK_ASSISTANT (assistant), progress_bar);
|
|
||||||
gtk_assistant_set_page_type (GTK_ASSISTANT (assistant), progress_bar, GTK_ASSISTANT_PAGE_PROGRESS);
|
|
||||||
gtk_assistant_set_page_title (GTK_ASSISTANT (assistant), progress_bar, "Applying changes");
|
|
||||||
|
|
||||||
/* This prevents the assistant window from being
|
|
||||||
* closed while we're "busy" applying changes.
|
|
||||||
*/
|
|
||||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (assistant), progress_bar, FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GtkWidget*
|
GtkWidget*
|
||||||
@@ -170,13 +136,12 @@ do_assistant (GtkWidget *do_widget)
|
|||||||
|
|
||||||
gtk_window_set_default_size (GTK_WINDOW (assistant), -1, 300);
|
gtk_window_set_default_size (GTK_WINDOW (assistant), -1, 300);
|
||||||
|
|
||||||
gtk_window_set_display (GTK_WINDOW (assistant),
|
gtk_window_set_screen (GTK_WINDOW (assistant),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_screen (do_widget));
|
||||||
|
|
||||||
create_page1 (assistant);
|
create_page1 (assistant);
|
||||||
create_page2 (assistant);
|
create_page2 (assistant);
|
||||||
create_page3 (assistant);
|
create_page3 (assistant);
|
||||||
create_page4 (assistant);
|
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT (assistant), "cancel",
|
g_signal_connect (G_OBJECT (assistant), "cancel",
|
||||||
G_CALLBACK (on_assistant_close_cancel), &assistant);
|
G_CALLBACK (on_assistant_close_cancel), &assistant);
|
||||||
@@ -188,7 +153,7 @@ do_assistant (GtkWidget *do_widget)
|
|||||||
G_CALLBACK (on_assistant_prepare), NULL);
|
G_CALLBACK (on_assistant_prepare), NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (assistant))
|
if (!GTK_WIDGET_VISIBLE (assistant))
|
||||||
gtk_widget_show (assistant);
|
gtk_widget_show (assistant);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@@ -1,337 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<requires lib="gtk+" version="3.20"/>
|
|
||||||
<object class="GtkWindow" id="window">
|
|
||||||
<property name="resizable">0</property>
|
|
||||||
<property name="title">CSS Blend Modes</property>
|
|
||||||
<property name="default-width">400</property>
|
|
||||||
<property name="default-height">300</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkGrid">
|
|
||||||
<property name="row-spacing">12</property>
|
|
||||||
<property name="column-spacing">12</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="label" translatable="yes">Blend mode:</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">0</property>
|
|
||||||
<property name="top-attach">0</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkScrolledWindow" id="scrolledwindow">
|
|
||||||
<property name="can-focus">1</property>
|
|
||||||
<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>
|
|
||||||
</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>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkStack" id="stack">
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<property name="vexpand">1</property>
|
|
||||||
<property name="hhomogeneous">0</property>
|
|
||||||
<property name="vhomogeneous">0</property>
|
|
||||||
<property name="transition-type">crossfade</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkStackPage">
|
|
||||||
<property name="name">page0</property>
|
|
||||||
<property name="title" translatable="yes">Ducky</property>
|
|
||||||
<property name="child">
|
|
||||||
<object class="GtkGrid">
|
|
||||||
<property name="halign">center</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<property name="vexpand">1</property>
|
|
||||||
<property name="row-spacing">12</property>
|
|
||||||
<property name="column-spacing">12</property>
|
|
||||||
<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>
|
|
||||||
</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>
|
|
||||||
</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>
|
|
||||||
</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>
|
|
||||||
</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>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage">
|
|
||||||
<property name="halign">center</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>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkStackPage">
|
|
||||||
<property name="name">page1</property>
|
|
||||||
<property name="title" translatable="yes">Blends</property>
|
|
||||||
<property name="child">
|
|
||||||
<object class="GtkGrid">
|
|
||||||
<property name="halign">center</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<property name="vexpand">1</property>
|
|
||||||
<property name="row-spacing">12</property>
|
|
||||||
<property name="column-spacing">12</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>
|
|
||||||
</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>
|
|
||||||
</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>
|
|
||||||
</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>
|
|
||||||
</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>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage">
|
|
||||||
<property name="halign">center</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>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkStackPage">
|
|
||||||
<property name="name">page2</property>
|
|
||||||
<property name="title" translatable="yes">CMYK</property>
|
|
||||||
<property name="child">
|
|
||||||
<object class="GtkGrid">
|
|
||||||
<property name="halign">center</property>
|
|
||||||
<property name="valign">center</property>
|
|
||||||
<property name="hexpand">1</property>
|
|
||||||
<property name="vexpand">1</property>
|
|
||||||
<property name="row-spacing">6</property>
|
|
||||||
<property name="column-spacing">12</property>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage">
|
|
||||||
<style>
|
|
||||||
<class name="cyan"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">0</property>
|
|
||||||
<property name="top-attach">1</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</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>
|
|
||||||
</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>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkImage">
|
|
||||||
<property name="halign">center</property>
|
|
||||||
<style>
|
|
||||||
<class name="blend2"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">1</property>
|
|
||||||
<property name="top-attach">3</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="label" translatable="yes">Cyan</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">0</property>
|
|
||||||
<property name="top-attach">0</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="label" translatable="yes">Magenta</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">1</property>
|
|
||||||
<property name="top-attach">0</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="label" translatable="yes">Yellow</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<style>
|
|
||||||
<class name="dim-label"/>
|
|
||||||
</style>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">0</property>
|
|
||||||
<property name="top-attach">2</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="label" translatable="yes">Blended picture</property>
|
|
||||||
<property name="xalign">0</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="weight" value="bold"></attribute>
|
|
||||||
</attributes>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">1</property>
|
|
||||||
<property name="top-attach">2</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<layout>
|
|
||||||
<property name="left-attach">1</property>
|
|
||||||
<property name="top-attach">1</property>
|
|
||||||
</layout>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child type="titlebar"/>
|
|
||||||
</object>
|
|
||||||
</interface>
|
|
Before Width: | Height: | Size: 788 B |
@@ -1,481 +0,0 @@
|
|||||||
/*
|
|
||||||
* bluroverlay.c
|
|
||||||
* This file is part of gtk
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 - Ignacio Casal Quinteiro, Mike Krüger
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "bluroverlay.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is a cut-down copy of gtkoverlay.c with a custom snapshot
|
|
||||||
* function that support a limited form of blur-under.
|
|
||||||
*/
|
|
||||||
typedef struct _BlurOverlayChild BlurOverlayChild;
|
|
||||||
|
|
||||||
struct _BlurOverlayChild
|
|
||||||
{
|
|
||||||
double blur;
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
GET_CHILD_POSITION,
|
|
||||||
LAST_SIGNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0 };
|
|
||||||
static GQuark child_data_quark = 0;
|
|
||||||
|
|
||||||
G_DEFINE_TYPE (BlurOverlay, blur_overlay, GTK_TYPE_BIN)
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_set_overlay_child (GtkWidget *widget,
|
|
||||||
BlurOverlayChild *child_data)
|
|
||||||
{
|
|
||||||
g_object_set_qdata_full (G_OBJECT (widget), child_data_quark, child_data, g_free);
|
|
||||||
}
|
|
||||||
|
|
||||||
static BlurOverlayChild *
|
|
||||||
blur_overlay_get_overlay_child (GtkWidget *widget)
|
|
||||||
{
|
|
||||||
return (BlurOverlayChild *) g_object_get_qdata (G_OBJECT (widget), child_data_quark);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_measure (GtkWidget *widget,
|
|
||||||
GtkOrientation orientation,
|
|
||||||
int for_size,
|
|
||||||
int *minimum,
|
|
||||||
int *natural,
|
|
||||||
int *minimum_baseline,
|
|
||||||
int *natural_baseline)
|
|
||||||
{
|
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
int child_min, child_nat, child_min_baseline, child_nat_baseline;
|
|
||||||
|
|
||||||
gtk_widget_measure (child,
|
|
||||||
orientation,
|
|
||||||
for_size,
|
|
||||||
&child_min, &child_nat,
|
|
||||||
&child_min_baseline, &child_nat_baseline);
|
|
||||||
|
|
||||||
*minimum = MAX (*minimum, child_min);
|
|
||||||
*natural = MAX (*natural, child_nat);
|
|
||||||
if (child_min_baseline > -1)
|
|
||||||
*minimum_baseline = MAX (*minimum_baseline, child_min_baseline);
|
|
||||||
if (child_nat_baseline > -1)
|
|
||||||
*natural_baseline = MAX (*natural_baseline, child_nat_baseline);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_compute_child_allocation (BlurOverlay *overlay,
|
|
||||||
GtkWidget *widget,
|
|
||||||
BlurOverlayChild *child,
|
|
||||||
GtkAllocation *widget_allocation)
|
|
||||||
{
|
|
||||||
GtkAllocation allocation;
|
|
||||||
gboolean result;
|
|
||||||
|
|
||||||
g_signal_emit (overlay, signals[GET_CHILD_POSITION],
|
|
||||||
0, widget, &allocation, &result);
|
|
||||||
|
|
||||||
widget_allocation->x = allocation.x;
|
|
||||||
widget_allocation->y = allocation.y;
|
|
||||||
widget_allocation->width = allocation.width;
|
|
||||||
widget_allocation->height = allocation.height;
|
|
||||||
}
|
|
||||||
|
|
||||||
static GtkAlign
|
|
||||||
effective_align (GtkAlign align,
|
|
||||||
GtkTextDirection direction)
|
|
||||||
{
|
|
||||||
switch (align)
|
|
||||||
{
|
|
||||||
case GTK_ALIGN_START:
|
|
||||||
return direction == GTK_TEXT_DIR_RTL ? GTK_ALIGN_END : GTK_ALIGN_START;
|
|
||||||
case GTK_ALIGN_END:
|
|
||||||
return direction == GTK_TEXT_DIR_RTL ? GTK_ALIGN_START : GTK_ALIGN_END;
|
|
||||||
case GTK_ALIGN_FILL:
|
|
||||||
case GTK_ALIGN_CENTER:
|
|
||||||
case GTK_ALIGN_BASELINE:
|
|
||||||
default:
|
|
||||||
return align;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_child_update_style_classes (BlurOverlay *overlay,
|
|
||||||
GtkWidget *child,
|
|
||||||
GtkAllocation *child_allocation)
|
|
||||||
{
|
|
||||||
int width, height;
|
|
||||||
GtkAlign valign, halign;
|
|
||||||
gboolean is_left, is_right, is_top, is_bottom;
|
|
||||||
gboolean has_left, has_right, has_top, has_bottom;
|
|
||||||
GtkStyleContext *context;
|
|
||||||
|
|
||||||
context = gtk_widget_get_style_context (child);
|
|
||||||
has_left = gtk_style_context_has_class (context, GTK_STYLE_CLASS_LEFT);
|
|
||||||
has_right = gtk_style_context_has_class (context, GTK_STYLE_CLASS_RIGHT);
|
|
||||||
has_top = gtk_style_context_has_class (context, GTK_STYLE_CLASS_TOP);
|
|
||||||
has_bottom = gtk_style_context_has_class (context, GTK_STYLE_CLASS_BOTTOM);
|
|
||||||
|
|
||||||
is_left = is_right = is_top = is_bottom = FALSE;
|
|
||||||
|
|
||||||
width = gtk_widget_get_width (GTK_WIDGET (overlay));
|
|
||||||
height = gtk_widget_get_height (GTK_WIDGET (overlay));
|
|
||||||
|
|
||||||
halign = effective_align (gtk_widget_get_halign (child),
|
|
||||||
gtk_widget_get_direction (child));
|
|
||||||
|
|
||||||
if (halign == GTK_ALIGN_START)
|
|
||||||
is_left = (child_allocation->x == 0);
|
|
||||||
else if (halign == GTK_ALIGN_END)
|
|
||||||
is_right = (child_allocation->x + child_allocation->width == width);
|
|
||||||
|
|
||||||
valign = gtk_widget_get_valign (child);
|
|
||||||
|
|
||||||
if (valign == GTK_ALIGN_START)
|
|
||||||
is_top = (child_allocation->y == 0);
|
|
||||||
else if (valign == GTK_ALIGN_END)
|
|
||||||
is_bottom = (child_allocation->y + child_allocation->height == height);
|
|
||||||
|
|
||||||
if (has_left && !is_left)
|
|
||||||
gtk_style_context_remove_class (context, GTK_STYLE_CLASS_LEFT);
|
|
||||||
else if (!has_left && is_left)
|
|
||||||
gtk_style_context_add_class (context, GTK_STYLE_CLASS_LEFT);
|
|
||||||
|
|
||||||
if (has_right && !is_right)
|
|
||||||
gtk_style_context_remove_class (context, GTK_STYLE_CLASS_RIGHT);
|
|
||||||
else if (!has_right && is_right)
|
|
||||||
gtk_style_context_add_class (context, GTK_STYLE_CLASS_RIGHT);
|
|
||||||
|
|
||||||
if (has_top && !is_top)
|
|
||||||
gtk_style_context_remove_class (context, GTK_STYLE_CLASS_TOP);
|
|
||||||
else if (!has_top && is_top)
|
|
||||||
gtk_style_context_add_class (context, GTK_STYLE_CLASS_TOP);
|
|
||||||
|
|
||||||
if (has_bottom && !is_bottom)
|
|
||||||
gtk_style_context_remove_class (context, GTK_STYLE_CLASS_BOTTOM);
|
|
||||||
else if (!has_bottom && is_bottom)
|
|
||||||
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BOTTOM);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_child_allocate (BlurOverlay *overlay,
|
|
||||||
GtkWidget *widget,
|
|
||||||
BlurOverlayChild *child)
|
|
||||||
{
|
|
||||||
GtkAllocation child_allocation;
|
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (widget))
|
|
||||||
return;
|
|
||||||
|
|
||||||
blur_overlay_compute_child_allocation (overlay, widget, child, &child_allocation);
|
|
||||||
|
|
||||||
blur_overlay_child_update_style_classes (overlay, widget, &child_allocation);
|
|
||||||
gtk_widget_size_allocate (widget, &child_allocation, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_size_allocate (GtkWidget *widget,
|
|
||||||
int width,
|
|
||||||
int height,
|
|
||||||
int baseline)
|
|
||||||
{
|
|
||||||
BlurOverlay *overlay = BLUR_OVERLAY (widget);
|
|
||||||
GtkWidget *child;
|
|
||||||
GtkWidget *main_widget;
|
|
||||||
|
|
||||||
main_widget = gtk_bin_get_child (GTK_BIN (overlay));
|
|
||||||
if (main_widget && gtk_widget_get_visible (main_widget))
|
|
||||||
gtk_widget_size_allocate (main_widget,
|
|
||||||
&(GtkAllocation) {
|
|
||||||
0, 0,
|
|
||||||
width, height
|
|
||||||
}, -1);
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
if (child != main_widget)
|
|
||||||
{
|
|
||||||
BlurOverlayChild *child_data = blur_overlay_get_overlay_child (child);
|
|
||||||
blur_overlay_child_allocate (overlay, child, child_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static gboolean
|
|
||||||
blur_overlay_get_child_position (BlurOverlay *overlay,
|
|
||||||
GtkWidget *widget,
|
|
||||||
GtkAllocation *alloc)
|
|
||||||
{
|
|
||||||
GtkRequisition min, req;
|
|
||||||
GtkAlign halign;
|
|
||||||
GtkTextDirection direction;
|
|
||||||
int width, height;
|
|
||||||
|
|
||||||
gtk_widget_get_preferred_size (widget, &min, &req);
|
|
||||||
width = gtk_widget_get_width (GTK_WIDGET (overlay));
|
|
||||||
height = gtk_widget_get_height (GTK_WIDGET (overlay));
|
|
||||||
|
|
||||||
alloc->x = 0;
|
|
||||||
alloc->width = MAX (min.width, MIN (width, req.width));
|
|
||||||
|
|
||||||
direction = gtk_widget_get_direction (widget);
|
|
||||||
|
|
||||||
halign = gtk_widget_get_halign (widget);
|
|
||||||
switch (effective_align (halign, direction))
|
|
||||||
{
|
|
||||||
case GTK_ALIGN_START:
|
|
||||||
/* nothing to do */
|
|
||||||
break;
|
|
||||||
case GTK_ALIGN_FILL:
|
|
||||||
alloc->width = MAX (alloc->width, width);
|
|
||||||
break;
|
|
||||||
case GTK_ALIGN_CENTER:
|
|
||||||
alloc->x += width / 2 - alloc->width / 2;
|
|
||||||
break;
|
|
||||||
case GTK_ALIGN_END:
|
|
||||||
alloc->x += width - alloc->width;
|
|
||||||
break;
|
|
||||||
case GTK_ALIGN_BASELINE:
|
|
||||||
default:
|
|
||||||
g_assert_not_reached ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
alloc->y = 0;
|
|
||||||
alloc->height = MAX (min.height, MIN (height, req.height));
|
|
||||||
|
|
||||||
switch (gtk_widget_get_valign (widget))
|
|
||||||
{
|
|
||||||
case GTK_ALIGN_START:
|
|
||||||
/* nothing to do */
|
|
||||||
break;
|
|
||||||
case GTK_ALIGN_FILL:
|
|
||||||
alloc->height = MAX (alloc->height, height);
|
|
||||||
break;
|
|
||||||
case GTK_ALIGN_CENTER:
|
|
||||||
alloc->y += height / 2 - alloc->height / 2;
|
|
||||||
break;
|
|
||||||
case GTK_ALIGN_END:
|
|
||||||
alloc->y += height - alloc->height;
|
|
||||||
break;
|
|
||||||
case GTK_ALIGN_BASELINE:
|
|
||||||
default:
|
|
||||||
g_assert_not_reached ();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_add (GtkContainer *container,
|
|
||||||
GtkWidget *widget)
|
|
||||||
{
|
|
||||||
BlurOverlay *overlay = BLUR_OVERLAY (container);
|
|
||||||
gtk_widget_insert_after (widget, GTK_WIDGET (container), NULL);
|
|
||||||
overlay->main_widget = widget;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_remove (GtkContainer *container,
|
|
||||||
GtkWidget *widget)
|
|
||||||
{
|
|
||||||
BlurOverlay *overlay = BLUR_OVERLAY (container);
|
|
||||||
gtk_widget_unparent (widget);
|
|
||||||
if (overlay->main_widget == widget)
|
|
||||||
overlay->main_widget = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_forall (GtkContainer *overlay,
|
|
||||||
GtkCallback callback,
|
|
||||||
gpointer callback_data)
|
|
||||||
{
|
|
||||||
GtkWidget *child;
|
|
||||||
|
|
||||||
child = gtk_widget_get_first_child (GTK_WIDGET (overlay));
|
|
||||||
while (child != NULL)
|
|
||||||
{
|
|
||||||
GtkWidget *next = gtk_widget_get_next_sibling (child);
|
|
||||||
|
|
||||||
(* callback) (child, callback_data);
|
|
||||||
|
|
||||||
child = next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_snapshot (GtkWidget *widget,
|
|
||||||
GtkSnapshot *snapshot)
|
|
||||||
{
|
|
||||||
GtkWidget *main_widget;
|
|
||||||
GskRenderNode *main_widget_node = NULL;
|
|
||||||
GtkWidget *child;
|
|
||||||
GtkAllocation main_alloc;
|
|
||||||
cairo_region_t *clip = NULL;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
main_widget = BLUR_OVERLAY (widget)->main_widget;
|
|
||||||
gtk_widget_get_allocation (widget, &main_alloc);
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
BlurOverlayChild *child_info = blur_overlay_get_overlay_child (child);
|
|
||||||
double blur = 0;
|
|
||||||
if (child_info)
|
|
||||||
blur = child_info->blur;
|
|
||||||
|
|
||||||
if (blur > 0)
|
|
||||||
{
|
|
||||||
GtkAllocation alloc;
|
|
||||||
graphene_rect_t bounds;
|
|
||||||
|
|
||||||
if (main_widget_node == NULL)
|
|
||||||
{
|
|
||||||
GtkSnapshot *child_snapshot;
|
|
||||||
|
|
||||||
child_snapshot = gtk_snapshot_new ();
|
|
||||||
gtk_widget_snapshot_child (widget, main_widget, child_snapshot);
|
|
||||||
main_widget_node = gtk_snapshot_free_to_node (child_snapshot);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_widget_get_allocation (child, &alloc);
|
|
||||||
graphene_rect_init (&bounds, alloc.x, alloc.y, alloc.width, alloc.height);
|
|
||||||
gtk_snapshot_push_blur (snapshot, blur);
|
|
||||||
gtk_snapshot_push_clip (snapshot, &bounds);
|
|
||||||
gtk_snapshot_append_node (snapshot, main_widget_node);
|
|
||||||
gtk_snapshot_pop (snapshot);
|
|
||||||
gtk_snapshot_pop (snapshot);
|
|
||||||
|
|
||||||
if (clip == NULL)
|
|
||||||
{
|
|
||||||
cairo_rectangle_int_t rect;
|
|
||||||
rect.x = rect.y = 0;
|
|
||||||
rect.width = main_alloc.width;
|
|
||||||
rect.height = main_alloc.height;
|
|
||||||
clip = cairo_region_create_rectangle (&rect);
|
|
||||||
}
|
|
||||||
cairo_region_subtract_rectangle (clip, (cairo_rectangle_int_t *)&alloc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (clip == NULL)
|
|
||||||
{
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
gtk_widget_snapshot_child (widget, child, snapshot);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < cairo_region_num_rectangles (clip); i++)
|
|
||||||
{
|
|
||||||
cairo_rectangle_int_t rect;
|
|
||||||
graphene_rect_t bounds;
|
|
||||||
|
|
||||||
cairo_region_get_rectangle (clip, i, &rect);
|
|
||||||
graphene_rect_init (&bounds, rect.x, rect.y, rect.width, rect.height);
|
|
||||||
gtk_snapshot_push_clip (snapshot, &bounds);
|
|
||||||
gtk_snapshot_append_node (snapshot, main_widget_node);
|
|
||||||
gtk_snapshot_pop (snapshot);
|
|
||||||
}
|
|
||||||
|
|
||||||
cairo_region_destroy (clip);
|
|
||||||
|
|
||||||
for (child = gtk_widget_get_first_child (widget);
|
|
||||||
child != NULL;
|
|
||||||
child = gtk_widget_get_next_sibling (child))
|
|
||||||
{
|
|
||||||
if (child != main_widget)
|
|
||||||
gtk_widget_snapshot_child (widget, child, snapshot);
|
|
||||||
}
|
|
||||||
|
|
||||||
gsk_render_node_unref (main_widget_node);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_class_init (BlurOverlayClass *klass)
|
|
||||||
{
|
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
|
||||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
|
||||||
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
|
|
||||||
|
|
||||||
widget_class->measure = blur_overlay_measure;
|
|
||||||
widget_class->size_allocate = blur_overlay_size_allocate;
|
|
||||||
widget_class->snapshot = blur_overlay_snapshot;
|
|
||||||
|
|
||||||
container_class->add = blur_overlay_add;
|
|
||||||
container_class->remove = blur_overlay_remove;
|
|
||||||
container_class->forall = blur_overlay_forall;
|
|
||||||
|
|
||||||
klass->get_child_position = blur_overlay_get_child_position;
|
|
||||||
|
|
||||||
signals[GET_CHILD_POSITION] =
|
|
||||||
g_signal_new ("get-child-position",
|
|
||||||
G_TYPE_FROM_CLASS (object_class),
|
|
||||||
G_SIGNAL_RUN_LAST,
|
|
||||||
G_STRUCT_OFFSET (BlurOverlayClass, get_child_position),
|
|
||||||
g_signal_accumulator_true_handled, NULL,
|
|
||||||
NULL,
|
|
||||||
G_TYPE_BOOLEAN, 2,
|
|
||||||
GTK_TYPE_WIDGET,
|
|
||||||
GDK_TYPE_RECTANGLE | G_SIGNAL_TYPE_STATIC_SCOPE);
|
|
||||||
|
|
||||||
child_data_quark = g_quark_from_static_string ("gtk-overlay-child-data");
|
|
||||||
|
|
||||||
gtk_widget_class_set_css_name (widget_class, "overlay");
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
blur_overlay_init (BlurOverlay *overlay)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
GtkWidget *
|
|
||||||
blur_overlay_new (void)
|
|
||||||
{
|
|
||||||
return g_object_new (BLUR_TYPE_OVERLAY, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
blur_overlay_add_overlay (BlurOverlay *overlay,
|
|
||||||
GtkWidget *widget,
|
|
||||||
double blur)
|
|
||||||
{
|
|
||||||
BlurOverlayChild *child = g_new0 (BlurOverlayChild, 1);
|
|
||||||
|
|
||||||
gtk_widget_insert_before (widget, GTK_WIDGET (overlay), NULL);
|
|
||||||
|
|
||||||
child->blur = blur;
|
|
||||||
|
|
||||||
blur_overlay_set_overlay_child (widget, child);
|
|
||||||
}
|
|
@@ -1,65 +0,0 @@
|
|||||||
/*
|
|
||||||
* bluroverlay.h
|
|
||||||
* This file is part of gtk
|
|
||||||
*
|
|
||||||
* Copyright (C) 2011 - Ignacio Casal Quinteiro, Mike Krüger
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __BLUR_OVERLAY_H__
|
|
||||||
#define __BLUR_OVERLAY_H__
|
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define BLUR_TYPE_OVERLAY (blur_overlay_get_type ())
|
|
||||||
#define BLUR_OVERLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), BLUR_TYPE_OVERLAY, BlurOverlay))
|
|
||||||
#define BLUR_OVERLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), BLUR_TYPE_OVERLAY, BlurOverlayClass))
|
|
||||||
#define BLUR_IS_OVERLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), BLUR_TYPE_OVERLAY))
|
|
||||||
#define BLUR_IS_OVERLAY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), BLUR_TYPE_OVERLAY))
|
|
||||||
#define BLUR_OVERLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), BLUR_TYPE_OVERLAY, BlurOverlayClass))
|
|
||||||
|
|
||||||
typedef struct _BlurOverlay BlurOverlay;
|
|
||||||
typedef struct _BlurOverlayClass BlurOverlayClass;
|
|
||||||
|
|
||||||
struct _BlurOverlay
|
|
||||||
{
|
|
||||||
GtkBin parent_instance;
|
|
||||||
|
|
||||||
GtkWidget *main_widget;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _BlurOverlayClass
|
|
||||||
{
|
|
||||||
GtkBinClass parent_class;
|
|
||||||
|
|
||||||
gboolean (*get_child_position) (BlurOverlay *overlay,
|
|
||||||
GtkWidget *widget,
|
|
||||||
GtkAllocation *allocation);
|
|
||||||
};
|
|
||||||
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GType blur_overlay_get_type (void) G_GNUC_CONST;
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
GtkWidget *blur_overlay_new (void);
|
|
||||||
GDK_AVAILABLE_IN_ALL
|
|
||||||
void blur_overlay_add_overlay (BlurOverlay *overlay,
|
|
||||||
GtkWidget *widget,
|
|
||||||
double blur);
|
|
||||||
|
|
||||||
G_END_DECLS
|
|
||||||
|
|
||||||
#endif /* __BLUR_OVERLAY_H__ */
|
|
Before Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 10 KiB |
@@ -4,121 +4,65 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
#include "demo-common.h"
|
||||||
|
|
||||||
static void
|
static GtkBuilder *builder;
|
||||||
quit_activate (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
G_MODULE_EXPORT void
|
||||||
gpointer user_data)
|
quit_activate (GtkAction *action)
|
||||||
{
|
{
|
||||||
GtkWidget *window = user_data;
|
GtkWidget *window;
|
||||||
|
|
||||||
|
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
|
||||||
gtk_widget_destroy (window);
|
gtk_widget_destroy (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
G_MODULE_EXPORT void
|
||||||
about_activate (GSimpleAction *action,
|
about_activate (GtkAction *action)
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
{
|
||||||
GtkWidget *window = user_data;
|
|
||||||
GtkBuilder *builder;
|
|
||||||
GtkWidget *about_dlg;
|
GtkWidget *about_dlg;
|
||||||
|
|
||||||
builder = g_object_get_data (G_OBJECT (window), "builder");
|
|
||||||
about_dlg = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
|
about_dlg = GTK_WIDGET (gtk_builder_get_object (builder, "aboutdialog1"));
|
||||||
gtk_dialog_run (GTK_DIALOG (about_dlg));
|
gtk_dialog_run (GTK_DIALOG (about_dlg));
|
||||||
gtk_widget_hide (about_dlg);
|
gtk_widget_hide (about_dlg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
help_activate (GSimpleAction *action,
|
|
||||||
GVariant *parameter,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
g_print ("Help not available\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
static GActionEntry win_entries[] = {
|
|
||||||
{ "quit", quit_activate, NULL, NULL, NULL },
|
|
||||||
{ "about", about_activate, NULL, NULL, NULL },
|
|
||||||
{ "help", help_activate, NULL, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
GtkWidget *
|
GtkWidget *
|
||||||
do_builder (GtkWidget *do_widget)
|
do_builder (GtkWidget *do_widget)
|
||||||
{
|
{
|
||||||
static GtkWidget *window = NULL;
|
static GtkWidget *window = NULL;
|
||||||
GtkWidget *toolbar;
|
GError *err = NULL;
|
||||||
GActionGroup *actions;
|
gchar *filename;
|
||||||
GtkAccelGroup *accel_group;
|
|
||||||
GtkWidget *item;
|
|
||||||
|
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
GtkBuilder *builder;
|
builder = gtk_builder_new ();
|
||||||
|
filename = demo_find_file ("demo.ui", NULL);
|
||||||
builder = gtk_builder_new_from_resource ("/builder/demo.ui");
|
gtk_builder_add_from_file (builder, filename, &err);
|
||||||
|
g_free (filename);
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
g_error ("ERROR: %s\n", err->message);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
gtk_builder_connect_signals (builder, NULL);
|
gtk_builder_connect_signals (builder, NULL);
|
||||||
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
|
window = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
|
||||||
gtk_window_set_display (GTK_WINDOW (window),
|
gtk_window_set_screen (GTK_WINDOW (window),
|
||||||
gtk_widget_get_display (do_widget));
|
gtk_widget_get_screen (do_widget));
|
||||||
g_signal_connect (window, "destroy",
|
g_signal_connect (window, "destroy",
|
||||||
G_CALLBACK (gtk_widget_destroyed), &window);
|
G_CALLBACK (gtk_widget_destroyed), &window);
|
||||||
toolbar = GTK_WIDGET (gtk_builder_get_object (builder, "toolbar1"));
|
|
||||||
gtk_style_context_add_class (gtk_widget_get_style_context (toolbar),
|
|
||||||
"primary-toolbar");
|
|
||||||
actions = (GActionGroup*)g_simple_action_group_new ();
|
|
||||||
g_action_map_add_action_entries (G_ACTION_MAP (actions),
|
|
||||||
win_entries, G_N_ELEMENTS (win_entries),
|
|
||||||
window);
|
|
||||||
gtk_widget_insert_action_group (window, "win", actions);
|
|
||||||
accel_group = gtk_accel_group_new ();
|
|
||||||
gtk_window_add_accel_group (GTK_WINDOW (window), accel_group);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "new_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_n, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "open_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_o, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "save_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_s, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "quit_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "copy_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_c, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "cut_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_x, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "paste_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_v, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "help_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_F1, 0, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
item = (GtkWidget*)gtk_builder_get_object (builder, "about_item");
|
|
||||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
|
||||||
GDK_KEY_F7, 0, GTK_ACCEL_VISIBLE);
|
|
||||||
|
|
||||||
g_object_set_data_full (G_OBJECT(window), "builder", builder, g_object_unref);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!gtk_widget_get_visible (window))
|
if (!GTK_WIDGET_VISIBLE (window))
|
||||||
gtk_widget_show (window);
|
{
|
||||||
|
gtk_widget_show_all (window);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
gtk_widget_destroy (window);
|
gtk_widget_destroy (window);
|
||||||
|
window = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
127
demos/gtk-demo/button_box.c
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
/* Button Boxes
|
||||||
|
*
|
||||||
|
* The Button Box widgets are used to arrange buttons with padding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
static GtkWidget *
|
||||||
|
create_bbox (gint horizontal,
|
||||||
|
char *title,
|
||||||
|
gint spacing,
|
||||||
|
gint layout)
|
||||||
|
{
|
||||||
|
GtkWidget *frame;
|
||||||
|
GtkWidget *bbox;
|
||||||
|
GtkWidget *button;
|
||||||
|
|
||||||
|
frame = gtk_frame_new (title);
|
||||||
|
|
||||||
|
if (horizontal)
|
||||||
|
bbox = gtk_hbutton_box_new ();
|
||||||
|
else
|
||||||
|
bbox = gtk_vbutton_box_new ();
|
||||||
|
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (bbox), 5);
|
||||||
|
gtk_container_add (GTK_CONTAINER (frame), bbox);
|
||||||
|
|
||||||
|
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), layout);
|
||||||
|
gtk_box_set_spacing (GTK_BOX (bbox), spacing);
|
||||||
|
|
||||||
|
button = gtk_button_new_from_stock (GTK_STOCK_OK);
|
||||||
|
gtk_container_add (GTK_CONTAINER (bbox), button);
|
||||||
|
|
||||||
|
button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
|
||||||
|
gtk_container_add (GTK_CONTAINER (bbox), button);
|
||||||
|
|
||||||
|
button = gtk_button_new_from_stock (GTK_STOCK_HELP);
|
||||||
|
gtk_container_add (GTK_CONTAINER (bbox), button);
|
||||||
|
|
||||||
|
return frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
GtkWidget *
|
||||||
|
do_button_box (GtkWidget *do_widget)
|
||||||
|
{
|
||||||
|
static GtkWidget *window = NULL;
|
||||||
|
GtkWidget *main_vbox;
|
||||||
|
GtkWidget *vbox;
|
||||||
|
GtkWidget *hbox;
|
||||||
|
GtkWidget *frame_horz;
|
||||||
|
GtkWidget *frame_vert;
|
||||||
|
|
||||||
|
if (!window)
|
||||||
|
{
|
||||||
|
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
|
gtk_window_set_screen (GTK_WINDOW (window),
|
||||||
|
gtk_widget_get_screen (do_widget));
|
||||||
|
gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
|
||||||
|
|
||||||
|
g_signal_connect (window, "destroy",
|
||||||
|
G_CALLBACK (gtk_widget_destroyed),
|
||||||
|
&window);
|
||||||
|
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
|
||||||
|
|
||||||
|
main_vbox = gtk_vbox_new (FALSE, 0);
|
||||||
|
gtk_container_add (GTK_CONTAINER (window), main_vbox);
|
||||||
|
|
||||||
|
frame_horz = gtk_frame_new ("Horizontal Button Boxes");
|
||||||
|
gtk_box_pack_start (GTK_BOX (main_vbox), frame_horz, TRUE, TRUE, 10);
|
||||||
|
|
||||||
|
vbox = gtk_vbox_new (FALSE, 0);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (vbox), 10);
|
||||||
|
gtk_container_add (GTK_CONTAINER (frame_horz), vbox);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (vbox),
|
||||||
|
create_bbox (TRUE, "Spread", 40, GTK_BUTTONBOX_SPREAD),
|
||||||
|
TRUE, TRUE, 0);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (vbox),
|
||||||
|
create_bbox (TRUE, "Edge", 40, GTK_BUTTONBOX_EDGE),
|
||||||
|
TRUE, TRUE, 5);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (vbox),
|
||||||
|
create_bbox (TRUE, "Start", 40, GTK_BUTTONBOX_START),
|
||||||
|
TRUE, TRUE, 5);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (vbox),
|
||||||
|
create_bbox (TRUE, "End", 40, GTK_BUTTONBOX_END),
|
||||||
|
TRUE, TRUE, 5);
|
||||||
|
|
||||||
|
frame_vert = gtk_frame_new ("Vertical Button Boxes");
|
||||||
|
gtk_box_pack_start (GTK_BOX (main_vbox), frame_vert, TRUE, TRUE, 10);
|
||||||
|
|
||||||
|
hbox = gtk_hbox_new (FALSE, 0);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
|
||||||
|
gtk_container_add (GTK_CONTAINER (frame_vert), hbox);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (hbox),
|
||||||
|
create_bbox (FALSE, "Spread", 30, GTK_BUTTONBOX_SPREAD),
|
||||||
|
TRUE, TRUE, 0);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (hbox),
|
||||||
|
create_bbox (FALSE, "Edge", 30, GTK_BUTTONBOX_EDGE),
|
||||||
|
TRUE, TRUE, 5);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (hbox),
|
||||||
|
create_bbox (FALSE, "Start", 30, GTK_BUTTONBOX_START),
|
||||||
|
TRUE, TRUE, 5);
|
||||||
|
|
||||||
|
gtk_box_pack_start (GTK_BOX (hbox),
|
||||||
|
create_bbox (FALSE, "End", 30, GTK_BUTTONBOX_END),
|
||||||
|
TRUE, TRUE, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!GTK_WIDGET_VISIBLE (window))
|
||||||
|
{
|
||||||
|
gtk_widget_show_all (window);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gtk_widget_destroy (window);
|
||||||
|
window = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return window;
|
||||||
|
}
|
Before Width: | Height: | Size: 1.1 KiB |