diff options
| author | Stelios Tsampas <loathingkernel@gmail.com> | 2017-07-18 23:23:47 +0300 |
|---|---|---|
| committer | Stelios Tsampas <loathingkernel@gmail.com> | 2017-07-19 10:38:24 +0300 |
| commit | b6129143f75cf4480883e467d52627de949466fb (patch) | |
| tree | ef0717711d2b5c37dceb961061fe434afdd7c18a /plugins/dfinput | |
| parent | 966a413dda34bf31826ee1eab4d5a722a36087d6 (diff) | |
* Add setting to disable physical gamepad vibration.
Diffstat (limited to 'plugins/dfinput')
| -rwxr-xr-x | plugins/dfinput/cfg-gtk.c | 25 | ||||
| -rwxr-xr-x | plugins/dfinput/cfg.c | 5 | ||||
| -rw-r--r-- | plugins/dfinput/dfinput.ui | 87 | ||||
| -rwxr-xr-x | plugins/dfinput/pad.h | 1 | ||||
| -rwxr-xr-x | plugins/dfinput/sdljoy.c | 2 |
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); |
