Compare commits

..

18 Commits

Author SHA1 Message Date
Marco Trevisan (Treviño)
d76bba5cb4 mir: swap buffer async only when a repaint has been requested
And ignore swapping while still processing a request.
2014-11-20 04:52:58 +01:00
Marco Trevisan (Treviño)
99d849412b mir: add public getter for the internal MirSurface 2014-11-20 04:41:45 +01:00
Marco Trevisan (Treviño)
60e185e496 mir: don't use struct MirConnection*, just the latter 2014-11-20 04:41:06 +01:00
Marco Trevisan (Treviño)
6e9db05601 mir: add OpenGL support
Implement GdkGLContext using EGL and use hardware mir surfaces
when a GdkWindow uses gl rendering.

Fixes https://bugzilla.gnome.org/show_bug.cgi?id=740346
2014-11-20 04:33:38 +01:00
Matthias Clasen
45cfb405c0 GtkModelButton: Don't show both text and icon
The intention was that ::iconic indicates which representation is
preferred (text or icon). We fall back to the other representation
if one is missing.
2014-11-19 21:14:30 -05:00
Matthias Clasen
d51c9e0337 GtkPopoverMenu: be more careful about change notification
Only emit notify for ::visible-submenu when the visible page
in the stack actually changed.
2014-11-19 21:14:30 -05:00
Kjartan Maraas
46b6c2f024 Updated Norwegian bokmål translation. 2014-11-19 19:42:51 +01:00
Kjartan Maraas
048bbb0e6d Updated Norwegian bokmål translation. 2014-11-19 19:31:09 +01:00
Daniel Mustieles
17fce05123 Updated Spanish translation 2014-11-19 13:48:15 +01:00
Lapo Calamandrei
7197758600 Adwaita: typo fix 2014-11-18 15:17:06 +01:00
Matthias Clasen
955c798ab1 GtkPopoverMenu: expose more properties
Expose the position as a child property and the visible page
as a property. These are useful in glade.
2014-11-18 13:39:15 +01:00
Matthias Clasen
cd8576ec19 GtkStack: Fix an oversight in child renaming
We currently emit a warning if you rename a child to the name
it already has. We shouldn't do that.
2014-11-18 13:37:51 +01:00
Tom Tryfonidis
d31896bdba Updated Greek translation 2014-11-18 08:36:28 +00:00
Timm Bäder
0fac139057 Revert "GtkMenuSectionBox: Add tooltip to iconic buttons"
This reverts commit 7543e7b279.
2014-11-17 18:39:15 +01:00
Timm Bäder
9b83858d9a Revert "popover: Add show/hide transition"
This reverts commit 17f48e3a9e.
2014-11-17 18:39:00 +01:00
Timm Bäder
56133a1feb GtkDialog: Connect to activate signals only once
If the widget is an action widget, it's been previously added with
gtk_dialog_add_action_widget, which calls add_response_data on it, which
in turn connects to the clicked/activate signal of that widget, so we
don't need to connect to that signal a second time in
gtk_buildable_custom_finished.
2014-11-17 18:37:47 +01:00
Timm Bäder
17f48e3a9e popover: Add show/hide transition 2014-11-17 18:37:47 +01:00
Timm Bäder
7543e7b279 GtkMenuSectionBox: Add tooltip to iconic buttons 2014-11-17 18:37:47 +01:00
14 changed files with 4075 additions and 3177 deletions

View File

