summaryrefslogtreecommitdiff
path: root/plugins/dfinput
diff options
context:
space:
mode:
authorStelios Tsampas <loathingkernel@gmail.com>2017-07-18 23:23:47 +0300
committerStelios Tsampas <loathingkernel@gmail.com>2017-07-19 10:38:24 +0300
commitb6129143f75cf4480883e467d52627de949466fb (patch)
treeef0717711d2b5c37dceb961061fe434afdd7c18a /plugins/dfinput
parent966a413dda34bf31826ee1eab4d5a722a36087d6 (diff)
* Add setting to disable physical gamepad vibration.
Diffstat (limited to 'plugins/dfinput')
-rwxr-xr-xplugins/dfinput/cfg-gtk.c25
-rwxr-xr-xplugins/dfinput/cfg.c5
-rw-r--r--plugins/dfinput/dfinput.ui87
-rwxr-xr-xplugins/dfinput/pad.h1
-rwxr-xr-xplugins/dfinput/sdljoy.c2
5 files changed, 97 insertions, 23 deletions
diff --git a/plugins/dfinput/cfg-gtk.c b/plugins/dfinput/cfg-gtk.c
index 61218cea..6d053af7 100755
--- a/plugins/dfinput/cfg-gtk.c
+++ b/plugins/dfinput/cfg-gtk.c
@@ -326,6 +326,7 @@ static void OnDeviceChanged(GtkWidget *widget, gpointer user_data) {
static void OnTypeChanged(GtkWidget *widget, gpointer user_data) {
uint n = GPOINTER_TO_UINT(user_data), current = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
+ char checkbtn[9];
int padTypeList[] = {
PSE_PAD_TYPE_STANDARD,
@@ -335,6 +336,10 @@ static void OnTypeChanged(GtkWidget *widget, gpointer user_data) {
g.cfg.PadDef[n].Type = padTypeList[current];
+ snprintf(checkbtn, sizeof(checkbtn), "checkpv%d", n+1);
+ gtk_widget_set_sensitive(GTK_WIDGET(
+ gtk_builder_get_object(xml, checkbtn)), (g.cfg.PadDef[n].Type == PSE_PAD_TYPE_ANALOGPAD));
+
UpdateKeyList();
}
@@ -350,6 +355,14 @@ static void OnVisualVibration2Toggled(GtkWidget *widget, gpointer user_data) {
g.cfg.PadDef[1].VisualVibration = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
}
+static void OnPhysicalVibration1Toggled(GtkWidget *widget, gpointer user_data) {
+ g.cfg.PadDef[0].PhysicalVibration = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+}
+
+static void OnPhysicalVibration2Toggled(GtkWidget *widget, gpointer user_data) {
+ g.cfg.PadDef[1].PhysicalVibration = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
+}
+
static void OnHideCursorToggled(GtkWidget *widget, gpointer user_data) {
(void)user_data; // unused
g.cfg.HideCursor = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
@@ -747,12 +760,14 @@ long PADconfigure() {
widget = GTK_WIDGET(gtk_builder_get_object(xml, "combotype1"));
gtk_combo_box_set_active(GTK_COMBO_BOX(widget),
padTypeList[g.cfg.PadDef[0].Type]);
+ OnTypeChanged(widget, GUINT_TO_POINTER(0u));
g_signal_connect_data(G_OBJECT(widget), "changed",
G_CALLBACK(OnTypeChanged), GUINT_TO_POINTER(0u), NULL, G_CONNECT_AFTER);
widget = GTK_WIDGET(gtk_builder_get_object(xml, "combotype2"));
gtk_combo_box_set_active(GTK_COMBO_BOX(widget),
padTypeList[g.cfg.PadDef[1].Type]);
+ OnTypeChanged(widget, GUINT_TO_POINTER(1u));
g_signal_connect_data(G_OBJECT(widget), "changed",
G_CALLBACK(OnTypeChanged), GUINT_TO_POINTER(1u), NULL, G_CONNECT_AFTER);
@@ -766,6 +781,16 @@ long PADconfigure() {
g_signal_connect_data(G_OBJECT(widget), "toggled",
G_CALLBACK(OnVisualVibration2Toggled), NULL, NULL, G_CONNECT_AFTER);
+ widget = GTK_WIDGET(gtk_builder_get_object(xml, "checkpv1"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), g.cfg.PadDef[0].PhysicalVibration);
+ g_signal_connect_data(G_OBJECT(widget), "toggled",
+ G_CALLBACK(OnPhysicalVibration1Toggled), NULL, NULL, G_CONNECT_AFTER);
+
+ widget = GTK_WIDGET(gtk_builder_get_object(xml, "checkpv2"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), g.cfg.PadDef[1].PhysicalVibration);
+ g_signal_connect_data(G_OBJECT(widget), "toggled",
+ G_CALLBACK(OnPhysicalVibration2Toggled), NULL, NULL, G_CONNECT_AFTER);
+
widget = GTK_WIDGET(gtk_builder_get_object(xml, widgetname_change[1]));
gtk_widget_set_sensitive(widget, FALSE);
g_signal_connect_data(G_OBJECT(widget), "clicked",
diff --git a/plugins/dfinput/cfg.c b/plugins/dfinput/cfg.c
index f1d16673..622c3c34 100755
--- a/plugins/dfinput/cfg.c
+++ b/plugins/dfinput/cfg.c
@@ -37,6 +37,8 @@ static void SetDefaultConfig() {
g.cfg.PadDef[0].VisualVibration = 0;
g.cfg.PadDef[1].VisualVibration = 0;
+ g.cfg.PadDef[0].PhysicalVibration = 1;
+ g.cfg.PadDef[1].PhysicalVibration = 1;
// Pad1 keyboard
g.cfg.PadDef[0].KeyDef[DKEY_SELECT].Key = XK_c;
@@ -164,6 +166,8 @@ void LoadPADConfig() {
g.cfg.PadDef[current].Type = atoi(&buf[5]);
} else if (strncmp(buf, "VisualVibration=", 16) == 0) {
g.cfg.PadDef[current].VisualVibration = atoi(&buf[16]);
+ } else if (strncmp(buf, "PhysicalVibration=", 18) == 0) {
+ g.cfg.PadDef[current].PhysicalVibration = atoi(&buf[18]);
} else if (strncmp(buf, "EmuDev=", 7) == 0) {
g.cfg.E.DevNum = atoi(&buf[5]);
} else if (strncmp(buf, "EMU_FASTFORWARDS=", 17) == 0) {
@@ -362,6 +366,7 @@ void SavePADConfig() {
fprintf(fp, "DevNum=%d\n", g.cfg.PadDef[i].DevNum);
fprintf(fp, "Type=%d\n", g.cfg.PadDef[i].Type);
fprintf(fp, "VisualVibration=%d\n", g.cfg.PadDef[i].VisualVibration);
+ fprintf(fp, "PhysicalVibration=%d\n", g.cfg.PadDef[i].PhysicalVibration);
fprintf(fp, "Select=%d,%d,%d\n", g.cfg.PadDef[i].KeyDef[DKEY_SELECT].Key,
g.cfg.PadDef[i].KeyDef[DKEY_SELECT].JoyEvType, g.cfg.PadDef[i].KeyDef[DKEY_SELECT].J.d);
diff --git a/plugins/dfinput/dfinput.ui b/plugins/dfinput/dfinput.ui
index f189d8b3..2d291e22 100644
--- a/plugins/dfinput/dfinput.ui
+++ b/plugins/dfinput/dfinput.ui
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.19.0 -->
+<!-- Generated with glade 3.20.0 -->
<interface>
- <requires lib="gtk+" version="3.0"/>
+ <requires lib="gtk+" version="3.14"/>
<object class="GtkListStore" id="liststore1">
<columns>
<!-- column-name item -->
@@ -65,7 +65,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Device:</property>
- <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -87,7 +86,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Type:</property>
- <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -119,13 +117,37 @@
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="checkvv1">
- <property name="label" translatable="yes">Visual vibration</property>
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="checkvv1">
+ <property name="label" translatable="yes">Visual vibration</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="checkpv1">
+ <property name="label" translatable="yes">Physical vibration</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -286,7 +308,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Device:</property>
- <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -308,7 +329,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Type:</property>
- <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -340,13 +360,37 @@
</packing>
</child>
<child>
- <object class="GtkCheckButton" id="checkvv2">
- <property name="label" translatable="yes">Visual vibration</property>
+ <object class="GtkBox">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="xalign">0</property>
- <property name="draw_indicator">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkCheckButton" id="checkvv2">
+ <property name="label" translatable="yes">Visual vibration</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="checkpv2">
+ <property name="label" translatable="yes">Physical vibration</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">False</property>
+ <property name="draw_indicator">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
@@ -511,7 +555,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Device:</property>
- <property name="xalign">0</property>
</object>
<packing>
<property name="left_attach">0</property>
@@ -687,7 +730,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -702,7 +744,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -717,7 +758,6 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
- <property name="xalign">0</property>
<property name="draw_indicator">True</property>
</object>
<packing>
@@ -775,5 +815,8 @@
</child>
</object>
</child>
+ <child type="titlebar">
+ <placeholder/>
+ </child>
</object>
</interface>
diff --git a/plugins/dfinput/pad.h b/plugins/dfinput/pad.h
index 7cd8eefe..3051e6ad 100755
--- a/plugins/dfinput/pad.h
+++ b/plugins/dfinput/pad.h
@@ -158,6 +158,7 @@ typedef struct tagPadDef {
int8_t DevNum;
uint16_t Type;
uint8_t VisualVibration;
+ uint8_t PhysicalVibration;
KEYDEF KeyDef[DKEY_TOTAL];
KEYDEF AnalogDef[ANALOG_TOTAL][4];
#if SDL_VERSION_ATLEAST(2,0,0)
diff --git a/plugins/dfinput/sdljoy.c b/plugins/dfinput/sdljoy.c
index ee139517..d9bc23a3 100755
--- a/plugins/dfinput/sdljoy.c
+++ b/plugins/dfinput/sdljoy.c
@@ -64,7 +64,7 @@ int JoyHapticRumble(int pad, uint32_t low, uint32_t high)
#if SDL_VERSION_ATLEAST(2,0,0)
float mag;
- if (g.PadState[pad].haptic) {
+ if (g.PadState[pad].haptic && g.cfg.PadDef[pad].PhysicalVibration) {
/* Stop the effect if it was playing. */
SDL_HapticRumbleStop(g.PadState[pad].haptic);