/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
- actions.h for the Openbox window manager
+ actions.c for the Openbox window manager
Copyright (c) 2007 Dana Jansens
This program is free software; you can redistribute it and/or modify
ObActionsDataFreeFunc free;
ObActionsRunFunc run;
ObActionsShutdownFunc shutdown;
+ gboolean modifies_focused_window;
};
struct _ObActionsAct {
return NULL;
}
- def = g_slice_new(ObActionsDefinition);
+ def = g_slice_new0(ObActionsDefinition);
def->ref = 1;
def->name = g_strdup(name);
def->free = free;
def->run = run;
def->shutdown = NULL;
+ def->modifies_focused_window = TRUE;
registered = g_slist_prepend(registered, def);
return def;
return FALSE;
}
+gboolean actions_set_modifies_focused_window(const gchar *name,
+ gboolean modifies)
+{
+ GSList *it;
+ ObActionsDefinition *def;
+
+ for (it = registered; it; it = g_slist_next(it)) {
+ def = it->data;
+ if (!g_ascii_strcasecmp(name, def->name)) {
+ def->modifies_focused_window = modifies;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
static void actions_definition_ref(ObActionsDefinition *def)
{
++def->ref;
if (!act->def->run(&data, act->options)) {
if (actions_act_is_interactive(act))
actions_interactive_end_act();
- if (client && client == focus_client)
+ if (client && client == focus_client &&
+ act->def->modifies_focused_window)
+ {
update_user_time = TRUE;
+ }
} else {
/* make sure its interactive if it returned TRUE */
g_assert(act->i_input);
interactive_act = act;
actions_act_ref(interactive_act);
- interactive_initial_state = obt_keyboard_only_modmasks(state);
+ interactive_initial_state = state;
/* if using focus_delay, stop the timer now so that focus doesn't go
moving on us, which would kill the action */
ob_debug_type(OB_DEBUG_FOCUS,
"Generating fake leave because we did a "
"mouse-event action");
- event_enter_client(data->client);
+ event_leave_client(data->client);
}
}
}