@@ -24,6 +24,7 @@
#include "gdkdisplay.h"
#include "gdkscreen.h"
#include "gdkdevicemanager.h"
#include "gdkglcontextprivate.h"
#include "gdkkeys.h"
#include "gdkwindowimpl.h"
@@ -37,6 +38,27 @@ typedef struct _GdkMirEventSource GdkMirEventSource;
GType gdk_mir_window_impl_get_type (void);
struct _GdkMirGLContext
{
GdkGLContext parent_instance;
EGLContext egl_context;
EGLConfig egl_config;
gboolean is_attached;
};
struct _GdkMirGLContextClass
{
GdkGLContextClass parent_class;
};
typedef struct _GdkMirGLContext GdkMirGLContext;
typedef struct _GdkMirGLContextClass GdkMirGLContextClass;
#define GDK_MIR_GL_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_MIR_GL_CONTEXT, GdkMirGLContext))
GdkDisplay *_gdk_mir_display_open (const gchar *display_name);
GdkScreen *_gdk_mir_screen_new (GdkDisplay *display);
@@ -59,7 +81,7 @@ GdkCursor *_gdk_mir_cursor_new_for_name (GdkDisplay *display, const gchar *name)
const gchar *_gdk_mir_cursor_get_name (GdkCursor *cursor);
GdkWindowImpl *_gdk_mir_window_impl_new (void);
GdkWindowImpl *_gdk_mir_window_impl_new (GdkWindow *window);
void _gdk_mir_window_impl_set_surface_state (GdkMirWindowImpl *impl, MirSurfaceState state);
@@ -93,16 +115,10 @@ gboolean _gdk_mir_display_have_egl_swap_buffers_with_damage (GdkDisplay *display
gboolean _gdk_mir_display_have_egl_surfaceless_context (GdkDisplay *display);
gboolean _gdk_mir_display_make_gl_context_current (GdkDisplay *display, GdkGLContext *context);
EGLSurface _gdk_mir_window_get_egl_surface (GdkWindow *window, EGLConfig config);
EGLSurface _gdk_mir_window_get_dummy_egl_surface (GdkWindow *window, EGLConfig config);
GdkGLContext *_gdk_mir_window_create_gl_context (GdkWindow *window, gboolean attach, GdkGLProfile profile, GdkGLContext *share, GError **error);
void _gdk_mir_window_invalidate_for_new_frame (GdkWindow *window, cairo_region_t *update_area);
void _gdk_mir_print_modifiers (unsigned int modifiers);
void _gdk_mir_print_key_event (const MirKeyEvent *event);

View File

@@ -404,7 +404,7 @@ gdk_mir_display_create_window_impl (GdkDisplay *display,
g_printerr ("\n");
if (attributes->wclass != GDK_INPUT_OUTPUT)
return;
window->impl = _gdk_mir_window_impl_new ();
window->impl = _gdk_mir_window_impl_new (window);
}
static GdkKeymap *
@@ -602,6 +602,47 @@ _gdk_mir_display_init_egl_display (GdkDisplay *display)
return TRUE;
}
static gboolean
gdk_mir_display_make_gl_context_current (GdkDisplay *display,
GdkGLContext *context)
{
EGLDisplay egl_display = _gdk_mir_display_get_egl_display (display);
GdkMirGLContext *mir_context;
GdkWindow *window;
EGLSurface egl_surface;
if (context == NULL)
{
eglMakeCurrent(egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
return TRUE;
}
mir_context = GDK_MIR_GL_CONTEXT (context);
window = gdk_gl_context_get_window (context);
if (mir_context->is_attached)
{
egl_surface = _gdk_mir_window_get_egl_surface (window,
mir_context->egl_config);
}
else
{
if (_gdk_mir_display_have_egl_surfaceless_context (display))
egl_surface = EGL_NO_SURFACE;
else
egl_surface = _gdk_mir_window_get_dummy_egl_surface (window,
mir_context->egl_config);
}
if (!eglMakeCurrent (egl_display, egl_surface, egl_surface, mir_context->egl_context))
{
g_warning ("eglMakeCurrent failed");
return FALSE;
}
return TRUE;
}
EGLDisplay _gdk_mir_display_get_egl_display (GdkDisplay *display)
{
return GDK_MIR_DISPLAY (display)->egl_display;
@@ -614,12 +655,14 @@ gboolean _gdk_mir_display_have_egl_khr_create_context (GdkDisplay *display)
gboolean _gdk_mir_display_have_egl_buffer_age (GdkDisplay *display)
{
return GDK_MIR_DISPLAY (display)->have_egl_buffer_age;
/* FIXME: this is not really supported by mir yet (despite is advertised) */
// return GDK_MIR_DISPLAY (display)->have_egl_buffer_age;
return FALSE;
}
gboolean _gdk_mir_display_have_egl_swap_buffers_with_damage (GdkDisplay *display)
{
/* FIXME: this seems to cause rendering problems, at least with radeon */
/* FIXME: this is not really supported by mir yet (despite is advertised) */
// return GDK_MIR_DISPLAY (display)->have_egl_swap_buffers_with_damage;
return FALSE;
}
@@ -688,5 +731,5 @@ gdk_mir_display_class_init (GdkMirDisplayClass *klass)
display_class->convert_selection = gdk_mir_display_convert_selection;
display_class->text_property_to_utf8_list = gdk_mir_display_text_property_to_utf8_list;
display_class->utf8_to_string_target = gdk_mir_display_utf8_to_string_target;
display_class->make_gl_context_current = _gdk_mir_display_make_gl_context_current;
display_class->make_gl_context_current = gdk_mir_display_make_gl_context_current;
}

View File

@@ -22,93 +22,10 @@
#include "gdkmir-private.h"
#include "gdkinternals.h"
#include "gdkglcontextprivate.h"
#include "gdkintl.h"
#define GDK_MIR_GL_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_MIR_GL_CONTEXT, GdkMirGLContext))
struct _GdkMirGLContext
{
GdkGLContext parent_instance;
EGLContext egl_context;
EGLConfig egl_config;
gboolean is_attached;
};
struct _GdkMirGLContextClass
{
GdkGLContextClass parent_class;
};
typedef struct _GdkMirGLContext GdkMirGLContext;
typedef struct _GdkMirGLContextClass GdkMirGLContextClass;
G_DEFINE_TYPE (GdkMirGLContext, gdk_mir_gl_context, GDK_TYPE_GL_CONTEXT)
static void gdk_mir_gl_context_dispose (GObject *gobject);
void
_gdk_mir_window_invalidate_for_new_frame (GdkWindow *window,
cairo_region_t *update_area)
{
cairo_rectangle_int_t window_rect;
GdkDisplay *display = gdk_window_get_display (window);
GdkMirGLContext *context_mir;
int buffer_age;
gboolean invalidate_all;
EGLSurface egl_surface;
/* Minimal update is ok if we're not drawing with gl */
if (window->gl_paint_context == NULL)
return;
context_mir = GDK_MIR_GL_CONTEXT (window->gl_paint_context);
buffer_age = 0;
egl_surface = _gdk_mir_window_get_egl_surface (window, context_mir->egl_config);
if (_gdk_mir_display_have_egl_buffer_age (display))
{
gdk_gl_context_make_current (window->gl_paint_context);
eglQuerySurface (_gdk_mir_display_get_egl_display (display), egl_surface,
EGL_BUFFER_AGE_EXT, &buffer_age);
}
invalidate_all = FALSE;
if (buffer_age == 0 || buffer_age >= 4)
invalidate_all = TRUE;
else
{
if (buffer_age >= 2)
{
if (window->old_updated_area[0])
cairo_region_union (update_area, window->old_updated_area[0]);
else
invalidate_all = TRUE;
}
if (buffer_age >= 3)
{
if (window->old_updated_area[1])
cairo_region_union (update_area, window->old_updated_area[1]);
else
invalidate_all = TRUE;
}
}
if (invalidate_all)
{
window_rect.x = 0;
window_rect.y = 0;
window_rect.width = gdk_window_get_width (window);
window_rect.height = gdk_window_get_height (window);
/* If nothing else is known, repaint everything so that the back
buffer is fully up-to-date for the swapbuffer */
cairo_region_union_rectangle (update_area, &window_rect);
}
}
static void
gdk_mir_gl_context_update (GdkGLContext *context)
{
@@ -167,170 +84,6 @@ gdk_mir_gl_context_end_frame (GdkGLContext *context,
}
}
static void
gdk_mir_gl_context_class_init (GdkMirGLContextClass *klass)
{
GdkGLContextClass *context_class = GDK_GL_CONTEXT_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
context_class->update = gdk_mir_gl_context_update;
context_class->end_frame = gdk_mir_gl_context_end_frame;
gobject_class->dispose = gdk_mir_gl_context_dispose;
}
static void
gdk_mir_gl_context_init (GdkMirGLContext *self)
{
}
#define MAX_EGL_ATTRS 30
static gboolean
find_eglconfig_for_window (GdkWindow *window,
EGLConfig *egl_config_out,
GError **error)
{
GdkDisplay *display = gdk_window_get_display (window);
EGLDisplay *egl_display = _gdk_mir_display_get_egl_display (display);
GdkVisual *visual = gdk_window_get_visual (window);
EGLint attrs[MAX_EGL_ATTRS];
EGLint count;
EGLConfig *configs;
gboolean use_rgba;
int i = 0;
attrs[i++] = EGL_SURFACE_TYPE;
attrs[i++] = EGL_WINDOW_BIT;
attrs[i++] = EGL_COLOR_BUFFER_TYPE;
attrs[i++] = EGL_RGB_BUFFER;
attrs[i++] = EGL_RED_SIZE;
attrs[i++] = 1;
attrs[i++] = EGL_GREEN_SIZE;
attrs[i++] = 1;
attrs[i++] = EGL_BLUE_SIZE;
attrs[i++] = 1;
use_rgba = (visual == gdk_screen_get_rgba_visual (gdk_display_get_default_screen (display)));
if (use_rgba)
{
attrs[i++] = EGL_ALPHA_SIZE;
attrs[i++] = 1;
}
else
{
attrs[i++] = EGL_ALPHA_SIZE;
attrs[i++] = 0;
}
attrs[i++] = EGL_NONE;
g_assert (i < MAX_EGL_ATTRS);
if (!eglChooseConfig (egl_display, attrs, NULL, 0, &count) || count < 1)
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_UNSUPPORTED_FORMAT,
_("No available configurations for the given pixel format"));
return FALSE;
}
configs = g_new (EGLConfig, count);
if (!eglChooseConfig (egl_display, attrs, configs, count, &count) || count < 1)
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_UNSUPPORTED_FORMAT,
_("No available configurations for the given pixel format"));
return FALSE;
}
/* Pick first valid configuration i guess? */
if (egl_config_out != NULL)
*egl_config_out = configs[0];
g_free (configs);
return TRUE;
}
GdkGLContext *
_gdk_mir_window_create_gl_context (GdkWindow *window,
gboolean attached,
GdkGLProfile profile,
GdkGLContext *share,
GError **error)
{
GdkDisplay *display = gdk_window_get_display (window);
GdkMirGLContext *context;
EGLContext ctx;
EGLConfig config;
int i;
EGLint context_attribs[3];
if (!_gdk_mir_display_init_egl_display (display))
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_NOT_AVAILABLE,
_("No GL implementation is available"));
return NULL;
}
if (profile == GDK_GL_PROFILE_DEFAULT)
profile = GDK_GL_PROFILE_LEGACY;
if (profile == GDK_GL_PROFILE_3_2_CORE &&
!_gdk_mir_display_have_egl_khr_create_context (display))
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_UNSUPPORTED_PROFILE,
_("3.2 core GL profile is not available on EGL implementation"));
return NULL;
}
if (!find_eglconfig_for_window (window, &config, error))
return NULL;
i = 0;
if (profile == GDK_GL_PROFILE_3_2_CORE)
{
context_attribs[i++] = EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR;
context_attribs[i++] = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR;
}
context_attribs[i++] = EGL_NONE;
ctx = eglCreateContext (_gdk_mir_display_get_egl_display (display),
config,
share ? GDK_MIR_GL_CONTEXT (share)->egl_context : EGL_NO_CONTEXT,
context_attribs);
if (ctx == NULL)
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_NOT_AVAILABLE,
_("Unable to create a GL context"));
return NULL;
}
GDK_NOTE (OPENGL,
g_print ("Created EGL context[%p]\n", ctx));
context = g_object_new (GDK_TYPE_MIR_GL_CONTEXT,
"display", display,
"window", window,
"profile", profile,
"shared-context", share,
NULL);
context->egl_config = config;
context->egl_context = ctx;
context->is_attached = attached;
return GDK_GL_CONTEXT (context);
}
static void
gdk_mir_gl_context_dispose (GObject *gobject)
{
@@ -355,43 +108,18 @@ gdk_mir_gl_context_dispose (GObject *gobject)
G_OBJECT_CLASS (gdk_mir_gl_context_parent_class)->dispose (gobject);
}
gboolean
_gdk_mir_display_make_gl_context_current (GdkDisplay *display,
GdkGLContext *context)
static void
gdk_mir_gl_context_class_init (GdkMirGLContextClass *klass)
{
EGLDisplay egl_display = _gdk_mir_display_get_egl_display (display);
GdkMirGLContext *mir_context;
GdkWindow *window;
EGLSurface egl_surface;
GdkGLContextClass *context_class = GDK_GL_CONTEXT_CLASS (klass);
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
if (context == NULL)
{
eglMakeCurrent(egl_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
return TRUE;
}
mir_context = GDK_MIR_GL_CONTEXT (context);
window = gdk_gl_context_get_window (context);
if (mir_context->is_attached)
{
egl_surface = _gdk_mir_window_get_egl_surface (window,
mir_context->egl_config);
}
else
{
if (_gdk_mir_display_have_egl_surfaceless_context (display))
egl_surface = EGL_NO_SURFACE;
else
egl_surface = _gdk_mir_window_get_dummy_egl_surface (window,
mir_context->egl_config);
}
if (!eglMakeCurrent (egl_display, egl_surface, egl_surface, mir_context->egl_context))
{
g_warning ("eglMakeCurrent failed");
return FALSE;
}
return TRUE;
context_class->update = gdk_mir_gl_context_update;
context_class->end_frame = gdk_mir_gl_context_end_frame;
gobject_class->dispose = gdk_mir_gl_context_dispose;
}
static void
gdk_mir_gl_context_init (GdkMirGLContext *self)
{
}

View File

@@ -257,7 +257,7 @@ gdk_mir_screen_get_root_window (GdkScreen *screen)
get_screen_size (GDK_MIR_SCREEN (screen)->display_config, &width, &height);
s->root_window = _gdk_display_create_window (s->display);
s->root_window->impl = _gdk_mir_window_impl_new ();
s->root_window->impl = _gdk_mir_window_impl_new (s->root_window);
s->root_window->impl_window = s->root_window;
s->root_window->visual = s->visual;
s->root_window->window_type = GDK_WINDOW_ROOT;

View File

@@ -25,13 +25,17 @@
#include "gdkwindowimpl.h"
#include "gdkinternals.h"
#include "gdkintl.h"
#include "gdkdisplayprivate.h"
#include "gdkdeviceprivate.h"
#include "gdkframeclockprivate.h"
#define GDK_MIR_WINDOW_IMPL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_WINDOW_IMPL_MIR, GdkMirWindowImplClass))
#define GDK_IS_WINDOW_IMPL_MIR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_WINDOW_IMPL_MIR))
#define GDK_MIR_WINDOW_IMPL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_WINDOW_IMPL_MIR, GdkMirWindowImplClass))
#define MAX_EGL_ATTRS 30
typedef struct _GdkMirWindowImplClass GdkMirWindowImplClass;
struct _GdkMirWindowImpl
@@ -76,6 +80,9 @@ struct _GdkMirWindowImpl
/* TRUE if cursor is inside this window */
gboolean cursor_inside;
gboolean pending_commit;
gboolean pending_swap;
};
struct _GdkMirWindowImplClass
@@ -86,10 +93,16 @@ struct _GdkMirWindowImplClass
G_DEFINE_TYPE (GdkMirWindowImpl, gdk_mir_window_impl, GDK_TYPE_WINDOW_IMPL)
static cairo_surface_t *gdk_mir_window_impl_ref_cairo_surface (GdkWindow *window);
static void on_frame_clock_after_paint (GdkFrameClock *clock, GdkWindow *window);
GdkWindowImpl *
_gdk_mir_window_impl_new (void)
_gdk_mir_window_impl_new (GdkWindow *window)
{
GdkFrameClock *frame_clock = gdk_window_get_frame_clock (window);
g_signal_connect (frame_clock, "after-paint",
G_CALLBACK (on_frame_clock_after_paint), window);
return g_object_new (GDK_TYPE_MIR_WINDOW_IMPL, NULL);
}
@@ -271,6 +284,9 @@ ensure_no_surface (GdkWindow *window)
g_clear_pointer (&impl->dummy_surface, mir_surface_release_sync);
}
impl->pending_commit = FALSE;
impl->pending_swap = FALSE;
g_clear_pointer(&impl->surface, mir_surface_release_sync);
}
@@ -286,10 +302,43 @@ redraw_transient (GdkWindow *window)
}
static void
send_buffer (GdkWindow *window)
on_swap_buffer_completed (MirSurface *surface, void *data)
{
GdkWindow *window = data;
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
/* The Cairo context is no longer valid */
g_clear_pointer (&impl->cairo_surface, cairo_surface_destroy);
impl->pending_swap = FALSE;
_gdk_frame_clock_thaw (gdk_window_get_frame_clock (window));
}
static void
on_frame_clock_after_paint (GdkFrameClock *clock,
GdkWindow *window)
{
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
if (!impl->pending_commit)
return;
impl->pending_commit = FALSE;
_gdk_frame_clock_freeze (clock);
/* Send the completed buffer to Mir */
impl->pending_swap = TRUE;
mir_surface_swap_buffers (impl->surface, on_swap_buffer_completed, window);
}
static void
send_buffer_delayed (GdkWindow *window)
{
GdkMirWindowImpl *impl = GDK_MIR_WINDOW_IMPL (window->impl);
if (impl->pending_swap || impl->pending_commit)
return;
/* Transient windows draw onto parent instead */
if (impl->transient_for)
{
@@ -325,11 +374,15 @@ send_buffer (GdkWindow *window)
cairo_surface_destroy (surface);
}
/* Send the completed buffer to Mir */
mir_surface_swap_buffers_sync (impl->surface);
impl->pending_commit = TRUE;
}
/* The Cairo context is no longer valid */
g_clear_pointer (&impl->cairo_surface, cairo_surface_destroy);
static void
send_buffer (GdkWindow *window)
{
send_buffer_delayed (window);
gdk_frame_clock_request_phase (gdk_window_get_frame_clock (window),
GDK_FRAME_CLOCK_PHASE_AFTER_PAINT);
}
static cairo_surface_t *
@@ -666,8 +719,8 @@ gdk_mir_window_impl_begin_paint_region (GdkWindow *window,
const cairo_region_t *region)
{
//g_printerr ("gdk_mir_window_impl_begin_paint_region window=%p\n", window);
/* Indicate we are ready to be drawn onto directly? */
return FALSE;
/* Indicate we are ready to be drawn right now */
return GDK_MIR_WINDOW_IMPL (window->impl)->pending_swap;
}
static void
@@ -677,7 +730,7 @@ gdk_mir_window_impl_end_paint (GdkWindow *window)
//g_printerr ("gdk_mir_window_impl_end_paint window=%p\n", window);
if (impl->visible && !window->current_paint.use_gl)
send_buffer (window);
send_buffer_delayed (window);
}
static cairo_region_t *
@@ -1255,6 +1308,213 @@ gdk_mir_window_impl_set_shadow_width (GdkWindow *window,
g_printerr ("gdk_mir_window_impl_set_shadow_width window=%p\n", window);
}
static gboolean
find_eglconfig_for_window (GdkWindow *window,
EGLConfig *egl_config_out,
GError **error)
{
GdkDisplay *display = gdk_window_get_display (window);
EGLDisplay *egl_display = _gdk_mir_display_get_egl_display (display);
GdkVisual *visual = gdk_window_get_visual (window);
EGLint attrs[MAX_EGL_ATTRS];
EGLint count;
EGLConfig *configs;
gboolean use_rgba;
int i = 0;
attrs[i++] = EGL_SURFACE_TYPE;
attrs[i++] = EGL_WINDOW_BIT;
attrs[i++] = EGL_COLOR_BUFFER_TYPE;
attrs[i++] = EGL_RGB_BUFFER;
attrs[i++] = EGL_RED_SIZE;
attrs[i++] = 1;
attrs[i++] = EGL_GREEN_SIZE;
attrs[i++] = 1;
attrs[i++] = EGL_BLUE_SIZE;
attrs[i++] = 1;
use_rgba = (visual == gdk_screen_get_rgba_visual (gdk_display_get_default_screen (display)));
if (use_rgba)
{
attrs[i++] = EGL_ALPHA_SIZE;
attrs[i++] = 1;
}
else
{
attrs[i++] = EGL_ALPHA_SIZE;
attrs[i++] = 0;
}
attrs[i++] = EGL_NONE;
g_assert (i < MAX_EGL_ATTRS);
if (!eglChooseConfig (egl_display, attrs, NULL, 0, &count) || count < 1)
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_UNSUPPORTED_FORMAT,
_("No available configurations for the given pixel format"));
return FALSE;
}
configs = g_new (EGLConfig, count);
if (!eglChooseConfig (egl_display, attrs, configs, count, &count) || count < 1)
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_UNSUPPORTED_FORMAT,
_("No available configurations for the given pixel format"));
return FALSE;
}
/* Pick first valid configuration i guess? */
if (egl_config_out != NULL)
*egl_config_out = configs[0];
g_free (configs);
return TRUE;
}
static GdkGLContext *
gdk_mir_window_impl_create_gl_context (GdkWindow *window,
gboolean attached,
GdkGLProfile profile,
GdkGLContext *share,
GError **error)
{
GdkDisplay *display = gdk_window_get_display (window);
GdkMirGLContext *context;
EGLContext ctx;
EGLConfig config;
int i;
EGLint context_attribs[3];
if (!_gdk_mir_display_init_egl_display (display))
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_NOT_AVAILABLE,
_("No GL implementation is available"));
return NULL;
}
if (profile == GDK_GL_PROFILE_DEFAULT)
profile = GDK_GL_PROFILE_LEGACY;
if (profile == GDK_GL_PROFILE_3_2_CORE &&
!_gdk_mir_display_have_egl_khr_create_context (display))
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_UNSUPPORTED_PROFILE,
_("3.2 core GL profile is not available on EGL implementation"));
return NULL;
}
if (!find_eglconfig_for_window (window, &config, error))
return NULL;
i = 0;
if (profile == GDK_GL_PROFILE_3_2_CORE)
{
context_attribs[i++] = EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR;
context_attribs[i++] = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR;
}
context_attribs[i++] = EGL_NONE;
ctx = eglCreateContext (_gdk_mir_display_get_egl_display (display),
config,
share ? GDK_MIR_GL_CONTEXT (share)->egl_context : EGL_NO_CONTEXT,
context_attribs);
if (ctx == NULL)
{
g_set_error_literal (error, GDK_GL_ERROR,
GDK_GL_ERROR_NOT_AVAILABLE,
_("Unable to create a GL context"));
return NULL;
}
GDK_NOTE (OPENGL,
g_print ("Created EGL context[%p]\n", ctx));
context = g_object_new (GDK_TYPE_MIR_GL_CONTEXT,
"display", display,
"window", window,
"profile", profile,
"shared-context", share,
NULL);
context->egl_config = config;
context->egl_context = ctx;
context->is_attached = attached;
return GDK_GL_CONTEXT (context);
}
static void
gdk_mir_window_impl_invalidate_for_new_frame (GdkWindow *window,
cairo_region_t *update_area)
{
cairo_rectangle_int_t window_rect;
GdkDisplay *display = gdk_window_get_display (window);
GdkMirGLContext *context_mir;
int buffer_age;
gboolean invalidate_all;
EGLSurface egl_surface;
/* Minimal update is ok if we're not drawing with gl */
if (window->gl_paint_context == NULL)
return;
context_mir = GDK_MIR_GL_CONTEXT (window->gl_paint_context);
buffer_age = 0;
egl_surface = _gdk_mir_window_get_egl_surface (window, context_mir->egl_config);
if (_gdk_mir_display_have_egl_buffer_age (display))
{
gdk_gl_context_make_current (window->gl_paint_context);
eglQuerySurface (_gdk_mir_display_get_egl_display (display), egl_surface,
EGL_BUFFER_AGE_EXT, &buffer_age);
}
invalidate_all = FALSE;
if (buffer_age == 0 || buffer_age >= 4)
invalidate_all = TRUE;
else
{
if (buffer_age >= 2)
{
if (window->old_updated_area[0])
cairo_region_union (update_area, window->old_updated_area[0]);
else
invalidate_all = TRUE;
}
if (buffer_age >= 3)
{
if (window->old_updated_area[1])
cairo_region_union (update_area, window->old_updated_area[1]);
else
invalidate_all = TRUE;
}
}
if (invalidate_all)
{
window_rect.x = 0;
window_rect.y = 0;
window_rect.width = gdk_window_get_width (window);
window_rect.height = gdk_window_get_height (window);
/* If nothing else is known, repaint everything so that the back
buffer is fully up-to-date for the swapbuffer */
cairo_region_union_rectangle (update_area, &window_rect);
}
}
EGLSurface
_gdk_mir_window_get_egl_surface (GdkWindow *window,
EGLConfig config)
@@ -1409,6 +1669,6 @@ gdk_mir_window_impl_class_init (GdkMirWindowImplClass *klass)
impl_class->get_scale_factor = gdk_mir_window_impl_get_scale_factor;
impl_class->set_opaque_region = gdk_mir_window_impl_set_opaque_region;
impl_class->set_shadow_width = gdk_mir_window_impl_set_shadow_width;
impl_class->create_gl_context = _gdk_mir_window_create_gl_context;
impl_class->invalidate_for_new_frame = _gdk_mir_window_invalidate_for_new_frame;
impl_class->create_gl_context = gdk_mir_window_impl_create_gl_context;
impl_class->invalidate_for_new_frame = gdk_mir_window_impl_invalidate_for_new_frame;
}

