90
90
static void nameAppeared(GDBusConnection *connection, const gchar *name, const gchar *owner, gpointer user_data);
91
91
static void nameVanished(GDBusConnection *connection, const gchar *name, gpointer user_data);
92
static void menuItemInserted(GtkMenuTrackerItem *item, gint position, gpointer user_data);
93
static void menuItemRemoved(gint position, gpointer user_data);
92
static void menuItemInserted(GPtrArray *items, gint position, gpointer user_data);
93
static void menuItemRemoved(gint position, gint n_items, gpointer user_data);
94
94
static void menuItemChanged(GObject *object, GParamSpec *pspec, gpointer user_data);
96
96
static void registeredActionAdded(GtkSimpleActionObserver *observer_item,
250
250
priv->clearName();
253
void UnityMenuModelPrivate::menuItemInserted(GtkMenuTrackerItem *item, gint position, gpointer user_data)
253
void UnityMenuModelPrivate::menuItemInserted(GPtrArray *items, gint position, gpointer user_data)
255
255
UnityMenuModelPrivate *priv = (UnityMenuModelPrivate *)user_data;
257
UnityMenuModelAddRowEvent ummare(item, position);
257
UnityMenuModelAddRowEvent ummare(items, position);
258
258
QCoreApplication::sendEvent(priv->model, &ummare);
261
void UnityMenuModelPrivate::menuItemRemoved(gint position, gpointer user_data)
261
void UnityMenuModelPrivate::menuItemRemoved(gint position, gint n_items, gpointer user_data)
263
263
UnityMenuModelPrivate *priv = (UnityMenuModelPrivate *)user_data;
265
UnityMenuModelRemoveRowEvent ummrre(position);
265
UnityMenuModelRemoveRowEvent ummrre(position, n_items);
266
266
QCoreApplication::sendEvent(priv->model, &ummrre);
797
797
GSequenceIter *it;
798
798
it = g_sequence_get_iter_at_pos (priv->items, ummrce->position);
800
beginInsertRows(QModelIndex(), ummrce->position, ummrce->position);
800
beginInsertRows(QModelIndex(), ummrce->position, ummrce->position + ummrce->items->len - 1);
802
it = g_sequence_insert_before (it, g_object_ref (ummrce->item));
803
g_object_set_qdata (G_OBJECT (ummrce->item), unity_menu_model_quark (), this);
804
g_signal_connect (ummrce->item, "notify", G_CALLBACK (UnityMenuModelPrivate::menuItemChanged), it);
802
for (gint i = ummrce->items->len - 1; i >= 0; --i) {
803
GtkMenuTrackerItem *item = (GtkMenuTrackerItem*)g_ptr_array_index(ummrce->items, i);
804
it = g_sequence_insert_before (it, g_object_ref (item));
805
g_object_set_qdata (G_OBJECT (item), unity_menu_model_quark (), this);
806
g_signal_connect (item, "notify", G_CALLBACK (UnityMenuModelPrivate::menuItemChanged), it);
808
811
} else if (e->type() == UnityMenuModelRemoveRowEvent::eventType) {
809
812
UnityMenuModelRemoveRowEvent *ummrre = static_cast<UnityMenuModelRemoveRowEvent*>(e);
812
it = g_sequence_get_iter_at_pos (priv->items, ummrre->position);
813
if (!g_sequence_iter_is_end (it)) {
814
beginRemoveRows(QModelIndex(), ummrre->position, ummrre->position);
816
g_sequence_remove (it);
814
beginRemoveRows(QModelIndex(), ummrre->position, ummrre->position + ummrre->nItems - 1);
815
for (int i = 0; i < ummrre->nItems; ++i) {
816
GSequenceIter *it = g_sequence_get_iter_at_pos (priv->items, ummrre->position);
817
if (!g_sequence_iter_is_end (it)) {
818
g_sequence_remove (it);
821
824
} else if (e->type() == UnityMenuModelDataChangeEvent::eventType) {
822
825
UnityMenuModelDataChangeEvent *ummdce = static_cast<UnityMenuModelDataChangeEvent*>(e);