DatabaseIO::DatabaseIO(Region *region, std::string filename, DatabaseUsage db_usage, MPI_Comm communicator, const PropertyManager &props) : properties(props), commonSideTopology(nullptr), DBFilename(std::move(filename)), dbState(STATE_INVALID), isParallel(false), myProcessor(0), cycleCount(0), overlayCount(0), timeScaleFactor(1.0), splitType(SPLIT_BY_TOPOLOGIES), dbUsage(db_usage), dbIntSizeAPI(USE_INT32_API), lowerCaseVariableNames(true), util_(communicator), region_(region), isInput(is_input_event(db_usage)), isParallelConsistent(true), singleProcOnly(db_usage == WRITE_HISTORY || db_usage == WRITE_HEARTBEAT || SerializeIO::isEnabled()), doLogging(false), useGenericCanonicalName(false) { isParallel = util_.parallel_size() > 1; myProcessor = util_.parallel_rank(); // Check environment variable IOSS_PROPERTIES. If it exists, parse // the contents and add to the 'properties' map. std::string env_props; if (util_.get_environment("IOSS_PROPERTIES", env_props, isParallel)) { // env_props string should be of the form // "PROP1=VALUE1:PROP2=VALUE2:..." std::vector<std::string> prop_val = tokenize(env_props, ":"); for (auto &elem : prop_val) { std::vector<std::string> property = tokenize(elem, "="); if (property.size() != 2) { std::ostringstream errmsg; errmsg << "ERROR: Invalid property specification found in " "IOSS_PROPERTIES environment variable\n" << " Found '" << elem << "' which is not of the correct PROPERTY=VALUE form"; IOSS_ERROR(errmsg); } std::string prop = Utils::uppercase(property[0]); std::string value = property[1]; std::string up_value = Utils::uppercase(value); bool all_digit = value.find_first_not_of("0123456789") == std::string::npos; if (myProcessor == 0) { std::cerr << "IOSS: Adding property '" << prop << "' with value '" << value << "'\n"; } if (all_digit) { int int_value = std::strtol(value.c_str(), nullptr, 10); properties.add(Property(prop, int_value)); } else if (up_value == "TRUE" || up_value == "YES") { properties.add(Property(prop, 1)); } else if (up_value == "FALSE" || up_value == "NO") { properties.add(Property(prop, 0)); } else { properties.add(Property(prop, value)); } } } if (properties.exists("INTEGER_SIZE_API")) { int isize = properties.get("INTEGER_SIZE_API").get_int(); if (isize == 8) { set_int_byte_size_api(Ioss::USE_INT64_API); } } { bool logging; if (Utils::check_set_bool_property(properties, "LOGGING", logging)) { set_logging(logging); } } Utils::check_set_bool_property(properties, "LOWER_CASE_VARIABLE_NAMES", lowerCaseVariableNames); Utils::check_set_bool_property(properties, "USE_GENERIC_CANONICAL_NAMES", useGenericCanonicalName); { bool consistent; if (Utils::check_set_bool_property(properties, "PARALLEL_CONSISTENCY", consistent)) { set_parallel_consistency(consistent); } } if (!is_input()) { // Create full path to the output file at this point if it doesn't // exist... create_path(DBFilename); } }
static gboolean maybe_redirect_mouse_event (XEvent *xevent) { GdkDisplay *gdisplay; GdkDeviceManager *gmanager; GdkDevice *gdevice; MetaUI *ui; GdkEvent *gevent; GdkWindow *gdk_window; Window window; XIEvent *xev; XIDeviceEvent *xev_d = NULL; XIEnterEvent *xev_e = NULL; if (!is_input_event (xevent)) return FALSE; xev = (XIEvent *) xevent->xcookie.data; switch (xev->evtype) { case XI_TouchBegin: case XI_ButtonPress: case XI_ButtonRelease: case XI_Motion: xev_d = (XIDeviceEvent *) xev; window = xev_d->event; break; case XI_Enter: case XI_Leave: xev_e = (XIEnterEvent *) xev; window = xev_e->event; break; default: return FALSE; } gdisplay = gdk_x11_lookup_xdisplay (xev->display); ui = g_object_get_data (G_OBJECT (gdisplay), "meta-ui"); if (!ui) return FALSE; gdk_window = gdk_x11_window_lookup_for_display (gdisplay, window); if (gdk_window == NULL) return FALSE; gmanager = gdk_display_get_device_manager (gdisplay); gdevice = gdk_x11_device_manager_lookup (gmanager, META_VIRTUAL_CORE_POINTER_ID); /* If GDK already thinks it has a grab, we better let it see events; this * is the menu-navigation case and events need to get sent to the appropriate * (client-side) subwindow for individual menu items. */ if (gdk_display_device_is_grabbed (gdisplay, gdevice)) return FALSE; switch (xev->evtype) { case XI_TouchBegin: case XI_ButtonPress: case XI_ButtonRelease: if (xev_d->evtype == XI_ButtonPress || xev_d->evtype == XI_TouchBegin) { GtkSettings *settings = gtk_settings_get_default (); int double_click_time; int double_click_distance; int button; g_object_get (settings, "gtk-double-click-time", &double_click_time, "gtk-double-click-distance", &double_click_distance, NULL); if (xev->evtype == XI_TouchBegin) button = 1; else button = xev_d->detail; if (button == ui->button_click_number && xev_d->event == ui->button_click_window && xev_d->time < ui->button_click_time + double_click_time && ABS (xev_d->event_x - ui->button_click_x) <= double_click_distance && ABS (xev_d->event_y - ui->button_click_y) <= double_click_distance) { gevent = gdk_event_new (GDK_2BUTTON_PRESS); ui->button_click_number = 0; } else { gevent = gdk_event_new (GDK_BUTTON_PRESS); ui->button_click_number = button; ui->button_click_window = xev_d->event; ui->button_click_time = xev_d->time; ui->button_click_x = xev_d->event_x; ui->button_click_y = xev_d->event_y; } gevent->button.button = button; } else { gevent = gdk_event_new (GDK_BUTTON_RELEASE); gevent->button.button = xev_d->detail; } gevent->button.window = g_object_ref (gdk_window); gevent->button.time = xev_d->time; gevent->button.x = xev_d->event_x; gevent->button.y = xev_d->event_y; gevent->button.x_root = xev_d->root_x; gevent->button.y_root = xev_d->root_y; break; case XI_Motion: gevent = gdk_event_new (GDK_MOTION_NOTIFY); gevent->motion.type = GDK_MOTION_NOTIFY; gevent->motion.window = g_object_ref (gdk_window); break; case XI_Enter: case XI_Leave: gevent = gdk_event_new (xev_e->evtype == XI_Enter ? GDK_ENTER_NOTIFY : GDK_LEAVE_NOTIFY); gevent->crossing.window = g_object_ref (gdk_window); gevent->crossing.x = xev_e->event_x; gevent->crossing.y = xev_e->event_y; break; default: g_assert_not_reached (); break; } /* If we've gotten here, we've created the gdk_event and should send it on */ gdk_event_set_device (gevent, gdevice); gtk_main_do_event (gevent); gdk_event_free (gevent); return TRUE; }