@@ -120,25 +120,39 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
120120 switch (keycode)
121121 {
122122 case PROJECTM_K_HOME:
123- if (renderer->showmenu ) { // pageup only does something when the preset menu is active.
124- selectPreset (0 ); // jump to top of presets.
123+ if (renderer->showmenu ) {
124+ if (!isTextInputActive ()) {
125+ selectPreset (0 ); // jump to top of presets.
126+ }
127+ else {
128+ renderer->m_activePresetID = 1 ; // jump to top of search results.
129+ selectPresetByName (renderer->m_presetList [0 ].name ,true );
130+ }
125131 }
126132 break ;
127133 case PROJECTM_K_END:
128- if (renderer->showmenu ) { // pageup only does something when the preset menu is active.
129- selectPreset (m_presetLoader->size () - 1 ); // jump to bottom of presets.
134+ if (renderer->showmenu ) {
135+ if (!isTextInputActive ()) {
136+ selectPreset (m_presetLoader->size () - 1 ); // jump to bottom of presets.
137+ }
138+ else {
139+ renderer->m_activePresetID = renderer->m_presetList .size (); // jump to top of search results.
140+ selectPresetByName (renderer->m_presetList [renderer->m_activePresetID - 1 ].name ,true );
141+ }
130142 }
131143 break ;
132144 case PROJECTM_K_PAGEUP:
133- if (renderer->showmenu ) { // pageup only does something when the preset menu is active.
145+ if (isTextInputActive ()) break ; // don't handle this key if search menu is up.
146+ if (renderer->showmenu ) {
134147 int upPreset = m_presetPos->lastIndex () - (renderer->textMenuPageSize / 2 .0f ); // jump up by page size / 2
135148 if (upPreset < 0 ) // handle lower boundary
136149 upPreset = m_presetLoader->size () - 1 ;
137150 selectPreset (upPreset); // jump up menu half a page.
138151 }
139152 break ;
140153 case PROJECTM_K_PAGEDOWN:
141- if (renderer->showmenu ) { // pagedown only does something when the preset menu is active.
154+ if (isTextInputActive ()) break ; // don't handle this key if search menu is up.
155+ if (renderer->showmenu ) {
142156 int downPreset = m_presetPos->lastIndex () + (renderer->textMenuPageSize / 2 .0f ); // jump down by page size / 2
143157 if (downPreset >= (m_presetLoader->size () - 1 )) // handle upper boundary
144158 downPreset = 0 ;
@@ -166,15 +180,19 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
166180 }
167181 break ;
168182 case PROJECTM_K_h:
183+ if (isTextInputActive (true )) break ; // disable when searching.
169184 renderer->showhelp = !renderer->showhelp ;
170185 renderer->showstats = false ;
171186 renderer->showmenu = false ;
187+ break ;
172188 case PROJECTM_K_F1:
189+ if (isTextInputActive (true )) break ; // disable when searching.
173190 renderer->showhelp = !renderer->showhelp ;
174191 renderer->showstats = false ;
175192 renderer->showmenu = false ;
176193 break ;
177194 case PROJECTM_K_y:
195+ if (isTextInputActive (true )) break ; // disable when searching.
178196 this ->setShuffleEnabled (!this ->isShuffleEnabled ());
179197 if (this ->isShuffleEnabled ()) {
180198 renderer->setToastMessage (" Shuffle Enabled" );
@@ -183,8 +201,8 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
183201 renderer->setToastMessage (" Shuffle Disabled" );
184202 }
185203 break ;
186-
187204 case PROJECTM_K_F5:
205+ if (isTextInputActive (true )) break ; // disable when searching.
188206 renderer->showfps = !renderer->showfps ;
189207 // Initialize counters and reset frame count.
190208 renderer->lastTimeFPS = duration_cast<milliseconds>(system_clock::now ().time_since_epoch ());
@@ -197,13 +215,15 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
197215 }
198216 break ;
199217 case PROJECTM_K_F4:
218+ if (isTextInputActive (true )) break ; // disable when searching.
200219 renderer->showstats = !renderer->showstats ;
201220 if (renderer->showstats ) {
202221 renderer->showhelp = false ;
203222 renderer->showmenu = false ;
204223 }
205224 break ;
206225 case PROJECTM_K_F3: {
226+ if (isTextInputActive (true )) break ; // disable when searching.
207227 renderer->showpreset = !renderer->showpreset ;
208228 // Hide FPS from screen and replace it with preset name.
209229 if (renderer->showpreset )
@@ -225,7 +245,9 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
225245 break ;
226246
227247 case PROJECTM_K_ESCAPE: {
228- // exit( 1 );
248+ renderer->showsearch = false ; // hide input menu
249+ setShuffleEnabled (renderer->shuffletrack ); // restore shuffle
250+ renderer->showmenu = false ; // hide input
229251 break ;
230252 }
231253 case PROJECTM_K_f:
@@ -238,6 +260,7 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
238260 break ;
239261 case PROJECTM_K_H:
240262 case PROJECTM_K_m:
263+ if (isTextInputActive (true )) break ; // disable when searching.
241264 renderer->showmenu = !renderer->showmenu ;
242265 if (renderer->showmenu ) {
243266 renderer->showhelp = false ;
@@ -246,53 +269,71 @@ void projectM::default_key_handler( projectMEvent event, projectMKeycode keycode
246269 }
247270 break ;
248271 case PROJECTM_K_M:
272+ if (isTextInputActive (true )) break ; // disable when searching.
249273 renderer->showmenu = !renderer->showmenu ;
250274 if (renderer->showmenu )
251275 {
252- renderer->showhelp = false ;
253- renderer->showstats = false ;
276+ renderer->showhelp = false ;
277+ renderer->showstats = false ;
254278 populatePresetMenu ();
255279 }
256- break ;
280+ break ;
257281 case PROJECTM_K_n:
258- selectNext (true );
259- break ;
282+ if (isTextInputActive (true )) break ; // disable when searching.
283+ selectNext (true );
284+ break ;
260285 case PROJECTM_K_N:
261- selectNext (false );
262- break ;
286+ if (isTextInputActive (true )) break ; // disable when searching.
287+ selectNext (false );
288+ break ;
263289 case PROJECTM_K_r:
264- selectRandom (true );
265- break ;
290+ if (isTextInputActive (true )) break ; // disable when searching.
291+ selectRandom (true );
292+ break ;
266293 case PROJECTM_K_R:
267- selectRandom (false );
268- break ;
294+ if (isTextInputActive (true )) break ; // disable when searching.
295+ selectRandom (false );
296+ break ;
269297 case PROJECTM_K_p:
270- selectPrevious (true );
271- break ;
298+ selectPrevious (true );
299+ break ;
272300 case PROJECTM_K_P:
273301 case PROJECTM_K_BACKSPACE:
274- selectPrevious (false );
275- break ;
302+ selectPrevious (false );
303+ break ;
276304 case PROJECTM_K_l:
277- setPresetLock (!isPresetLocked ());
278- break ;
305+ if (isTextInputActive (true )) break ; // disable when searching.
306+ setPresetLock (!isPresetLocked ());
307+ break ;
279308 case PROJECTM_K_s:
280- renderer->studio = !renderer->studio ;
309+ renderer->studio = !renderer->studio ;
281310 case PROJECTM_K_i:
282311 break ;
283- case PROJECTM_K_z:
284- break ;
312+ case PROJECTM_K_RETURN:
313+ renderer->toggleSearchText ();
314+ if (renderer->showsearch ) {
315+ renderer->shuffletrack = this ->isShuffleEnabled (); // track previous shuffle state.
316+ setShuffleEnabled (false ); // disable shuffle
317+ renderer->showhelp = false ;
318+ renderer->showstats = false ;
319+ renderer->showmenu = true ;
320+ populatePresetMenu ();
321+ } else {
322+ setShuffleEnabled (renderer->shuffletrack ); // restore shuffle
323+ renderer->showmenu = false ;
324+ }
325+ break ;
285326 case PROJECTM_K_0:
286- // nWaveMode=0;
287- break ;
327+ // nWaveMode=0;
328+ break ;
288329 case PROJECTM_K_6:
289- // nWaveMode=6;
290- break ;
330+ // nWaveMode=6;
331+ break ;
291332 case PROJECTM_K_7:
292- // nWaveMode=7;
293- break ;
333+ // nWaveMode=7;
334+ break ;
294335 case PROJECTM_K_t:
295- break ;
336+ break ;
296337 case PROJECTM_K_EQUALS:
297338 case PROJECTM_K_PLUS:
298339
0 commit comments