code: def quick_layout_save(self):
          
          get = CONF.get
          set_ = CONF.set
          names = get('quick_layouts', 'names')
          order = get('quick_layouts', 'order')
          active = get('quick_layouts', 'active')
  
          dlg = self.dialog_layout_save(self, names)
  
          if dlg.exec_():
              name = dlg.combo_box.currentText()
  
              if name in names:
                  answer = QMessageBox.warning(self, _("Warning"),
                                               _("Layout <b>%s</b> will be \
                                                 overwritten. Do you want to \
                                                 continue?") % name,
                                               QMessageBox.Yes | QMessageBox.No)
                  index = order.index(name)
              else:
                  answer = True
                  if None in names:
                      index = names.index(None)
                      names[index] = name
                  else:
                      index = len(names)
                      names.append(name)
                  order.append(name)
  
              # Always make active a new layout even if it overwrites an inactive
              # layout
              if name not in active:
                  active.append(name)
  
              if answer:
                  self.save_current_window_settings('layout_{}/'.format(index),
                                                    section='quick_layouts')
                  set_('quick_layouts', 'names', names)
                  set_('quick_layouts', 'order', order)
                  set_('quick_layouts', 'active', active)
                  self.quick_layout_set_menu()
docs: Save layout dialog