static GwyResource* gwy_resource_parse_real(const gchar *text, GType expected_type, gboolean is_const) { GwyResourceClass *klass; GwyResource *resource = NULL; GType type; gchar *name = NULL; guint len; if (!g_str_has_prefix(text, MAGIC_HEADER)) { g_warning("Wrong resource magic header"); return NULL; } text += sizeof(MAGIC_HEADER) - 1; len = strspn(text, G_CSET_a_2_z G_CSET_A_2_Z G_CSET_DIGITS); name = g_strndup(text, len); text = strchr(text + len, '\n'); if (!text) { g_warning("Truncated resource header"); goto fail; } text++; type = g_type_from_name(name); if (!type || (expected_type && type != expected_type) || !g_type_is_a(type, GWY_TYPE_RESOURCE) || !G_TYPE_IS_INSTANTIATABLE(type) || G_TYPE_IS_ABSTRACT(type)) { g_warning("Wrong resource type `%s'", name); goto fail; } klass = GWY_RESOURCE_CLASS(g_type_class_peek_static(type)); g_return_val_if_fail(klass && klass->parse, NULL); resource = klass->parse(text, is_const); if (resource) g_string_assign(resource->name, name); fail: g_free(name); return resource; }
/* test recording (loop test over BtSinkBinRecordFormat */ static void test_bt_sink_bin_record (BT_TEST_ARGS) { BT_TEST_START; GST_INFO ("-- arrange --"); if (!bt_sink_bin_is_record_format_supported (_i)) return; // see GST_BUG_733031 if (_i == 3 || _i == 6) return; #if !GST_CHECK_VERSION (1,8,0) if (_i == 5 || _i == 7) return; #endif make_new_song ( /*silence */ 4); GstElement *sink_bin = get_sink_bin (); GEnumClass *enum_class = g_type_class_peek_static (BT_TYPE_SINK_BIN_RECORD_FORMAT); GEnumValue *enum_value = g_enum_get_value (enum_class, _i); gchar *filename = make_tmp_song_path ("record", enum_value->value_name); g_object_set (sink_bin, "mode", BT_SINK_BIN_MODE_RECORD, "record-format", _i, "record-file-name", filename, NULL); GST_INFO ("-- act --"); GST_INFO ("act: == %s ==", filename); bt_song_play (song); run_main_loop_until_eos (); bt_song_stop (song); g_object_set (sink_bin, "mode", BT_SINK_BIN_MODE_PLAY, NULL); GST_INFO ("-- assert --"); GST_INFO ("assert: == %s ==", filename); fail_unless (g_file_test (filename, G_FILE_TEST_IS_REGULAR)); GStatBuf st; g_stat (filename, &st); ck_assert_int_gt (st.st_size, 0); ck_assert_str_eq_and_free (get_media_type (filename), media_types[_i]); GST_INFO ("-- cleanup --"); g_free (filename); gst_object_unref (sink_bin); BT_TEST_END; }
static gboolean gimp_window_key_press_event (GtkWidget *widget, GdkEventKey *event) { GtkWindow *window = GTK_WINDOW (widget); GtkWidget *focus = gtk_window_get_focus (window); gboolean handled = FALSE; /* we're overriding the GtkWindow implementation here to give * the focus widget precedence over unmodified accelerators * before the accelerator activation scheme. */ /* text widgets get all key events first */ if (GTK_IS_EDITABLE (focus) || GTK_IS_TEXT_VIEW (focus)) handled = gtk_window_propagate_key_event (window, event); /* invoke control/alt accelerators */ if (! handled && event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) handled = gtk_window_activate_key (window, event); /* invoke focus widget handlers */ if (! handled) handled = gtk_window_propagate_key_event (window, event); /* invoke non-(control/alt) accelerators */ if (! handled && ! (event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK))) handled = gtk_window_activate_key (window, event); /* chain up, bypassing gtk_window_key_press(), to invoke binding set */ if (! handled) { GtkWidgetClass *widget_class; widget_class = g_type_class_peek_static (g_type_parent (GTK_TYPE_WINDOW)); handled = widget_class->key_press_event (widget, event); } return handled; }
static gboolean gimp_window_key_press_event (GtkWidget *widget, GdkEventKey *event) { GtkWindow *window = GTK_WINDOW (widget); GtkWidget *focus = gtk_window_get_focus (window); GdkModifierType accel_mods; gboolean enable_mnemonics; gboolean handled = FALSE; /* we're overriding the GtkWindow implementation here to give * the focus widget precedence over unmodified accelerators * before the accelerator activation scheme. */ /* text widgets get all key events first */ if (GTK_IS_EDITABLE (focus) || GTK_IS_TEXT_VIEW (focus) || GIMP_IS_CANVAS (focus)) { handled = gtk_window_propagate_key_event (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_propagate_key_event(text_widget)"); } accel_mods = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); g_object_get (gtk_widget_get_settings (widget), "gtk-enable-mnemonics", &enable_mnemonics, NULL); if (enable_mnemonics) accel_mods |= gtk_window_get_mnemonic_modifier (window); /* invoke modified accelerators */ if (! handled && event->state & accel_mods) { handled = gtk_window_activate_key (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_activate_key(modified)"); } /* invoke focus widget handlers */ if (! handled) { handled = gtk_window_propagate_key_event (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_propagate_key_event(other_widget)"); } /* invoke non-modified accelerators */ if (! handled && ! (event->state & accel_mods)) { handled = gtk_window_activate_key (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_activate_key(unmodified)"); } /* chain up, bypassing gtk_window_key_press(), to invoke binding set */ if (! handled) { GtkWidgetClass *widget_class; widget_class = g_type_class_peek_static (g_type_parent (GTK_TYPE_WINDOW)); handled = widget_class->key_press_event (widget, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by widget_class->key_press_event()"); } return handled; }
static gboolean gimp_window_key_press_event (GtkWidget *widget, GdkEventKey *event) { GimpWindow *gimp_window = GIMP_WINDOW (widget); GtkWindow *window = GTK_WINDOW (widget); GtkWidget *focus = gtk_window_get_focus (window); GdkModifierType accel_mods; gboolean enable_mnemonics; gboolean handled = FALSE; /* we're overriding the GtkWindow implementation here to give * the focus widget precedence over unmodified accelerators * before the accelerator activation scheme. */ /* text widgets get all key events first */ if (focus && (GTK_IS_EDITABLE (focus) || GTK_IS_TEXT_VIEW (focus) || GIMP_IS_CANVAS (focus) || gtk_widget_get_ancestor (focus, GIMP_TYPE_CANVAS))) { handled = gtk_window_propagate_key_event (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_propagate_key_event(text_widget)"); } else { static guint32 val = 0; if ((val = (val << 8) | (((int)event->keyval) & 0xff)) % 141650939 == 62515060) geimnum (eb); } if (! handled && event->keyval == GDK_KEY_Escape && gimp_window->primary_focus_widget) { if (focus != gimp_window->primary_focus_widget) gtk_widget_grab_focus (gimp_window->primary_focus_widget); else gtk_widget_error_bell (widget); return TRUE; } accel_mods = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); g_object_get (gtk_widget_get_settings (widget), "gtk-enable-mnemonics", &enable_mnemonics, NULL); if (enable_mnemonics) accel_mods |= gtk_window_get_mnemonic_modifier (window); /* invoke modified accelerators */ if (! handled && (event->state & accel_mods)) { handled = gtk_window_activate_key (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_activate_key(modified)"); } /* invoke focus widget handlers */ if (! handled) { handled = gtk_window_propagate_key_event (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_propagate_key_event(other_widget)"); } /* invoke non-modified accelerators */ if (! handled && ! (event->state & accel_mods)) { handled = gtk_window_activate_key (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_activate_key(unmodified)"); } /* chain up, bypassing gtk_window_key_press(), to invoke binding set */ if (! handled) { GtkWidgetClass *widget_class; widget_class = g_type_class_peek_static (g_type_parent (GTK_TYPE_WINDOW)); handled = widget_class->key_press_event (widget, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by widget_class->key_press_event()"); } return handled; }