~ubuntu-branches/ubuntu/utopic/qmenumodel/utopic-proposed

« back to all changes in this revision

Viewing changes to libqmenumodel/src/unitymenumodel.cpp

  • Committer: Package Import Robot
  • Author(s): Ubuntu daily release, Gustavo Pichorim Boiko, Nick Dedekind, Ubuntu daily release
  • Date: 2013-10-16 02:33:27 UTC
  • mfrom: (1.1.12)
  • Revision ID: package-import@ubuntu.com-20131016023327-gih4pnobqi2qoevc
Tags: 0.2.7+13.10.20131016-0ubuntu1
[ Gustavo Pichorim Boiko ]
* Use g_file_get_uri instead of g_file_get_path to make sure the URI's
  percent encoding is properly kept.

[ Nick Dedekind ]
* Added pointer checks for items/iterators. (lp#1239394). (LP:
  #1239394)

[ Ubuntu daily release ]
* Automatic snapshot from revision 95

Show diffs side-by-side

added added

removed removed

Lines of Context:
370
370
        if (g_file_is_native (file)) {
371
371
            gchar *fileuri;
372
372
 
373
 
            fileuri = g_file_get_path (file);
 
373
            fileuri = g_file_get_uri (file);
374
374
            uri = QString(fileuri);
375
375
 
376
376
            g_free (fileuri);
395
395
 
396
396
QVariant UnityMenuModel::data(const QModelIndex &index, int role) const
397
397
{
 
398
    GSequenceIter *it;
398
399
    GtkMenuTrackerItem *item;
399
400
 
400
 
    item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index.row()));
 
401
    it = g_sequence_get_iter_at_pos (priv->items, index.row());
 
402
    if (g_sequence_iter_is_end (it)) {
 
403
        return QVariant();
 
404
    }
 
405
 
 
406
    item = (GtkMenuTrackerItem *) g_sequence_get (it);
 
407
    if (!item) {
 
408
        return QVariant();
 
409
    }
401
410
 
402
411
    switch (role) {
403
412
        case LabelRole:
497
506
    UnityMenuModel *model;
498
507
 
499
508
    it = g_sequence_get_iter_at_pos (priv->items, position);
500
 
    if (g_sequence_iter_is_end (it))
 
509
    if (g_sequence_iter_is_end (it)) {
501
510
        return NULL;
 
511
    }
502
512
 
503
513
    item = (GtkMenuTrackerItem *) g_sequence_get (it);
504
 
    if (!gtk_menu_tracker_item_get_has_submenu (item))
 
514
    if (!item || !gtk_menu_tracker_item_get_has_submenu (item)) {
505
515
        return NULL;
 
516
    }
506
517
 
507
518
    model = (UnityMenuModel *) g_object_get_qdata (G_OBJECT (item), unity_submenu_model_quark ());
508
519
    if (model == NULL) {
603
614
 
604
615
bool UnityMenuModel::loadExtendedAttributes(int position, const QVariantMap &schema)
605
616
{
 
617
    GSequenceIter *it;
606
618
    GtkMenuTrackerItem *item;
607
619
    QVariantMap *extendedAttrs;
608
620
 
609
 
    item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, position));
 
621
    it = g_sequence_get_iter_at_pos (priv->items, position);
 
622
    if (g_sequence_iter_is_end (it)) {
 
623
        return false;
 
624
    }
 
625
 
 
626
    item = (GtkMenuTrackerItem *) g_sequence_get (it);
 
627
    if (!item) {
 
628
        return false;
 
629
    }
610
630
 
611
631
    extendedAttrs = new QVariantMap;
612
632
 
647
667
 
648
668
void UnityMenuModel::activate(int index, const QVariant& parameter)
649
669
{
 
670
    GSequenceIter *it;
650
671
    GtkMenuTrackerItem *item;
651
672
 
652
 
    item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
 
673
    it = g_sequence_get_iter_at_pos (priv->items, index);
 
674
    if (g_sequence_iter_is_end (it)) {
 
675
        return;
 
676
    }
 
677
 
 
678
    item = (GtkMenuTrackerItem *) g_sequence_get (it);
 
679
    if (!item) {
 
680
        return;
 
681
    }
653
682
 
654
683
    if (parameter.isValid()) {
655
684
        gchar *action;
665
694
 
666
695
void UnityMenuModel::changeState(int index, const QVariant& parameter)
667
696
{
 
697
    GSequenceIter *it;
668
698
    GtkMenuTrackerItem* item;
669
699
    GVariant* data;
670
700
    GVariant* current_state;
671
701
 
672
 
    item = (GtkMenuTrackerItem *) g_sequence_get (g_sequence_get_iter_at_pos (priv->items, index));
673
 
    if (!item) return;
 
702
    it = g_sequence_get_iter_at_pos (priv->items, index);
 
703
    if (g_sequence_iter_is_end (it)) {
 
704
        return;
 
705
    }
 
706
 
 
707
    item = (GtkMenuTrackerItem *) g_sequence_get (it);
 
708
    if (!item) {
 
709
        return;
 
710
    }
674
711
 
675
712
    current_state = gtk_menu_tracker_item_get_action_state (item);
676
713
    if (current_state) {
712
749
 
713
750
        GSequenceIter *it;
714
751
        it = g_sequence_get_iter_at_pos (priv->items, ummrce->position);
715
 
        if (it) {
716
 
            beginInsertRows(QModelIndex(), ummrce->position, ummrce->position);
717
 
 
718
 
            it = g_sequence_insert_before (it, g_object_ref (ummrce->item));
719
 
            g_object_set_qdata (G_OBJECT (ummrce->item), unity_menu_model_quark (), this);
720
 
            g_signal_connect (ummrce->item, "notify", G_CALLBACK (UnityMenuModelPrivate::menuItemChanged), it);
721
 
 
722
 
            endInsertRows();
723
 
        }
 
752
 
 
753
        beginInsertRows(QModelIndex(), ummrce->position, ummrce->position);
 
754
 
 
755
        it = g_sequence_insert_before (it, g_object_ref (ummrce->item));
 
756
        g_object_set_qdata (G_OBJECT (ummrce->item), unity_menu_model_quark (), this);
 
757
        g_signal_connect (ummrce->item, "notify", G_CALLBACK (UnityMenuModelPrivate::menuItemChanged), it);
 
758
 
 
759
        endInsertRows();
724
760
        return true;
725
761
    } else if (e->type() == UnityMenuModelRemoveRowEvent::eventType) {
726
762
        UnityMenuModelRemoveRowEvent *ummrre = static_cast<UnityMenuModelRemoveRowEvent*>(e);
727
763
 
728
764
        GSequenceIter *it;
729
765
        it = g_sequence_get_iter_at_pos (priv->items, ummrre->position);
730
 
        if (it) {
 
766
        if (!g_sequence_iter_is_end (it)) {
731
767
            beginRemoveRows(QModelIndex(), ummrre->position, ummrre->position);
732
768
 
733
769
            g_sequence_remove (it);
799
835
        const gchar *action_namespace;
800
836
 
801
837
        item = (GtkMenuTrackerItem *) g_sequence_get (iter);
 
838
        if (!item) {
 
839
            return g_strdup (name);
 
840
        }
 
841
 
802
842
        action_namespace = gtk_menu_tracker_item_get_action_namespace (item);
803
843
        if (action_namespace != NULL)
804
844
          return g_strjoin (".", action_namespace, name, NULL);