View File

@@ -1840,7 +1840,7 @@ gtk_dialog_buildable_custom_finished (GtkBuildable *buildable,
else
signal_id = GTK_WIDGET_GET_CLASS (object)->activate_signal;
if (signal_id)
if (signal_id && !is_action)
{
GClosure *closure;

View File

@@ -205,7 +205,7 @@ update_visibility (GtkModelButton *button)
has_icon = gtk_image_get_storage_type (GTK_IMAGE (button->image)) != GTK_IMAGE_EMPTY;
has_text = gtk_label_get_text (GTK_LABEL (button->label))[0] != '\0';
gtk_widget_set_visible (button->image, has_icon);
gtk_widget_set_visible (button->image, has_icon && (button->iconic || !has_text));
gtk_widget_set_visible (button->label, has_text && (!button->iconic || !has_icon));
}

View File

@@ -103,11 +103,24 @@ struct _GtkPopoverMenu
};
enum {
CHILD_PROP_SUBMENU = 1
PROP_VISIBLE_SUBMENU = 1
};
enum {
CHILD_PROP_SUBMENU = 1,
CHILD_PROP_POSITION
};
G_DEFINE_TYPE (GtkPopoverMenu, gtk_popover_menu, GTK_TYPE_POPOVER)
static void
visible_submenu_changed (GObject *object,
GParamSpec *pspec,
GtkPopoverMenu *popover)
{
g_object_notify (G_OBJECT (popover), "visible-submenu");
}
static void
gtk_popover_menu_init (GtkPopoverMenu *popover)
{
@@ -118,6 +131,8 @@ gtk_popover_menu_init (GtkPopoverMenu *popover)
gtk_stack_set_transition_type (GTK_STACK (stack), GTK_STACK_TRANSITION_TYPE_SLIDE_LEFT_RIGHT);
gtk_widget_show (stack);
gtk_container_add (GTK_CONTAINER (popover), stack);
g_signal_connect (stack, "notify::visible-child-name",
G_CALLBACK (visible_submenu_changed), popover);
}
static void
@@ -205,7 +220,6 @@ gtk_popover_menu_get_child_property (GtkContainer *container,
return;
switch (property_id)
{
case CHILD_PROP_SUBMENU:
{
@@ -215,6 +229,14 @@ gtk_popover_menu_get_child_property (GtkContainer *container,
}
break;
case CHILD_PROP_POSITION:
{
gint position;
gtk_container_child_get (GTK_CONTAINER (stack), child, "position", &position, NULL);
g_value_set_int (value, position);
}
break;
default:
GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
break;
@@ -245,17 +267,73 @@ gtk_popover_menu_set_child_property (GtkContainer *container,
}
break;
case CHILD_PROP_POSITION:
{
gint position;
position = g_value_get_int (value);
gtk_container_child_set (GTK_CONTAINER (stack), child, "position", position, NULL);
}
break;
default:
GTK_CONTAINER_WARN_INVALID_CHILD_PROPERTY_ID (container, property_id, pspec);
break;
}
}
static void
gtk_popover_menu_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
GtkWidget *stack;
stack = gtk_bin_get_child (GTK_BIN (object));
switch (property_id)
{
case PROP_VISIBLE_SUBMENU:
g_value_set_string (value, gtk_stack_get_visible_child_name (GTK_STACK (stack)));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
gtk_popover_menu_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
GtkWidget *stack;
stack = gtk_bin_get_child (GTK_BIN (object));
switch (property_id)
{
case PROP_VISIBLE_SUBMENU:
gtk_stack_set_visible_child_name (GTK_STACK (stack), g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void
gtk_popover_menu_class_init (GtkPopoverMenuClass *klass)
{
GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
object_class->set_property = gtk_popover_menu_set_property;
object_class->get_property = gtk_popover_menu_get_property;
widget_class->map = gtk_popover_menu_map;
widget_class->unmap = gtk_popover_menu_unmap;
@@ -266,6 +344,14 @@ gtk_popover_menu_class_init (GtkPopoverMenuClass *klass)
container_class->set_child_property = gtk_popover_menu_set_child_property;
container_class->get_child_property = gtk_popover_menu_get_child_property;
g_object_class_install_property (object_class,
PROP_VISIBLE_SUBMENU,
g_param_spec_string ("visible-submenu",
P_("Visible submenu"),
P_("The name of the visible submenu"),
NULL,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
/**
* GtkPopoverMenu:submenu:
*
@@ -282,6 +368,14 @@ gtk_popover_menu_class_init (GtkPopoverMenuClass *klass)
P_("The name of the submenu"),
NULL,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gtk_container_class_install_child_property (container_class,
CHILD_PROP_POSITION,
g_param_spec_int ("position",
P_("Position"),
P_("The index of the child in the parent"),
-1, G_MAXINT, 0,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
}
/**

View File

@@ -650,6 +650,8 @@ gtk_stack_set_child_property (GtkContainer *container,
for (l = priv->children; l != NULL; l = l->next)
{
info2 = l->data;
if (info == info2)
continue;
if (g_strcmp0 (info2->name, name) == 0)
{
g_warning ("Duplicate child name in GtkStack: %s\n", name);

View File

@@ -1566,7 +1566,7 @@ column-header.button.dnd { // for treeview-like derive widgets
.popover {
padding: 2px;
border: 1px solid $borders-color;
border: 1px solid $borders_color;
border-radius: 5px;
background-color: mix($bg_color, $base_color, 50%);

View File

@@ -18,8 +18,8 @@ msgstr ""
"Project-Id-Version: gtk+-properties.master\n"
"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gtk"
"%2b&keywords=I18N+L10N&component=general\n"
"POT-Creation-Date: 2014-11-13 10:02+0000\n"
"PO-Revision-Date: 2014-11-13 12:41+0100\n"
"POT-Creation-Date: 2014-11-19 10:02+0000\n"
"PO-Revision-Date: 2014-11-19 12:57+0100\n"
"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n"
"Language-Team: Español; Castellano <gnome-es-list@gnome.org>\n"
"Language: \n"
@@ -120,7 +120,6 @@ msgid "The default display for GDK"
msgstr "El visor predeterminado para GDK"
#: ../gdk/gdkglcontext.c:244
#| msgid "The GDK visual used by the GL context"
msgid "The GDK display the context is from"
msgstr "El contexto del que proviene la visualización GDK"
@@ -137,7 +136,6 @@ msgid "Profile"
msgstr "Perfil"
#: ../gdk/gdkglcontext.c:276
#| msgid "The Cell Area this context was created for"
msgid "The GL profile the context was created for"
msgstr "El perfil GL para el que fue creado el contexto"
@@ -146,7 +144,6 @@ msgid "Shared context"
msgstr "Contexto compartido"
#: ../gdk/gdkglcontext.c:293
#| msgid "The Cell Area this context was created for"
msgid "The GL context this context share data with"
msgstr "El contexto GL con el que este contexto comparte datos"
@@ -1331,13 +1328,14 @@ msgstr ""
"inicio o el final del padre"
#: ../gtk/gtkactionbar.c:257 ../gtk/gtkbox.c:336 ../gtk/gtkheaderbar.c:1849
#: ../gtk/gtknotebook.c:774 ../gtk/gtkpaned.c:337 ../gtk/gtkpopover.c:1319
#: ../gtk/gtkstack.c:471 ../gtk/gtktoolitemgroup.c:1674
#: ../gtk/gtknotebook.c:774 ../gtk/gtkpaned.c:337 ../gtk/gtkpopover.c:1314
#: ../gtk/gtkpopovermenu.c:365 ../gtk/gtkstack.c:471
#: ../gtk/gtktoolitemgroup.c:1674
msgid "Position"
msgstr "Posición"
#: ../gtk/gtkactionbar.c:258 ../gtk/gtkbox.c:337 ../gtk/gtkheaderbar.c:1850
#: ../gtk/gtknotebook.c:775 ../gtk/gtkstack.c:472
#: ../gtk/gtknotebook.c:775 ../gtk/gtkpopovermenu.c:366 ../gtk/gtkstack.c:472
msgid "The index of the child in the parent"
msgstr "El índice del hijo en el padre"
@@ -4173,7 +4171,6 @@ msgid "The GL context"
msgstr "El contexto GL"
#: ../gtk/gtkglarea.c:741
#| msgid "The GDK visual used by the GL context"
msgid "The GL profile to use for the GL context"
msgstr "El perfil GL que usar para el contexto GL"
@@ -4182,7 +4179,6 @@ msgid "Auto render"
msgstr "Renderizado automático"
#: ../gtk/gtkglarea.c:764
#| msgid "Whether the column can be reordered around the headers"
msgid "Whether the gl area renders on each redraw"
msgstr "Indica si el área GL se renderiza en cada redibujado"
@@ -4203,12 +4199,10 @@ msgid "Whether a depth buffer is allocated"
msgstr "Indica si se ha reservado un búfer de profundidad"
#: ../gtk/gtkglarea.c:812
#| msgid "Has depth buffer"
msgid "Has stencil buffer"
msgstr "Tiene un búfer de plantilla"
#: ../gtk/gtkglarea.c:813
#| msgid "Whether a depth buffer is allocated"
msgid "Whether a stencil buffer is allocated"
msgstr "Indica si se ha reservado un búfer de plantilla"
@@ -5023,7 +5017,7 @@ msgstr ""
"Establece si el elemento del menú aparece justificado en la parte derecha de "
"una barra de menú"
#: ../gtk/gtkmenuitem.c:412 ../gtk/gtkpopovermenu.c:264
#: ../gtk/gtkmenuitem.c:412 ../gtk/gtkpopovermenu.c:357
msgid "Submenu"
msgstr "Submenú"
@@ -5150,12 +5144,10 @@ msgid "Menu name"
msgstr "Nombre del menú"
#: ../gtk/gtkmodelbutton.c:911
#| msgid "The name of the selected font"
msgid "The name of the menu to open"
msgstr "El nombre del menú que abrir"
#: ../gtk/gtkmodelbutton.c:927
#| msgid "Whether the menu has a tearoff item"
msgid "Whether the menu is a parent"
msgstr "Indica si el menú es padre"
@@ -5164,7 +5156,6 @@ msgid "Centered"
msgstr "Centrado"
#: ../gtk/gtkmodelbutton.c:942
#| msgid "Whether to wrap the license text."
msgid "Whether to center the contents"
msgstr "Indica si se debe centrar el contenido"
@@ -5173,7 +5164,6 @@ msgid "Iconic"
msgstr "Icónico"
#: ../gtk/gtkmodelbutton.c:958
#| msgid "Whether to wrap the license text."
msgid "Whether to prefer the icon over text"
msgstr "Indica si se prefiere el icono sobre el texto"
@@ -5420,12 +5410,10 @@ msgid "Largest possible value for the \"position\" property"
msgstr "El valor más grande posible para la propiedad \"posicion\""
#: ../gtk/gtkpaned.c:396
#| msgid "Width of handle"
msgid "Wide Handle"
msgstr "Tirador ancho"
#: ../gtk/gtkpaned.c:397
#| msgid "Whether the window frame should have a close button"
msgid "Whether the paned should have a prominent handle"
msgstr "Indica si el panel debe tener un tirador prominente"
@@ -5521,35 +5509,45 @@ msgstr "Ventana del socket"
msgid "The window of the socket the plug is embedded in"
msgstr "La ventana del socket en la que el enchufe está empotrado"
#: ../gtk/gtkpopover.c:1291
#: ../gtk/gtkpopover.c:1286
msgid "Relative to"
msgstr "Relativo a"
#: ../gtk/gtkpopover.c:1292
#: ../gtk/gtkpopover.c:1287
msgid "Widget the bubble window points to"
msgstr "Widget al que apunta la ventana de burbuja"
#: ../gtk/gtkpopover.c:1305
#: ../gtk/gtkpopover.c:1300
msgid "Pointing to"
msgstr "Apuntando a"
#: ../gtk/gtkpopover.c:1306
#: ../gtk/gtkpopover.c:1301
msgid "Rectangle the bubble window points to"
msgstr "Rectángulo al que la ventana de burbuja apunta"
#: ../gtk/gtkpopover.c:1320
#: ../gtk/gtkpopover.c:1315
msgid "Position to place the bubble window"
msgstr "Posición en la que colocar la ventana de burbuja"
#: ../gtk/gtkpopover.c:1335 ../gtk/gtkwindow.c:753
#: ../gtk/gtkpopover.c:1330 ../gtk/gtkwindow.c:753
msgid "Modal"
msgstr "Modal"
#: ../gtk/gtkpopover.c:1336
#: ../gtk/gtkpopover.c:1331
msgid "Whether the popover is modal"
msgstr "Indica si la ventana emergente es modal"
#: ../gtk/gtkpopovermenu.c:265
#: ../gtk/gtkpopovermenu.c:340
#| msgid "Visible Focus"
msgid "Visible submenu"
msgstr "Submenú visible"
#: ../gtk/gtkpopovermenu.c:341
#| msgid "The name of the submenu"
msgid "The name of the visible submenu"
msgstr "El nombre del submenú visible"
#: ../gtk/gtkpopovermenu.c:358
msgid "The name of the submenu"
msgstr "El nombre del submenú"
@@ -6457,12 +6455,10 @@ msgid "Kinetic scrolling mode."
msgstr "Modo de desplazamiento de Kinetic"
#: ../gtk/gtkscrolledwindow.c:572
#| msgid "Kinetic Scrolling"
msgid "Overlay Scrolling"
msgstr "Superposición del desplazamiento"
#: ../gtk/gtkscrolledwindow.c:573
#| msgid "Kinetic scrolling mode."
msgid "Overlay scrolling mode"
msgstr "Modo de superposición del desplazamiento"
@@ -7344,22 +7340,18 @@ msgid "Homogeneous sizing"
msgstr "Tamaño homogéneo"
#: ../gtk/gtkstack.c:410
#| msgid "Horizontal options"
msgid "Horizontally homogeneous"
msgstr "Homogéneo horizontalmente"
#: ../gtk/gtkstack.c:410
#| msgid "Homogeneous sizing"
msgid "Horizontally homogeneous sizing"
msgstr "Tamaño horizontal homogéneo"
#: ../gtk/gtkstack.c:422
#| msgid "Vertical options"
msgid "Vertically homogeneous"
msgstr "Homogéneo verticalmente"
#: ../gtk/gtkstack.c:422
#| msgid "Homogeneous sizing"
msgid "Vertically homogeneous sizing"
msgstr "Tamaño vertical homogéneo"

File diff suppressed because it is too large Load Diff

496
po/el.po

File diff suppressed because it is too large Load Diff

220
po/nb.po
View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gtk+ 3.16.x\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-11-13 20:54+0100\n"
"PO-Revision-Date: 2014-11-13 21:13+0100\n"
"POT-Creation-Date: 2014-11-19 19:31+0100\n"
"PO-Revision-Date: 2014-11-19 19:42+0100\n"
"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
"Language-Team: Norwegian bokmål <i18n-nb@lister.ping.uio.no>\n"
"Language: no\n"
@@ -82,7 +82,7 @@ msgstr "Feilsøkingsflagg som skal fjernes for GDK"
#: ../gdk/gdkwindow.c:2733
msgid "GL support disabled via GDK_DEBUG"
msgstr ""
msgstr "GL-støtte slått av via GDK_DEBUG"
#.
#. * Translators, the strings in the “keyboard label” context are
@@ -495,7 +495,7 @@ msgstr[1] "Åpner %d oppføringer"
#: ../gdk/x11/gdkglcontext-x11.c:728
#, c-format
msgid "No available configurations for the given RGBA pixel format"
msgstr ""
msgstr "Ingen tilgjengelige konfigurasjoner for oppgitt RGBA-pikselformat"
#: ../gdk/x11/gdkglcontext-x11.c:1063
msgid ""
@@ -1183,7 +1183,10 @@ msgstr "_Lagre fargen her"
msgid ""
"Click this palette entry to make it the current color. To change this entry, "
"drag a color swatch here or right-click it and select “Save color here.”"
msgstr "Klikk på denne palettoppføringen for å bruke den som aktiv farge. For å endre denne oppføringen drar du en fargeprøve hit eller høyreklikk den og velg «Lagre farge her.»"
msgstr ""
"Klikk på denne palettoppføringen for å bruke den som aktiv farge. For å "
"endre denne oppføringen drar du en fargeprøve hit eller høyreklikk den og "
"velg «Lagre farge her.»"
#: ../gtk/deprecated/gtkcolorseldialog.c:191
#: ../gtk/deprecated/gtkfontsel.c:1689 ../gtk/gtkfilechooserbutton.c:794
@@ -1383,7 +1386,7 @@ msgstr "Tom"
#: ../gtk/encodesymbolic.c:38
msgid "Output to this directory instead of cwd"
msgstr ""
msgstr "Skriv til denne katalogen i stedet for aktiv katalog"
#: ../gtk/encodesymbolic.c:266
#, c-format
@@ -1681,7 +1684,7 @@ msgstr "Ugyldig egenskap: %s.%s på linje %d"
#: ../gtk/gtkbuilderparser.c:775
#, c-format
msgid "Invalid signal '%s' for type '%s' on line %d"
msgstr ""
msgstr "Ugyldig signal «%s» for type «%s» på linje %d"
#: ../gtk/gtkbuilderparser.c:1067
#, c-format
@@ -1800,7 +1803,7 @@ msgstr "Ny hurtigtast …"
#, c-format
msgctxt "progress bar label"
msgid "%d%%"
msgstr ""
msgstr "%d %%"
#: ../gtk/gtkcolorbutton.c:183 ../gtk/gtkcolorbutton.c:383
msgid "Pick a Color"
@@ -2101,18 +2104,18 @@ msgstr "Høy_re:"
msgid "Paper Margins"
msgstr "Papirmarger"
#: ../gtk/gtkentry.c:9589 ../gtk/gtkentry.c:9744 ../gtk/gtklabel.c:6586
#: ../gtk/gtktextview.c:8868 ../gtk/gtktextview.c:9058
#: ../gtk/gtkentry.c:9589 ../gtk/gtkentry.c:9742 ../gtk/gtklabel.c:6586
#: ../gtk/gtktextview.c:8868 ../gtk/gtktextview.c:9056
msgid "Cu_t"
msgstr "Klipp u_t"
#: ../gtk/gtkentry.c:9593 ../gtk/gtkentry.c:9747 ../gtk/gtklabel.c:6587
#: ../gtk/gtktextview.c:8872 ../gtk/gtktextview.c:9062
#: ../gtk/gtkentry.c:9593 ../gtk/gtkentry.c:9745 ../gtk/gtklabel.c:6587
#: ../gtk/gtktextview.c:8872 ../gtk/gtktextview.c:9060
msgid "_Copy"
msgstr "_Kopier"
#: ../gtk/gtkentry.c:9597 ../gtk/gtkentry.c:9750 ../gtk/gtklabel.c:6588
#: ../gtk/gtktextview.c:8874 ../gtk/gtktextview.c:9064
#: ../gtk/gtkentry.c:9597 ../gtk/gtkentry.c:9748 ../gtk/gtklabel.c:6588
#: ../gtk/gtktextview.c:8874 ../gtk/gtktextview.c:9062
msgid "_Paste"
msgstr "_Lim inn"
@@ -2124,7 +2127,7 @@ msgstr "_Slett"
msgid "Select _All"
msgstr "Velg _alt"
#: ../gtk/gtkentry.c:10805
#: ../gtk/gtkentry.c:10803
msgid "Caps Lock is on"
msgstr "Caps Lock er på"
@@ -2234,7 +2237,7 @@ msgstr "Vis kolonne for _størrelse"
#: ../gtk/gtkfilechooserwidget.c:1709
msgid "Sort _Folders before Files"
msgstr ""
msgstr "Soroter _mapper før filer"
#. Label
#: ../gtk/gtkfilechooserwidget.c:2008
@@ -2338,9 +2341,8 @@ msgid "None"
msgstr "Ingen"
#: ../gtk/gtkglarea.c:296
#, fuzzy
msgid "OpenGL context creation failed"
msgstr "Klarte ikke å hente informasjon om skriveren"
msgstr "Oppretting av OpenGL-kontekst feilet"
#: ../gtk/gtkheaderbar.c:414
msgid "Application menu"
@@ -2721,7 +2723,7 @@ msgstr "Oppgi lokasjon"
#: ../gtk/gtkplacessidebar.c:1001
msgid "Manually enter a location"
msgstr ""
msgstr "Oppgi lokasjon manuelt"
#: ../gtk/gtkplacessidebar.c:1012
msgid "Trash"
@@ -3129,7 +3131,7 @@ msgstr "Skriv ut"
#, c-format
msgctxt "progress bar label"
msgid "%.0f%%"
msgstr ""
msgstr "%.0f %%"
#: ../gtk/gtkrecentchooserdefault.c:1077 ../gtk/gtkrecentchooserdefault.c:1114
#, c-format
@@ -3425,11 +3427,11 @@ msgstr "Fullt volum"
#, c-format
msgctxt "volume percentage"
msgid "%d%%"
msgstr ""
msgstr "%d %%"
#: ../gtk/gtkwindow.c:11795
msgid "Do you want to use GTK+ Inspector?"
msgstr ""
msgstr "Vil du bruke GTK+ inspektør?"
#: ../gtk/gtkwindow.c:11797
msgid ""
@@ -3440,7 +3442,7 @@ msgstr ""
#: ../gtk/gtkwindow.c:11802
msgid "Don't show this message again"
msgstr ""
msgstr "Ikke vis denne meldingen igjen"
#: ../gtk/inspector/action-editor.c:281
msgid "Activate"
@@ -3488,7 +3490,7 @@ msgstr "Legg til en klasse"
#: ../gtk/inspector/classes-list.ui.h:2
msgid "Restore defaults for this widget"
msgstr ""
msgstr "Gjenopprett forvalg for denne komponenten"
#: ../gtk/inspector/css-editor.c:89 ../gtk/inspector/css-editor.c:95
msgid "You can type here any CSS rule recognized by GTK+."
@@ -3510,7 +3512,7 @@ msgstr ""
#: ../gtk/inspector/css-editor.c:159
msgid "Saving CSS failed"
msgstr ""
msgstr "Lagring av CSS feilet"
#: ../gtk/inspector/css-editor.c:199
msgid "_Save"
@@ -3519,11 +3521,11 @@ msgstr "_Lagre"
#. vim: set et sw=2 ts=2:
#: ../gtk/inspector/css-editor.ui.h:1
msgid "Disable this custom CSS"
msgstr ""
msgstr "Slå av denne egendefinerte CSSen"
#: ../gtk/inspector/css-editor.ui.h:2
msgid "Save the current CSS"
msgstr ""
msgstr "Lagre aktiv CSS"
#: ../gtk/inspector/data-list.ui.h:1
msgid "Show data"
@@ -3536,31 +3538,31 @@ msgstr "GTK+-versjon"
#: ../gtk/inspector/general.ui.h:2
msgid "GDK Backend"
msgstr ""
msgstr "GDK-motor"
#: ../gtk/inspector/general.ui.h:4
msgid "GL Version"
msgstr ""
msgstr "GL-versjon"
#: ../gtk/inspector/general.ui.h:5
msgid "GL Vendor"
msgstr ""
msgstr "GL-produsent"
#: ../gtk/inspector/gestures.c:128
msgid "Capture"
msgstr ""
msgstr "Fang"
#: ../gtk/inspector/gestures.c:129
msgid "Bubble"
msgstr ""
msgstr "Boble"
#: ../gtk/inspector/gestures.c:130 ../gtk/inspector/menu.ui.h:3
msgid "Target"
msgstr ""
msgstr "Mål"
#: ../gtk/inspector/menu.c:90
msgid "Unnamed section"
msgstr ""
msgstr "Seksjon uten navn"
#. vim: set et sw=2 ts=2:
#: ../gtk/inspector/menu.ui.h:1 ../gtk/inspector/object-tree.ui.h:3
@@ -3577,13 +3579,12 @@ msgstr "Ikon"
#. vim: set et sw=2 ts=2:
#: ../gtk/inspector/misc-info.ui.h:1
#, fuzzy
msgid "Reference count"
msgstr "Brukervalg"
msgstr "Referanseteller"
#: ../gtk/inspector/misc-info.ui.h:3
msgid "Buildable ID"
msgstr ""
msgstr "Byggbar ID"
#: ../gtk/inspector/misc-info.ui.h:4
msgid "Default Widget"
@@ -3598,19 +3599,19 @@ msgstr "Egenskaper"
#: ../gtk/inspector/misc-info.ui.h:6
msgid "Focus Widget"
msgstr ""
msgstr "Fokuskomponent"
#: ../gtk/inspector/misc-info.ui.h:8
msgid "Mnemonic Label"
msgstr ""
msgstr "Hurtitastetikett"
#: ../gtk/inspector/misc-info.ui.h:9
msgid "Allocated size"
msgstr ""
msgstr "Allokert størrelse"
#: ../gtk/inspector/misc-info.ui.h:10
msgid "Clip area"
msgstr ""
msgstr "Klippeområde"
#: ../gtk/inspector/misc-info.ui.h:11
msgid "Tick callback"
@@ -3618,35 +3619,35 @@ msgstr ""
#: ../gtk/inspector/misc-info.ui.h:12
msgid "Frame count"
msgstr ""
msgstr "Bildeantall"
#: ../gtk/inspector/misc-info.ui.h:13
msgid "Frame rate"
msgstr ""
msgstr "Rammehastighet"
#: ../gtk/inspector/misc-info.ui.h:14
msgid "Accessible role"
msgstr ""
msgstr "Tilgjengelighetsrolle"
#: ../gtk/inspector/misc-info.ui.h:15
msgid "Mapped"
msgstr ""
msgstr "Tilordnet"
#: ../gtk/inspector/misc-info.ui.h:16
msgid "Realized"
msgstr ""
msgstr "Realisert"
#: ../gtk/inspector/misc-info.ui.h:17
msgid "Is Toplevel"
msgstr ""
msgstr "Er toppobjekt"
#: ../gtk/inspector/misc-info.ui.h:18
msgid "Child Visible"
msgstr ""
msgstr "Underobjekt synlig"
#: ../gtk/inspector/object-hierarchy.ui.h:1
msgid "Object Hierarchy"
msgstr ""
msgstr "Objekthierarki"
#: ../gtk/inspector/object-tree.ui.h:1
msgid "Object"
@@ -3654,7 +3655,7 @@ msgstr "Objekt"
#: ../gtk/inspector/object-tree.ui.h:4 ../gtk/inspector/window.ui.h:13
msgid "Style Classes"
msgstr ""
msgstr "Stilklasser"
#: ../gtk/inspector/prop-editor.c:617
#, c-format
@@ -3669,16 +3670,16 @@ msgstr "Ukjent"
#: ../gtk/inspector/prop-editor.c:633
#, c-format
msgid "Object: %p (%s)"
msgstr ""
msgstr "Objekt: %p (%s)"
#: ../gtk/inspector/prop-editor.c:1058
#, fuzzy, c-format
#, c-format
msgid "Uneditable property type: %s"
msgstr "Kan ikke stoppe %s"
msgstr "Ikke-redigerbar type for egenskap: %s"
#: ../gtk/inspector/prop-editor.c:1176
msgid "Attribute mapping"
msgstr ""
msgstr "Attributt-tilordning"
#: ../gtk/inspector/prop-editor.c:1181
msgid "Model:"
@@ -3696,24 +3697,23 @@ msgstr "Kolonne:"
#: ../gtk/inspector/prop-editor.c:1306
#, c-format
msgid "Defined at: %p (%s)"
msgstr ""
msgstr "Definert ved: %p (%s)"
#: ../gtk/inspector/prop-editor.c:1370 ../gtk/inspector/prop-editor.c:1386
#, fuzzy
msgid "inverted"
msgstr "_Konverter"
msgstr "invertert"
#: ../gtk/inspector/prop-editor.c:1402
msgid "bidirectional, inverted"
msgstr ""
msgstr "bidireksjonell, invertert"
#: ../gtk/inspector/prop-editor.c:1407 ../gtk/inspector/prop-editor.c:1503
msgid "bidirectional"
msgstr ""
msgstr "bidireksjonell"
#: ../gtk/inspector/prop-editor.c:1412
msgid "Binding:"
msgstr ""
msgstr "Binding:"
#: ../gtk/inspector/prop-editor.c:1522
msgid "Setting:"
@@ -3751,7 +3751,7 @@ msgstr "Attributt"
#: ../gtk/inspector/prop-list.ui.h:4 ../gtk/inspector/signals-list.ui.h:6
msgid "Defined At"
msgstr ""
msgstr "Definert ved"
#: ../gtk/inspector/resource-list.ui.h:1
msgid "Path"
@@ -3779,9 +3779,8 @@ msgid "Size:"
msgstr "Størrelse:"
#: ../gtk/inspector/selector.ui.h:1 ../gtk/inspector/window.ui.h:12
#, fuzzy
msgid "Selector"
msgstr "Velg"
msgstr "Velger"
#: ../gtk/inspector/signals-list.c:109
msgid "Yes"
@@ -3790,7 +3789,7 @@ msgstr "Ja"
#. vim: set et sw=2 ts=2:
#: ../gtk/inspector/signals-list.ui.h:1
msgid "Trace signal emissions on this object"
msgstr ""
msgstr "Spor signalutsendelser på dette objektet"
#: ../gtk/inspector/signals-list.ui.h:2
msgid "Clear log"
@@ -3802,11 +3801,11 @@ msgstr "Koblet til"
#: ../gtk/inspector/size-groups.c:223
msgid "Ignore hidden"
msgstr ""
msgstr "Ignorer skjult"
#: ../gtk/inspector/size-groups.c:241
msgid "Mode"
msgstr ""
msgstr "Modus"
#: ../gtk/inspector/size-groups.c:252
msgid "Horizontal"
@@ -3827,27 +3826,27 @@ msgstr "Type"
#: ../gtk/inspector/statistics.ui.h:2
msgid "Self 1"
msgstr ""
msgstr "Selv 1"
#: ../gtk/inspector/statistics.ui.h:3
msgid "Cumulative 1"
msgstr ""
msgstr "Kumulativ 1"
#: ../gtk/inspector/statistics.ui.h:4
msgid "Self 2"
msgstr ""
msgstr "Selv 2"
#: ../gtk/inspector/statistics.ui.h:5
msgid "Cumulative 2"
msgstr ""
msgstr "Kumulativ 2"
#: ../gtk/inspector/statistics.ui.h:6
msgid "Self"
msgstr ""
msgstr "Selv"
#: ../gtk/inspector/statistics.ui.h:7
msgid "Cumulative"
msgstr ""
msgstr "Kumulativ"
#: ../gtk/inspector/statistics.ui.h:8
msgid "Enable statistics with GOBJECT_DEBUG=instance-count"
@@ -3913,16 +3912,15 @@ msgstr "Høyre til venstre"
#: ../gtk/inspector/visual.ui.h:8
msgid "Window scaling"
msgstr ""
msgstr "Vinduskalering"
#: ../gtk/inspector/visual.ui.h:9
msgid "Animations"
msgstr "Animasjoner"
#: ../gtk/inspector/visual.ui.h:10
#, fuzzy
msgid "Rendering Mode"
msgstr "Genererer data"
msgstr "Gjengivelsesmodus"
#: ../gtk/inspector/visual.ui.h:11
msgid "Similar"
@@ -3938,27 +3936,27 @@ msgstr "Opptak"
#: ../gtk/inspector/visual.ui.h:14
msgid "Show Graphic Updates"
msgstr ""
msgstr "Vis grafiske oppdateringer"
#: ../gtk/inspector/visual.ui.h:15
msgid "Show Baselines"
msgstr ""
msgstr "Vis utgangspunkter"
#: ../gtk/inspector/visual.ui.h:16
msgid "Show Pixel Cache"
msgstr ""
msgstr "Vis pikselbuffer"
#: ../gtk/inspector/visual.ui.h:17
msgid "Simulate touchscreen"
msgstr ""
msgstr "Simuler berøringsskjerm"
#: ../gtk/inspector/visual.ui.h:18
msgid "GL Rendering"
msgstr ""
msgstr "GL-gjengivelse"
#: ../gtk/inspector/visual.ui.h:19
msgid "When needed"
msgstr ""
msgstr "Når nødvendig"
#: ../gtk/inspector/visual.ui.h:20
msgid "Always"
@@ -3970,15 +3968,15 @@ msgstr "Slått av"
#: ../gtk/inspector/visual.ui.h:22
msgid "Software GL"
msgstr ""
msgstr "Programvare-GL"
#: ../gtk/inspector/visual.ui.h:23
msgid "Software Surfaces"
msgstr ""
msgstr "Programvareoverflater"
#: ../gtk/inspector/visual.ui.h:24
msgid "Texture Rectangle Extension"
msgstr ""
msgstr "Utvidelse for teksturrektangel"
#. vim: set et sw=2 ts=2:
#: ../gtk/inspector/window.ui.h:1
@@ -4013,18 +4011,16 @@ msgid "Signals"
msgstr "Signaler"
#: ../gtk/inspector/window.ui.h:10
#, fuzzy
msgid "Child Properties"
msgstr "E_genskaper"
msgstr "Egenskaper for underobjekt"
#: ../gtk/inspector/window.ui.h:11
msgid "Hierarchy"
msgstr "Hierarki"
#: ../gtk/inspector/window.ui.h:14
#, fuzzy
msgid "Style Properties"
msgstr "E_genskaper"
msgstr "Egenskaper for stil"
#: ../gtk/inspector/window.ui.h:15 ../gtk/inspector/window.ui.h:24
msgid "CSS"
@@ -4032,7 +4028,7 @@ msgstr "CSS"
#: ../gtk/inspector/window.ui.h:16
msgid "Size Groups"
msgstr ""
msgstr "Størrelsesgrupper"
#: ../gtk/inspector/window.ui.h:17
msgid "Data"
@@ -4044,7 +4040,7 @@ msgstr "Handlinger"
#: ../gtk/inspector/window.ui.h:20
msgid "Gestures"
msgstr ""
msgstr "Gester"
#: ../gtk/inspector/window.ui.h:21
msgid "Objects"
@@ -4060,7 +4056,7 @@ msgstr "Ressurser"
#: ../gtk/inspector/window.ui.h:25
msgid "Visual"
msgstr ""
msgstr "Synlig"
#: ../gtk/inspector/window.ui.h:26
#: ../gtk/resources/ui/gtkprintunixdialog.ui.h:24
@@ -4075,7 +4071,7 @@ msgstr "asme_f"
#: ../gtk/paper_names_offsets.c:5
msgctxt "paper size"
msgid "A0×2"
msgstr ""
msgstr "A0×2"
#: ../gtk/paper_names_offsets.c:6
msgctxt "paper size"
@@ -4085,7 +4081,7 @@ msgstr "A0"
#: ../gtk/paper_names_offsets.c:7
msgctxt "paper size"
msgid "A0×3"
msgstr ""
msgstr "A0×3"
#: ../gtk/paper_names_offsets.c:8
msgctxt "paper size"
@@ -4100,12 +4096,12 @@ msgstr "A10"
#: ../gtk/paper_names_offsets.c:10
msgctxt "paper size"
msgid "A1×3"
msgstr ""
msgstr "A1×3"
#: ../gtk/paper_names_offsets.c:11
msgctxt "paper size"
msgid "A1×4"
msgstr ""
msgstr "A1×4"
#: ../gtk/paper_names_offsets.c:12
msgctxt "paper size"
@@ -4115,17 +4111,17 @@ msgstr "A2"
#: ../gtk/paper_names_offsets.c:13
msgctxt "paper size"
msgid "A2×3"
msgstr ""
msgstr "A2×3"
#: ../gtk/paper_names_offsets.c:14
msgctxt "paper size"
msgid "A2×4"
msgstr ""
msgstr "A2×4"
#: ../gtk/paper_names_offsets.c:15
msgctxt "paper size"
msgid "A2×5"
msgstr ""
msgstr "A2×5"
#: ../gtk/paper_names_offsets.c:16
msgctxt "paper size"
@@ -4140,27 +4136,27 @@ msgstr "A3 ekstra"
#: ../gtk/paper_names_offsets.c:18
msgctxt "paper size"
msgid "A3×3"
msgstr ""
msgstr "A3×3"
#: ../gtk/paper_names_offsets.c:19
msgctxt "paper size"
msgid "A3×4"
msgstr ""
msgstr "A3×4"
#: ../gtk/paper_names_offsets.c:20
msgctxt "paper size"
msgid "A3×5"
msgstr ""
msgstr "A3×5"
#: ../gtk/paper_names_offsets.c:21
msgctxt "paper size"
msgid "A3×6"
msgstr ""
msgstr "A3×6"
#: ../gtk/paper_names_offsets.c:22
msgctxt "paper size"
msgid "A3×7"
msgstr ""
msgstr "A3×7"
#: ../gtk/paper_names_offsets.c:23
msgctxt "paper size"
@@ -4180,37 +4176,37 @@ msgstr "A4 tab"
#: ../gtk/paper_names_offsets.c:26
msgctxt "paper size"
msgid "A4×3"
msgstr ""
msgstr "A4×3"
#: ../gtk/paper_names_offsets.c:27
msgctxt "paper size"
msgid "A4×4"
msgstr ""
msgstr "A4×4"
#: ../gtk/paper_names_offsets.c:28
msgctxt "paper size"
msgid "A4×5"
msgstr ""
msgstr "A4×5"
#: ../gtk/paper_names_offsets.c:29
msgctxt "paper size"
msgid "A4×6"
msgstr ""
msgstr "A4×6"
#: ../gtk/paper_names_offsets.c:30
msgctxt "paper size"
msgid "A4×7"
msgstr ""
msgstr "A4×7"
#: ../gtk/paper_names_offsets.c:31
msgctxt "paper size"
msgid "A4×8"
msgstr ""
msgstr "A4×8"
#: ../gtk/paper_names_offsets.c:32
msgctxt "paper size"
msgid "A4×9"
msgstr ""
msgstr "A4×9"
#: ../gtk/paper_names_offsets.c:33
msgctxt "paper size"
@@ -4815,7 +4811,7 @@ msgstr "#9 konvolutt"
#: ../gtk/paper_names_offsets.c:153
msgctxt "paper size"
msgid "Oficio"
msgstr ""
msgstr "Oficio"
#: ../gtk/paper_names_offsets.c:154
msgctxt "paper size"
@@ -4845,7 +4841,7 @@ msgstr "Bredt format"
#: ../gtk/paper_names_offsets.c:159
msgctxt "paper size"
msgid "Photo L"
msgstr ""
msgstr "Photo L"
#: ../gtk/paper_names_offsets.c:160
msgctxt "paper size"