int switcherSetMode(SwitcherMode mode) { if (switcherConnect == IO_OBJECT_NULL) return 0; switch (mode) { case modeForceIntegrated: case modeForceDiscrete: // Disable dynamic switching setDynamicSwitchingEnabled(switcherConnect, 0); // Disable Policy, otherwise gpu switches to Discrete after a bad app closes setFeatureInfo(switcherConnect, Policy, 0); setSwitchPolicy(switcherConnect, 0); // Hold up a sec! sleep(1); BOOL integrated = isUsingIntegrated(); if ((mode==modeForceIntegrated && !integrated) || (mode==modeForceDiscrete && integrated)) forceSwitch(switcherConnect); break; case modeDynamicSwitching: // Set switch policy back, make the MBP think it's an auto switching one once again setFeatureInfo(switcherConnect, Policy, 1); setSwitchPolicy(switcherConnect, 1); // Enable dynamic switching setDynamicSwitchingEnabled(switcherConnect, 1); break; case modeToggleGPU: forceSwitch(switcherConnect); break; } return 1; }
//------------------------------------------------------------------------------------------------ void Window::addOptionsTab() { QWidget * w = new QWidget; switchType = new QComboBox; switchType->addItem(tr("auto switching")); switchType->addItem(tr("upper gateway in list is more preferrable")); switchType->addItem(tr("use any available gateway")); switchType->addItem(tr("do not use gateway")); connect(switchType, SIGNAL(currentIndexChanged(int)), this, SLOT(switchTypeChanged(int))); pingHostEdit = new QLineEdit(GOOGLE_DNS); pingHostEdit->setValidator(new IP4Validator(this)); connect(pingHostEdit, SIGNAL(textEdited(const QString &)), this, SLOT(pingHostEdited(const QString &))); QFormLayout *fl = new QFormLayout; fl->addRow(tr("Switching method:"), switchType); fl->addRow(tr("IP address to ping:"), pingHostEdit); pingTimeout = new QSpinBox; pingTimeout->setMinimum(1); pingTimeout->setMaximum(1000); pingTimeout->setSuffix(tr(" ms.")); pingTimeout->setMaximumWidth(70); connect(pingTimeout, SIGNAL(valueChanged(int)), this, SLOT(spinChanged(int))); fl->addRow(tr("Maximum of ping timeout:"), pingTimeout); connTimeout = new QSpinBox; connTimeout->setMinimum(5); connTimeout->setSuffix(tr(" sec.")); connTimeout->setMaximumWidth(70); connect(connTimeout, SIGNAL(valueChanged(int)), this, SLOT(spinChanged(int))); fl->addRow(tr("Switch if connection timeout is:"), connTimeout); prioTimeout = new QSpinBox; prioTimeout->setMinimum(1); prioTimeout->setSuffix(tr(" min.")); prioTimeout->setMaximumWidth(70); connect(prioTimeout, SIGNAL(valueChanged(int)), this, SLOT(spinChanged(int))); QHBoxLayout * hl = new QHBoxLayout; forceSwitchButton = new QPushButton(QIcon(":/images/arrow-circle-double.png"),""); forceSwitchButton->setToolTip(tr("Force switching right now")); forceSwitchButton->setMaximumWidth(30); forceSwitchButton->setAutoDefault(false); forceSwitchButton->setFocusPolicy(Qt::NoFocus); connect(forceSwitchButton, SIGNAL(clicked()), this, SLOT(forceSwitch())); hl->addWidget(prioTimeout); hl->addWidget(forceSwitchButton); fl->addRow(tr("Priority switching after:"), hl); runOnStartup = new QCheckBox; #ifdef Q_OS_WIN fl->addRow(tr("Run program on system startup:"), runOnStartup); #endif connect(runOnStartup, SIGNAL(stateChanged(int)), this, SLOT(startupChecked(int))); showBalloons = new QCheckBox; connect(showBalloons, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); fl->addRow(tr("Show balloons:"), showBalloons); askOnQuit = new QCheckBox; connect(askOnQuit, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); fl->addRow(tr("Ask on quit:"), askOnQuit); writeGwOnExit = new QCheckBox; connect(writeGwOnExit, SIGNAL(stateChanged(int)), this, SLOT(checkboxChanged(int))); #ifdef Q_OS_WIN fl->addRow(tr("Write gateway to registry on exit:"), writeGwOnExit); #endif QVBoxLayout *vl = new QVBoxLayout; vl->addLayout(fl); vl->addSpacing(15); gwInfo = new QLabel; vl->addWidget(gwInfo); w->setLayout(vl); tabs->addTab(w, QIcon(":/images/wrench.png"), tr("Options")); }