diff options
35 files changed, 427 insertions, 185 deletions
diff --git a/fontconfig/m4/ax_pthread.m4 b/fontconfig/m4/ax_pthread.m4 index d90de34d1..e77541cea 100644 --- a/fontconfig/m4/ax_pthread.m4 +++ b/fontconfig/m4/ax_pthread.m4 @@ -82,7 +82,7 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 18 +#serial 21 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ @@ -103,8 +103,8 @@ if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) - AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes) - AC_MSG_RESULT($ax_pthread_ok) + AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" @@ -162,8 +162,27 @@ case ${host_os} in darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; + netbsd*) + # use libc stubs, don't link against libpthread, to allow + # dynamic loading + ax_pthread_flags="" + ;; esac +# Clang doesn't consider unrecognized options an error unless we specify +# -Werror. We throw in some extra Clang-specific options to ensure that +# this doesn't happen for GCC, which also accepts -Werror. + +AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags]) +save_CFLAGS="$CFLAGS" +ax_pthread_extra_flags="-Werror" +CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument" +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])], + [AC_MSG_RESULT([yes])], + [ax_pthread_extra_flags= + AC_MSG_RESULT([no])]) +CFLAGS="$save_CFLAGS" + if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do @@ -178,7 +197,7 @@ for flag in $ax_pthread_flags; do ;; pthread-config) - AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" @@ -193,7 +212,7 @@ for flag in $ax_pthread_flags; do save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we @@ -219,7 +238,7 @@ for flag in $ax_pthread_flags; do LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" - AC_MSG_RESULT($ax_pthread_ok) + AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = xyes; then break; fi @@ -245,9 +264,9 @@ if test "x$ax_pthread_ok" = xyes; then [attr_name=$attr; break], []) done - AC_MSG_RESULT($attr_name) + AC_MSG_RESULT([$attr_name]) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then - AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, + AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name], [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi @@ -261,45 +280,54 @@ if test "x$ax_pthread_ok" = xyes; then if test "$GCC" = "yes"; then flag="-D_REENTRANT" else + # TODO: What about Clang on Solaris? flag="-mt -D_REENTRANT" fi ;; esac - AC_MSG_RESULT(${flag}) + AC_MSG_RESULT([$flag]) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], - ax_cv_PTHREAD_PRIO_INHERIT, [ - AC_LINK_IFELSE([ - AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])], + [ax_cv_PTHREAD_PRIO_INHERIT], [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], + [[int i = PTHREAD_PRIO_INHERIT;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"], - AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.])) + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" - # More AIX lossage: must compile with xlc_r or cc_r - if test x"$GCC" != xyes; then - AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) - else - PTHREAD_CC=$CC + # More AIX lossage: compile with *_r variant + if test "x$GCC" != xyes; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], + [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) + ;; + esac fi -else - PTHREAD_CC="$CC" fi -AC_SUBST(PTHREAD_LIBS) -AC_SUBST(PTHREAD_CFLAGS) -AC_SUBST(PTHREAD_CC) +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then - ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no diff --git a/fontconfig/src/fccache.c b/fontconfig/src/fccache.c index 3568595ed..c7f243749 100644 --- a/fontconfig/src/fccache.c +++ b/fontconfig/src/fccache.c @@ -28,6 +28,7 @@ #include <dirent.h> #include <string.h> #include <sys/types.h> +#include <sys/stat.h> #include <assert.h> #if defined(HAVE_MMAP) || defined(__CYGWIN__) # include <unistd.h> @@ -572,7 +573,7 @@ FcDirCacheMapFd (int fd, struct stat *fd_stat, struct stat *dir_stat) { #if defined(HAVE_MMAP) || defined(__CYGWIN__) cache = mmap (0, fd_stat->st_size, PROT_READ, MAP_SHARED, fd, 0); -#ifdef HAVE_POSIX_FADVISE +#if defined(HAVE_POSIX_FADVISE) && defined(POSIX_FADV_WILLNEED) posix_fadvise (fd, 0, fd_stat->st_size, POSIX_FADV_WILLNEED); #endif if (cache == MAP_FAILED) diff --git a/mesalib/docs/GL3.txt b/mesalib/docs/GL3.txt index c269f19dd..a56e7fead 100644 --- a/mesalib/docs/GL3.txt +++ b/mesalib/docs/GL3.txt @@ -71,7 +71,7 @@ Base vertex offset(GL_ARB_draw_elements_base_vertex) DONE (i965, r300, r600, sw Frag shader coord (GL_ARB_fragment_coord_conventions) DONE (i965, r300, r600, swrast) Provoking vertex (GL_ARB_provoking_vertex) DONE (i965, r300, r600, swrast) Seamless cubemaps (GL_ARB_seamless_cube_map) DONE (i965, r600) -Multisample textures (GL_ARB_texture_multisample) DONE (i965) +Multisample textures (GL_ARB_texture_multisample) DONE (i965, r600) Frag depth clamp (GL_ARB_depth_clamp) DONE (i965, r600, swrast) Fence objects (GL_ARB_sync) DONE (i965, r300, r600, swrast) GLX_ARB_create_context_profile DONE diff --git a/mesalib/docs/index.html b/mesalib/docs/index.html index 3b9c4361c..990702281 100644 --- a/mesalib/docs/index.html +++ b/mesalib/docs/index.html @@ -16,6 +16,12 @@ <h1>News</h1> +<h2>October 18, 2013</h2> +<p> +<a href="relnotes/9.2.2.html">Mesa 9.2.2</a> is released. +This is a bug fix release. +</p> + <h2>October 4, 2013</h2> <p> <a href="relnotes/9.2.1.html">Mesa 9.2.1</a> and diff --git a/mesalib/docs/relnotes.html b/mesalib/docs/relnotes.html index 82072ddfa..35cef80f2 100644 --- a/mesalib/docs/relnotes.html +++ b/mesalib/docs/relnotes.html @@ -22,6 +22,7 @@ The release notes summarize what's new or changed in each Mesa release. <ul> <li><a href="relnotes/10.0.html">10.0 release notes</a> +<li><a href="relnotes/9.2.2.html">9.2.2 release notes</a> <li><a href="relnotes/9.2.1.html">9.2.1 release notes</a> <li><a href="relnotes/9.2.html">9.2 release notes</a> <li><a href="relnotes/9.1.7.html">9.1.7 release notes</a> diff --git a/mesalib/docs/relnotes/10.0.html b/mesalib/docs/relnotes/10.0.html index 8f97921b0..0b25f49b5 100644 --- a/mesalib/docs/relnotes/10.0.html +++ b/mesalib/docs/relnotes/10.0.html @@ -22,11 +22,11 @@ People who are concerned with stability and reliability should stick with a previous release or wait for Mesa 10.0.1. </p> <p> -Mesa 10.0 implements the OpenGL 3.2 API, but the version reported by +Mesa 10.0 implements the OpenGL 3.3 API, but the version reported by glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) / glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used. -Some drivers don't support all the features required in OpenGL 3.2. OpenGL -3.2 is <strong>only</strong> available if requested at context creation +Some drivers don't support all the features required in OpenGL 3.3. OpenGL +3.3 is <strong>only</strong> available if requested at context creation because compatibility contexts are not supported. </p> diff --git a/mesalib/docs/relnotes/9.2.2.html b/mesalib/docs/relnotes/9.2.2.html new file mode 100644 index 000000000..c2666a46c --- /dev/null +++ b/mesalib/docs/relnotes/9.2.2.html @@ -0,0 +1,97 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html lang="en"> +<head> + <meta http-equiv="content-type" content="text/html; charset=utf-8"> + <title>Mesa Release Notes</title> + <link rel="stylesheet" type="text/css" href="../mesa.css"> +</head> +<body> + +<div class="header"> + <h1>The Mesa 3D Graphics Library</h1> +</div> + +<iframe src="../contents.html"></iframe> +<div class="content"> + +<h1>Mesa 9.2.2 Release Notes / (October 18, 2013)</h1> + +<p> +Mesa 9.2.2 is a bug fix release which fixes bugs found since the 9.2.1 release. +</p> +<p> +Mesa 9.2 implements the OpenGL 3.1 API, but the version reported by +glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) / +glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used. +Some drivers don't support all the features required in OpenGL 3.1. OpenGL +3.1 is <strong>only</strong> available if requested at context creation +because GL_ARB_compatibility is not supported. +</p> + + +<h2>MD5 checksums</h2> +<pre> +</pre> + + +<h2>New features</h2> +<p>None</p> + +<h2>Bug fixes</h2> + +<p>This list is likely incomplete.</p> + +<ul> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=69449">Bug 69449</a> - Valgrind error in program_resource_visitor::recursion</li> + +<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=70411">Bug 70411</a> - glInvalidateFramebuffer fails with GL_INVALID_ENUM</li> + +</ul> + +<h2>Changes</h2> + +<p>The full set of changes can be viewed by using the following GIT command:</p> + +<pre> + git log mesa-9.2.1..mesa-9.2.2 +</pre> + +<p>Brian Paul (3):</p> +<ul> + <li>docs: add missing <pre> tag</li> + <li>svga: fix incorrect memcpy src in svga_buffer_upload_piecewise()</li> + <li>mesa: consolidate cube width=height error checking</li> +</ul> + +<p>Carl Worth (3):</p> +<ul> + <li>docs: Add md5sums for 9.2.1 release</li> + <li>Bump version to 9.2.2</li> +</ul> + +<p>Constantin Baranov (1):</p> +<ul> + <li>mesa: Add missing switch break in invalidate_framebuffer_storage()</li> +</ul> + +<p>Eric Anholt (3):</p> +<ul> + <li>i965: Don't forget the cube map padding on gen5+.</li> + <li>mesa: Fix compiler warnings when ALIGN's alignment is "1 << value".</li> + <li>i965: Fix 3D texture layout by more literally copying from the spec.</li> +</ul> + +<p>Francisco Jerez (1):</p> +<ul> + <li>glsl: Fix usage of the wrong union member in program_resource_visitor::recursion.</li> +</ul> + +<p>Tom Stellard (1):</p> +<ul> + <li>radeonsi: Use 'SI' as the LLVM processor for CIK on LLVM <= 3.3</li> +</ul> + +</div> +</body> +</html> diff --git a/mesalib/include/GL/glx.h b/mesalib/include/GL/glx.h index 87c31fdcc..fa5a8eda9 100644 --- a/mesalib/include/GL/glx.h +++ b/mesalib/include/GL/glx.h @@ -168,7 +168,6 @@ typedef XID GLXDrawable; /* GLX 1.3 and later */ typedef struct __GLXFBConfigRec *GLXFBConfig; typedef XID GLXFBConfigID; -typedef XID GLXContextID; typedef XID GLXWindow; typedef XID GLXPbuffer; diff --git a/mesalib/scons/gallium.py b/mesalib/scons/gallium.py index 5b20f3ff6..be3c3e7d9 100644 --- a/mesalib/scons/gallium.py +++ b/mesalib/scons/gallium.py @@ -507,7 +507,7 @@ def generate(env): if env['platform'] in ('linux',): libs += ['rt'] if env['platform'] in ('haiku'): - libs += ['root', 'be', 'network'] + libs += ['root', 'be', 'network', 'translation'] env.Append(LIBS = libs) # OpenMP diff --git a/mesalib/src/glsl/builtin_variables.cpp b/mesalib/src/glsl/builtin_variables.cpp index f06d2ab05..64f34061a 100644 --- a/mesalib/src/glsl/builtin_variables.cpp +++ b/mesalib/src/glsl/builtin_variables.cpp @@ -311,7 +311,8 @@ private: per_vertex_accumulator::per_vertex_accumulator() - : num_fields(0) + : fields(), + num_fields(0) { } diff --git a/mesalib/src/mesa/main/extensions.c b/mesalib/src/mesa/main/extensions.c index 2507fdf34..e8e0a20d8 100644 --- a/mesalib/src/mesa/main/extensions.c +++ b/mesalib/src/mesa/main/extensions.c @@ -144,6 +144,7 @@ static const struct extension extension_table[] = { { "GL_ARB_texture_float", o(ARB_texture_float), GL, 2004 }, { "GL_ARB_texture_gather", o(ARB_texture_gather), GL, 2009 }, { "GL_ARB_texture_mirrored_repeat", o(dummy_true), GLL, 2001 }, + { "GL_ARB_texture_mirror_clamp_to_edge", o(ARB_texture_mirror_clamp_to_edge), GL, 2013 }, { "GL_ARB_texture_multisample", o(ARB_texture_multisample), GL, 2009 }, { "GL_ARB_texture_non_power_of_two", o(ARB_texture_non_power_of_two), GL, 2003 }, { "GL_ARB_texture_query_levels", o(ARB_texture_query_levels), GL, 2012 }, @@ -407,6 +408,7 @@ _mesa_enable_sw_extensions(struct gl_context *ctx) #ifdef TEXTURE_FLOAT_ENABLED ctx->Extensions.ARB_texture_float = GL_TRUE; #endif + ctx->Extensions.ARB_texture_mirror_clamp_to_edge = GL_TRUE; ctx->Extensions.ARB_texture_non_power_of_two = GL_TRUE; ctx->Extensions.ARB_texture_rg = GL_TRUE; ctx->Extensions.ARB_texture_compression_rgtc = GL_TRUE; diff --git a/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index 15893ecac..6374e8c0d 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/src/mesa/main/mtypes.h @@ -3218,6 +3218,7 @@ struct gl_extensions GLboolean ARB_texture_env_dot3; GLboolean ARB_texture_float; GLboolean ARB_texture_gather; + GLboolean ARB_texture_mirror_clamp_to_edge; GLboolean ARB_texture_multisample; GLboolean ARB_texture_non_power_of_two; GLboolean ARB_texture_query_levels; diff --git a/mesalib/src/mesa/main/samplerobj.c b/mesalib/src/mesa/main/samplerobj.c index c3b612c76..7285ef5ed 100644 --- a/mesalib/src/mesa/main/samplerobj.c +++ b/mesalib/src/mesa/main/samplerobj.c @@ -305,7 +305,7 @@ validate_texture_wrap_mode(struct gl_context *ctx, GLenum wrap) case GL_MIRROR_CLAMP_EXT: return e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp; case GL_MIRROR_CLAMP_TO_EDGE_EXT: - return e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp; + return e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp || e->ARB_texture_mirror_clamp_to_edge; case GL_MIRROR_CLAMP_TO_BORDER_EXT: return e->EXT_texture_mirror_clamp; default: diff --git a/mesalib/src/mesa/main/texparam.c b/mesalib/src/mesa/main/texparam.c index 31723c377..c9d928f63 100644 --- a/mesalib/src/mesa/main/texparam.c +++ b/mesalib/src/mesa/main/texparam.c @@ -84,16 +84,22 @@ validate_texture_wrap_mode(struct gl_context * ctx, GLenum target, GLenum wrap) break; case GL_MIRROR_CLAMP_EXT: + supported = is_desktop_gl + && (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp) + && (target != GL_TEXTURE_RECTANGLE_NV) + && (target != GL_TEXTURE_EXTERNAL_OES); + break; + case GL_MIRROR_CLAMP_TO_EDGE_EXT: supported = is_desktop_gl - && (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp) - && (target != GL_TEXTURE_RECTANGLE_NV) + && (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp || e->ARB_texture_mirror_clamp_to_edge) + && (target != GL_TEXTURE_RECTANGLE_NV) && (target != GL_TEXTURE_EXTERNAL_OES); break; case GL_MIRROR_CLAMP_TO_BORDER_EXT: supported = is_desktop_gl && e->EXT_texture_mirror_clamp - && (target != GL_TEXTURE_RECTANGLE_NV) + && (target != GL_TEXTURE_RECTANGLE_NV) && (target != GL_TEXTURE_EXTERNAL_OES); break; diff --git a/mesalib/src/mesa/state_tracker/st_extensions.c b/mesalib/src/mesa/state_tracker/st_extensions.c index 97dd73210..231bb395a 100644 --- a/mesalib/src/mesa/state_tracker/st_extensions.c +++ b/mesalib/src/mesa/state_tracker/st_extensions.c @@ -384,6 +384,7 @@ void st_init_extensions(struct st_context *st) { o(ARB_shader_stencil_export), PIPE_CAP_SHADER_STENCIL_EXPORT }, { o(ARB_shader_texture_lod), PIPE_CAP_SM3 }, { o(ARB_shadow), PIPE_CAP_TEXTURE_SHADOW_MAP }, + { o(ARB_texture_mirror_clamp_to_edge), PIPE_CAP_TEXTURE_MIRROR_CLAMP }, { o(ARB_texture_non_power_of_two), PIPE_CAP_NPOT_TEXTURES }, { o(ARB_timer_query), PIPE_CAP_QUERY_TIMESTAMP }, { o(ARB_transform_feedback2), PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME }, diff --git a/xorg-server/Xext/saver.c b/xorg-server/Xext/saver.c index cfe8daec5..e9633f4b3 100644 --- a/xorg-server/Xext/saver.c +++ b/xorg-server/Xext/saver.c @@ -398,9 +398,7 @@ ScreenSaverFreeSuspend(pointer value, XID id) DeviceIntPtr dev; UpdateCurrentTimeIf(); nt_list_for_each_entry(dev, inputInfo.devices, next) - lastDeviceEventTime[dev->id] = currentTime; - lastDeviceEventTime[XIAllDevices] = currentTime; - lastDeviceEventTime[XIAllMasterDevices] = currentTime; + NoticeTime(dev, currentTime); SetScreenSaverTimer(); } } @@ -684,7 +682,7 @@ ProcScreenSaverQueryInfo(ClientPtr client) pPriv = GetScreenPrivate(pDraw->pScreen); UpdateCurrentTime(); - lastInput = GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds; + lastInput = GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds; rep.type = X_Reply; diff --git a/xorg-server/Xext/sync.c b/xorg-server/Xext/sync.c index 43ecd42cf..80190f0f0 100644 --- a/xorg-server/Xext/sync.c +++ b/xorg-server/Xext/sync.c @@ -697,6 +697,14 @@ SyncAwaitTriggerFired(SyncTrigger * pTrigger) FreeResource(pAwaitUnion->header.delete_id, RT_NONE); } +static CARD64 +SyncUpdateCounter(SyncCounter *pCounter, CARD64 newval) +{ + CARD64 oldval = pCounter->value; + pCounter->value = newval; + return oldval; +} + /* This function should always be used to change a counter's value so that * any triggers depending on the counter will be checked. */ @@ -706,8 +714,7 @@ SyncChangeCounter(SyncCounter * pCounter, CARD64 newval) SyncTriggerList *ptl, *pnext; CARD64 oldval; - oldval = pCounter->value; - pCounter->value = newval; + oldval = SyncUpdateCounter(pCounter, newval); /* run through triggers to see if any become true */ for (ptl = pCounter->sync.pTriglist; ptl; ptl = pnext) { @@ -1017,6 +1024,11 @@ SyncComputeBracketValues(SyncCounter * pCounter) psci->bracket_greater = pTrigger->test_value; pnewgtval = &psci->bracket_greater; } + else if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) && + XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) { + psci->bracket_less = pTrigger->test_value; + pnewltval = &psci->bracket_less; + } } else if (pTrigger->test_type == XSyncNegativeComparison && ct != XSyncCounterNeverDecreases) { @@ -1026,52 +1038,53 @@ SyncComputeBracketValues(SyncCounter * pCounter) psci->bracket_less = pTrigger->test_value; pnewltval = &psci->bracket_less; } + else if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) && + XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) { + psci->bracket_greater = pTrigger->test_value; + pnewgtval = &psci->bracket_greater; + } } else if (pTrigger->test_type == XSyncNegativeTransition && ct != XSyncCounterNeverIncreases) { - if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) && - XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) - { - psci->bracket_less = pTrigger->test_value; - pnewltval = &psci->bracket_less; + if (XSyncValueGreaterOrEqual(pCounter->value, pTrigger->test_value) && + XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) { + /* + * If the value is exactly equal to our threshold, we want one + * more event in the negative direction to ensure we pick up + * when the value is less than this threshold. + */ + psci->bracket_less = pTrigger->test_value; + pnewltval = &psci->bracket_less; } - else if (XSyncValueEqual(pCounter->value, pTrigger->test_value) && - XSyncValueGreaterThan(pTrigger->test_value, - psci->bracket_less)) { - /* - * The value is exactly equal to our threshold. We want one - * more event in the negative direction to ensure we pick up - * when the value is less than this threshold. - */ - psci->bracket_less = pTrigger->test_value; - pnewltval = &psci->bracket_less; + else if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) && + XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) { + psci->bracket_greater = pTrigger->test_value; + pnewgtval = &psci->bracket_greater; } } else if (pTrigger->test_type == XSyncPositiveTransition && ct != XSyncCounterNeverDecreases) { - if (XSyncValueLessThan(pCounter->value, pTrigger->test_value) && - XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) - { - psci->bracket_greater = pTrigger->test_value; - pnewgtval = &psci->bracket_greater; + if (XSyncValueLessOrEqual(pCounter->value, pTrigger->test_value) && + XSyncValueLessThan(pTrigger->test_value, psci->bracket_greater)) { + /* + * If the value is exactly equal to our threshold, we + * want one more event in the positive direction to + * ensure we pick up when the value *exceeds* this + * threshold. + */ + psci->bracket_greater = pTrigger->test_value; + pnewgtval = &psci->bracket_greater; } - else if (XSyncValueEqual(pCounter->value, pTrigger->test_value) && - XSyncValueLessThan(pTrigger->test_value, - psci->bracket_greater)) { - /* - * The value is exactly equal to our threshold. We want one - * more event in the positive direction to ensure we pick up - * when the value *exceeds* this threshold. - */ - psci->bracket_greater = pTrigger->test_value; - pnewgtval = &psci->bracket_greater; + else if (XSyncValueGreaterThan(pCounter->value, pTrigger->test_value) && + XSyncValueGreaterThan(pTrigger->test_value, psci->bracket_less)) { + psci->bracket_less = pTrigger->test_value; + pnewltval = &psci->bracket_less; } } } /* end for each trigger */ - if (pnewgtval || pnewltval) { - (*psci->BracketValues) ((pointer) pCounter, pnewltval, pnewgtval); - } + (*psci->BracketValues) ((pointer) pCounter, pnewltval, pnewgtval); + } /* @@ -2618,7 +2631,7 @@ IdleTimeQueryValue(pointer pCounter, CARD64 * pValue_return) } else deviceid = XIAllDevices; - idle = GetTimeInMillis() - lastDeviceEventTime[deviceid].milliseconds; + idle = GetTimeInMillis() - LastEventTime(deviceid).milliseconds; XSyncIntsToValue(pValue_return, idle, 0); } @@ -2637,7 +2650,7 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa return; old_idle = counter->value; - IdleTimeQueryValue(NULL, &idle); + IdleTimeQueryValue(counter, &idle); counter->value = idle; /* push, so CheckTrigger works */ if (less && XSyncValueLessOrEqual(idle, *less)) { @@ -2699,6 +2712,17 @@ IdleTimeBlockHandler(pointer pCounter, struct timeval **wt, pointer LastSelectMa } static void +IdleTimeCheckBrackets(SyncCounter *counter, XSyncValue idle, XSyncValue *less, XSyncValue *greater) +{ + if ((greater && XSyncValueGreaterOrEqual(idle, *greater)) || + (less && XSyncValueLessOrEqual(idle, *less))) { + SyncChangeCounter(counter, idle); + } + else + SyncUpdateCounter(counter, idle); +} + +static void IdleTimeWakeupHandler(pointer pCounter, int rc, pointer LastSelectMask) { SyncCounter *counter = pCounter; @@ -2712,10 +2736,24 @@ IdleTimeWakeupHandler(pointer pCounter, int rc, pointer LastSelectMask) IdleTimeQueryValue(pCounter, &idle); - if ((greater && XSyncValueGreaterOrEqual(idle, *greater)) || - (less && XSyncValueLessOrEqual(idle, *less))) { - SyncChangeCounter(counter, idle); + /* + There is no guarantee for the WakeupHandler to be called within a specific + timeframe. Idletime may go to 0, but by the time we get here, it may be + non-zero and alarms for a pos. transition on 0 won't get triggered. + https://bugs.freedesktop.org/show_bug.cgi?id=70476 + */ + if (LastEventTimeWasReset(priv->deviceid)) { + LastEventTimeToggleResetFlag(priv->deviceid, FALSE); + if (!XSyncValueIsZero(idle)) { + XSyncValue zero; + XSyncIntsToValue(&zero, 0, 0); + IdleTimeCheckBrackets(counter, zero, less, greater); + less = priv->value_less; + greater = priv->value_greater; + } } + + IdleTimeCheckBrackets(counter, idle, less, greater); } static void @@ -2733,6 +2771,9 @@ IdleTimeBracketValues(pointer pCounter, CARD64 * pbracket_less, IdleTimeWakeupHandler, pCounter); } else if (!registered && (pbracket_less || pbracket_greater)) { + /* Reset flag must be zero so we don't force a idle timer reset on + the first wakeup */ + LastEventTimeToggleResetAll(FALSE); RegisterBlockAndWakeupHandlers(IdleTimeBlockHandler, IdleTimeWakeupHandler, pCounter); } diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac index 67ef3c24a..7b4e70fe7 100644 --- a/xorg-server/configure.ac +++ b/xorg-server/configure.ac @@ -26,9 +26,9 @@ dnl dnl Process this file with autoconf to create configure. AC_PREREQ(2.60) -AC_INIT([xorg-server], 1.14.99.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) -RELEASE_DATE="2013-10-04" -RELEASE_NAME="Chicory Coffee" +AC_INIT([xorg-server], 1.14.99.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server) +RELEASE_DATE="2013-10-18" +RELEASE_NAME="Bundaberg" AC_CONFIG_SRCDIR([Makefile.am]) AM_INIT_AUTOMAKE([foreign dist-bzip2]) diff --git a/xorg-server/dix/dixfonts.c b/xorg-server/dix/dixfonts.c index 22c236553..dd7700860 100644 --- a/xorg-server/dix/dixfonts.c +++ b/xorg-server/dix/dixfonts.c @@ -1459,6 +1459,7 @@ doImageText(ClientPtr client, ITclosurePtr c) GC *pGC; unsigned char *data; ITclosurePtr new_closure; + ITclosurePtr old_closure; /* We're putting the client to sleep. We need to save some state. Similar problem to that handled @@ -1470,12 +1471,14 @@ doImageText(ClientPtr client, ITclosurePtr c) err = BadAlloc; goto bail; } + old_closure = c; *new_closure = *c; c = new_closure; data = malloc(c->nChars * itemSize); if (!data) { free(c); + c = old_closure; err = BadAlloc; goto bail; } @@ -1486,6 +1489,7 @@ doImageText(ClientPtr client, ITclosurePtr c) if (!pGC) { free(c->data); free(c); + c = old_closure; err = BadAlloc; goto bail; } @@ -1498,6 +1502,7 @@ doImageText(ClientPtr client, ITclosurePtr c) FreeScratchGC(pGC); free(c->data); free(c); + c = old_closure; err = BadAlloc; goto bail; } diff --git a/xorg-server/dix/events.c b/xorg-server/dix/events.c index 191a49377..f61c7c7eb 100644 --- a/xorg-server/dix/events.c +++ b/xorg-server/dix/events.c @@ -262,6 +262,11 @@ InputInfo inputInfo; EventSyncInfoRec syncEvents; +static struct DeviceEventTime { + Bool reset; + TimeStamp time; +} lastDeviceEventTime[MAXDEVICES]; + /** * The root window the given device is currently on. */ @@ -1046,33 +1051,73 @@ XineramaGetCursorScreen(DeviceIntPtr pDev) #define TIMESLOP (5 * 60 * 1000) /* 5 minutes */ static void -MonthChangedOrBadTime(InternalEvent *ev) +MonthChangedOrBadTime(CARD32 *ms) { /* If the ddx/OS is careless about not processing timestamped events from * different sources in sorted order, then it's possible for time to go * backwards when it should not. Here we ensure a decent time. */ - if ((currentTime.milliseconds - ev->any.time) > TIMESLOP) + if ((currentTime.milliseconds - *ms) > TIMESLOP) currentTime.months++; else - ev->any.time = currentTime.milliseconds; + *ms = currentTime.milliseconds; +} + +void +NoticeTime(const DeviceIntPtr dev, TimeStamp time) +{ + lastDeviceEventTime[XIAllDevices].time = currentTime; + lastDeviceEventTime[dev->id].time = currentTime; + + LastEventTimeToggleResetFlag(dev->id, TRUE); + LastEventTimeToggleResetFlag(XIAllDevices, TRUE); } static void -NoticeTime(InternalEvent *ev, DeviceIntPtr dev) +NoticeTimeMillis(const DeviceIntPtr dev, CARD32 *ms) { - if (ev->any.time < currentTime.milliseconds) - MonthChangedOrBadTime(ev); - currentTime.milliseconds = ev->any.time; - lastDeviceEventTime[XIAllDevices] = currentTime; - lastDeviceEventTime[dev->id] = currentTime; + TimeStamp time; + if (*ms < currentTime.milliseconds) + MonthChangedOrBadTime(ms); + time.months = currentTime.months; + time.milliseconds = *ms; + NoticeTime(dev, time); } void NoticeEventTime(InternalEvent *ev, DeviceIntPtr dev) { if (!syncEvents.playingEvents) - NoticeTime(ev, dev); + NoticeTimeMillis(dev, &ev->any.time); +} + +TimeStamp +LastEventTime(int deviceid) +{ + return lastDeviceEventTime[deviceid].time; +} + +Bool +LastEventTimeWasReset(int deviceid) +{ + return lastDeviceEventTime[deviceid].reset; +} + +void +LastEventTimeToggleResetFlag(int deviceid, Bool state) +{ + lastDeviceEventTime[deviceid].reset = state; +} + +void +LastEventTimeToggleResetAll(Bool state) +{ + DeviceIntPtr dev; + nt_list_for_each_entry(dev, inputInfo.devices, next) { + LastEventTimeToggleResetFlag(dev->id, FALSE); + } + LastEventTimeToggleResetFlag(XIAllDevices, FALSE); + LastEventTimeToggleResetFlag(XIAllMasterDevices, FALSE); } /************************************************************************** @@ -1096,7 +1141,7 @@ EnqueueEvent(InternalEvent *ev, DeviceIntPtr device) if (!xorg_list_is_empty(&syncEvents.pending)) tail = xorg_list_last_entry(&syncEvents.pending, QdEventRec, next); - NoticeTime((InternalEvent *)event, device); + NoticeTimeMillis(device, &ev->any.time); /* Fix for key repeating bug. */ if (device->key != NULL && device->key->xkbInfo != NULL && @@ -5281,8 +5326,12 @@ InitEvents(void) inputInfo.pointer = (DeviceIntPtr) NULL; for (i = 0; i < MAXDEVICES; i++) { + DeviceIntRec dummy; memcpy(&event_filters[i], default_filter, sizeof(default_filter)); - lastDeviceEventTime[i] = currentTime; + + dummy.id = i; + NoticeTime(&dummy, currentTime); + LastEventTimeToggleResetFlag(i, FALSE); } syncEvents.replayDev = (DeviceIntPtr) NULL; diff --git a/xorg-server/dix/globals.c b/xorg-server/dix/globals.c index 332b91f5c..ad9145b01 100644 --- a/xorg-server/dix/globals.c +++ b/xorg-server/dix/globals.c @@ -122,7 +122,6 @@ Bool party_like_its_1989 = FALSE; Bool whiteRoot = FALSE; TimeStamp currentTime; -TimeStamp lastDeviceEventTime[MAXDEVICES]; int defaultColorVisualClass = -1; int monitorResolution = 0; diff --git a/xorg-server/dix/window.c b/xorg-server/dix/window.c index 804b54c32..112417ebf 100644 --- a/xorg-server/dix/window.c +++ b/xorg-server/dix/window.c @@ -3092,9 +3092,7 @@ dixSaveScreens(ClientPtr client, int on, int mode) DeviceIntPtr dev; UpdateCurrentTimeIf(); nt_list_for_each_entry(dev, inputInfo.devices, next) - lastDeviceEventTime[dev->id] = currentTime; - lastDeviceEventTime[XIAllDevices] = currentTime; - lastDeviceEventTime[XIAllMasterDevices] = currentTime; + NoticeTime(dev, currentTime); } SetScreenSaverTimer(); } diff --git a/xorg-server/exa/exa_migration_mixed.c b/xorg-server/exa/exa_migration_mixed.c index 5e0bf152a..cf66327b3 100644 --- a/xorg-server/exa/exa_migration_mixed.c +++ b/xorg-server/exa/exa_migration_mixed.c @@ -233,10 +233,13 @@ exaPrepareAccessReg_mixed(PixmapPtr pPixmap, int index, RegionPtr pReg) pPixmap->drawable.pScreen, pPixmap); - DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage); - /* This ensures that pending damage reflects the current operation. */ - /* This is used by exa to optimize migration. */ - DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE); + if (pExaPixmap->pDamage) { + DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage); + /* This ensures that pending damage reflects the current + * operation. This is used by exa to optimize migration. + */ + DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE); + } if (has_gpu_copy) { exaPixmapDirty(pPixmap, 0, 0, pPixmap->drawable.width, diff --git a/xorg-server/exa/exa_mixed.c b/xorg-server/exa/exa_mixed.c index 3e2dcf263..b43dfec42 100644 --- a/xorg-server/exa/exa_mixed.c +++ b/xorg-server/exa/exa_mixed.c @@ -106,10 +106,13 @@ exaCreatePixmap_mixed(ScreenPtr pScreen, int w, int h, int depth, pPixmap->drawable.pScreen, pPixmap); - DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage); - /* This ensures that pending damage reflects the current operation. */ - /* This is used by exa to optimize migration. */ - DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE); + if (pExaPixmap->pDamage) { + DamageRegister(&pPixmap->drawable, pExaPixmap->pDamage); + /* This ensures that pending damage reflects the current + * operation. This is used by exa to optimize migration. + */ + DamageSetReportAfterOp(pExaPixmap->pDamage, TRUE); + } } } diff --git a/xorg-server/hw/dmx/glxProxy/glxsingle.c b/xorg-server/hw/dmx/glxProxy/glxsingle.c index abfb880a3..679a302ea 100644 --- a/xorg-server/hw/dmx/glxProxy/glxsingle.c +++ b/xorg-server/hw/dmx/glxProxy/glxsingle.c @@ -349,25 +349,29 @@ __glXForwardAllWithReply(__GLXclientState * cl, GLbyte * pc) * get the reply from the back-end server */ _XReply(dpy, (xReply *) &be_reply, 0, False); - be_buf_size = be_reply.length << 2; - if (be_buf_size > 0) { - be_buf = (char *) malloc(be_buf_size); - if (be_buf) { - _XRead(dpy, be_buf, be_buf_size); + if (s == from_screen) { + /* Save data from last reply to send on to client */ + be_buf_size = be_reply.length << 2; + if (be_buf_size > 0) { + be_buf = malloc(be_buf_size); + if (be_buf) { + _XRead(dpy, be_buf, be_buf_size); + } + else { + /* Throw data on the floor */ + _XEatDataWords(dpy, be_reply.length); + return BadAlloc; + } } - else { - /* Throw data on the floor */ + } + else { + /* Just discard data from all replies before the last one */ + if (be_reply.length > 0) _XEatDataWords(dpy, be_reply.length); - return BadAlloc; - } } UnlockDisplay(dpy); SyncHandle(); - - if (s > from_screen && be_buf_size > 0) { - free(be_buf); - } } /* diff --git a/xorg-server/hw/dmx/glxProxy/glxvendor.c b/xorg-server/hw/dmx/glxProxy/glxvendor.c index 50d505c4b..b475daf0f 100644 --- a/xorg-server/hw/dmx/glxProxy/glxvendor.c +++ b/xorg-server/hw/dmx/glxProxy/glxvendor.c @@ -332,25 +332,29 @@ __glXVForwardAllWithReply(__GLXclientState * cl, GLbyte * pc) * get the reply from the back-end server */ _XReply(dpy, (xReply *) &be_reply, 0, False); - be_buf_size = be_reply.length << 2; - if (be_buf_size > 0) { - be_buf = (char *) malloc(be_buf_size); - if (be_buf) { - _XRead(dpy, be_buf, be_buf_size); + if (s == from_screen) { + /* Save data from last reply to send on to client */ + be_buf_size = be_reply.length << 2; + if (be_buf_size > 0) { + be_buf = malloc(be_buf_size); + if (be_buf) { + _XRead(dpy, be_buf, be_buf_size); + } + else { + /* Throw data on the floor */ + _XEatDataWords(dpy, be_reply.length); + return BadAlloc; + } } - else { - /* Throw data on the floor */ + } + else { + /* Just discard data from all replies before the last one */ + if (be_reply.length > 0) _XEatDataWords(dpy, be_reply.length); - return BadAlloc; - } } UnlockDisplay(dpy); SyncHandle(); - - if (s > from_screen && be_buf_size > 0) { - free(be_buf); - } } /* diff --git a/xorg-server/hw/xfree86/dixmods/Makefile.am b/xorg-server/hw/xfree86/dixmods/Makefile.am index 9933bc88d..3c43640ec 100644 --- a/xorg-server/hw/xfree86/dixmods/Makefile.am +++ b/xorg-server/hw/xfree86/dixmods/Makefile.am @@ -32,7 +32,7 @@ libglx_la_LIBADD = $(top_builddir)/glx/libglx.la $(GLX_SYS_LIBS) if AIGLX_DRI_LOADER libglx_la_LIBADD += $(top_builddir)/glx/libglxdri.la if NO_UNDEFINED -libglx_la_LIBADD += ../dri/libdri.la ../dri2/libdri2.la +libglx_la_LIBADD += $(LIBDRM_LIBS) $(PIXMAN_LIBS) endif endif libglx_la_SOURCES = glxmodule.c diff --git a/xorg-server/include/dix.h b/xorg-server/include/dix.h index 171e56e11..fa7ccd4a3 100644 --- a/xorg-server/include/dix.h +++ b/xorg-server/include/dix.h @@ -315,8 +315,19 @@ extern _X_EXPORT WindowPtr GetSpriteWindow(DeviceIntPtr pDev); extern _X_EXPORT void +NoticeTime(const DeviceIntPtr dev, + TimeStamp time); +extern _X_EXPORT void NoticeEventTime(InternalEvent *ev, DeviceIntPtr dev); +extern _X_EXPORT TimeStamp +LastEventTime(int deviceid); +extern _X_EXPORT Bool +LastEventTimeWasReset(int deviceid); +extern _X_EXPORT void +LastEventTimeToggleResetFlag(int deviceid, Bool state); +extern _X_EXPORT void +LastEventTimeToggleResetAll(Bool state); extern void EnqueueEvent(InternalEvent * /* ev */ , diff --git a/xorg-server/include/dixstruct.h b/xorg-server/include/dixstruct.h index 7226760e9..7065b0456 100644 --- a/xorg-server/include/dixstruct.h +++ b/xorg-server/include/dixstruct.h @@ -144,7 +144,6 @@ typedef struct _WorkQueue { } WorkQueueRec; extern _X_EXPORT TimeStamp currentTime; -extern _X_EXPORT TimeStamp lastDeviceEventTime[MAXDEVICES]; extern _X_EXPORT int CompareTimeStamps(TimeStamp /*a */ , diff --git a/xorg-server/os/WaitFor.c b/xorg-server/os/WaitFor.c index 95762ef18..fc02b572f 100644 --- a/xorg-server/os/WaitFor.c +++ b/xorg-server/os/WaitFor.c @@ -567,7 +567,7 @@ NextDPMSTimeout(INT32 timeout) static CARD32 ScreenSaverTimeoutExpire(OsTimerPtr timer, CARD32 now, pointer arg) { - INT32 timeout = now - lastDeviceEventTime[XIAllDevices].milliseconds; + INT32 timeout = now - LastEventTime(XIAllDevices).milliseconds; CARD32 nextTimeout = 0; #ifdef DPMSExtension diff --git a/xorg-server/os/xdmcp.c b/xorg-server/os/xdmcp.c index 66c846d44..c18e90248 100644 --- a/xorg-server/os/xdmcp.c +++ b/xorg-server/os/xdmcp.c @@ -1481,7 +1481,7 @@ recv_alive_msg(unsigned length) if (SessionRunning && AliveSessionID == SessionID) { /* backoff dormancy period */ state = XDM_RUN_SESSION; - if ((GetTimeInMillis() - lastDeviceEventTime[XIAllDevices].milliseconds) > + if ((GetTimeInMillis() - LastEventTime(XIAllDevices).milliseconds) > keepaliveDormancy * 1000) { keepaliveDormancy <<= 1; if (keepaliveDormancy > XDM_MAX_DORMANCY) diff --git a/xorg-server/xkeyboard-config/Makefile.am b/xorg-server/xkeyboard-config/Makefile.am index e0b3168bc..4cc825416 100644 --- a/xorg-server/xkeyboard-config/Makefile.am +++ b/xorg-server/xkeyboard-config/Makefile.am @@ -12,7 +12,7 @@ EXTRA_DIST=config.rpath COPYING README \ DISTCLEANFILES=intltool-extract intltool-merge intltool-update -# ACLOCAL_AMFLAGS = -I m4 +ACLOCAL_AMFLAGS = -I m4 sync-po: rsync -Lrtvz translationproject.org::tp/latest/xkeyboard-config/ po diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in index 874b52eb6..64714675b 100644 --- a/xorg-server/xkeyboard-config/rules/base.xml.in +++ b/xorg-server/xkeyboard-config/rules/base.xml.in @@ -2528,10 +2528,11 @@ </variant> <variant> <configItem> - <name>uig</name> + <name>ug</name> + <_shortDescription>ug</_shortDescription> <_description>Uyghur</_description> <languageList> - <iso639Id>uig</iso639Id> + <iso639Id>ug</iso639Id> </languageList> </configItem> </variant> @@ -4411,7 +4412,7 @@ <variant> <configItem> <name>rue</name> - <_description>Pannonian Rusyn (homophonic)</_description> + <_description>Pannonian Rusyn</_description> <languageList> <iso639Id>rue</iso639Id> </languageList> diff --git a/xorg-server/xkeyboard-config/symbols/cn b/xorg-server/xkeyboard-config/symbols/cn index e6b2c525e..8c2ffe422 100644 --- a/xorg-server/xkeyboard-config/symbols/cn +++ b/xorg-server/xkeyboard-config/symbols/cn @@ -149,32 +149,21 @@ xkb_symbols "tib_asciinum" { key <AE10> { [ 0, 0x1000f20, 0x1000f08, 0x1000f12 ] }; # 0 ༠ ༈ ༒ }; -// Uyghur Standard Keyboard map for XKB/X.org +// Uyghur Standard Keyboard Map for XKB/X.Org // -// xkb version originally created by -// Abdusalam Abdurahman <Abdusalam.Abdurahman@gmail.com> -// slightly corrected according to feedback and submitted by +// XKB version in collaboration by Muhemmed Abdullah <muhammad@yulghun.com>, +// Abdussalam Abdurrahman <abdusalam.abdurahman@gmail.com>, and // Ekrem Tomur <ekrem.tomur@gmail.com> -partial alphanumeric_keys -xkb_symbols "uig" { +partial alphanumeric_keys +xkb_symbols "ug" { + include "us(basic)" name[Group1]= "Uyghur"; - key <TLDE> { [ grave, asciitilde ] }; - - key <AE01> { [ 1, exclam ] }; // 1 ! - key <AE02> { [ 2, at ] }; // 2 @ - key <AE03> { [ 3, numbersign ] }; // 3 # - key <AE04> { [ 4, dollar ] }; // 4 $ - key <AE05> { [ 5, percent ] }; // 5 % - key <AE06> { [ 6, asciicircum ] }; // 6 ^ - key <AE07> { [ 7, ampersand ] }; // 7 & - key <AE08> { [ 8, asterisk ] }; // 8 * key <AE09> { [ 9, parenright ] }; // 9 ) key <AE10> { [ 0, parenleft ] }; // 0 ( key <AE11> { [ minus, 0x1002014 ] }; // - — - key <AE12> { [ equal, plus ] }; // = + key <AD01> { [ 0x1000686, VoidSymbol ] }; // چ key <AD02> { [ 0x10006cb, VoidSymbol ] }; // ۋ @@ -199,7 +188,6 @@ xkb_symbols "uig" { key <AC08> { [ 0x1000643, 0x10006c6 ] }; // ك ۆ key <AC09> { [ 0x1000644, VoidSymbol ] }; // ل key <AC10> { [ Arabic_semicolon, colon ] }; // ؛ : - key <AC11> { [ apostrophe, quotedbl ] }; // ' " key <AB01> { [ 0x1000632, VoidSymbol ] }; // ز key <AB02> { [ 0x1000634, VoidSymbol ] }; // ش @@ -211,6 +199,4 @@ xkb_symbols "uig" { key <AB08> { [ Arabic_comma, 0x100203a ] }; // ، › key <AB09> { [ period, 0x1002039 ] }; // . ‹ key <AB10> { [ 0x1000626, Arabic_question_mark ] }; // ئ ؟ - - key <BKSL> { [ backslash, bar ] }; // \ | }; diff --git a/xorg-server/xkeyboard-config/symbols/rs b/xorg-server/xkeyboard-config/symbols/rs index 22ff2dae8..86b54632a 100644 --- a/xorg-server/xkeyboard-config/symbols/rs +++ b/xorg-server/xkeyboard-config/symbols/rs @@ -300,30 +300,28 @@ xkb_symbols "latinalternatequotes" { }; xkb_symbols "rue" { - // Homophonic layout for Pannonian Rusyn (spoken mainly in Serbia and - // Croatia by the Rusyn people), based on Ukrainian homophonic. - // Author: Ljubomir J. Papuga (Любомир Я. Папуґа) <papuga.rs@gmail.com> - - name[Group1]= "Pannonian Rusyn (homophonic)"; - - include "ua(homophonic)" - - key <TLDE> { [ grave, asciitilde ] }; - key <AE03> { [ 3, doublelowquotemark ] }; - key <AE04> { [ 4, rightdoublequotemark ] }; - key <AE07> { [ 7, EuroSign ] }; - key <AE11> { [ 0x002D, emdash ] }; - key <AE12> { [ equal, plus ] }; - - key <AD02> { [ Ukrainian_ie, Ukrainian_IE ] }; - key <AD06> { [ Cyrillic_yu, Cyrillic_YU ] }; - key <AD08> { [ Cyrillic_i, Cyrillic_I ] }; - key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] }; - key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; - - key <LSGT> { [ Ukrainian_yi, Ukrainian_YI ] }; - key <AB08> { [ comma, semicolon ] }; - key <AB09> { [ period, colon ] }; + // Layout for Pannonian Rusyn (spoken mainly in Serbia and + // Croatia by the Rusyn people), based on Serbian Cyrillic layout. + // Authors: + // Ljubomir J. Papuga (Любомир Я. Папуґа) <papuga@zoho.com> + // Mihajlo Hornjak <smeceiotpad@gmail.com> + + name[Group1]= "Pannonian Rusyn"; + + include "rs(basic)" + + key <TLDE> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; // ` + + key <AD01> { [ Cyrillic_ya, Cyrillic_YA ] }; // q + key <AD02> { [ Ukrainian_ie, Ukrainian_IE ] }; // w + key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; // ] + + key <AC05> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] }; // g + key <AC07> { [ Cyrillic_shorti, Cyrillic_SHORTI ] }; // j + key <AC11> { [ Cyrillic_ghe, Cyrillic_GHE ] }; // ' + + key <AB01> { [ Cyrillic_yu, Cyrillic_YU ] }; // z + key <AB02> { [ Ukrainian_yi, Ukrainian_YI ] }; // x }; // EXTRAS: |